omniroute 3.7.2 → 3.7.3

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 (362) hide show
  1. package/app/.next/BUILD_ID +1 -1
  2. package/app/.next/app-path-routes-manifest.json +15 -15
  3. package/app/.next/build-manifest.json +3 -3
  4. package/app/.next/prerender-manifest.json +3 -3
  5. package/app/.next/react-loadable-manifest.json +3 -3
  6. package/app/.next/server/app/(dashboard)/dashboard/agents/page_client-reference-manifest.js +1 -1
  7. package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  8. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -1
  9. package/app/.next/server/app/(dashboard)/dashboard/audit/page_client-reference-manifest.js +1 -1
  10. package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page_client-reference-manifest.js +1 -1
  11. package/app/.next/server/app/(dashboard)/dashboard/batch/page_client-reference-manifest.js +1 -1
  12. package/app/.next/server/app/(dashboard)/dashboard/cache/media/page.js +1 -1
  13. package/app/.next/server/app/(dashboard)/dashboard/cache/media/page_client-reference-manifest.js +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/cache/page_client-reference-manifest.js +1 -1
  15. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  16. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  17. package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
  18. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  19. package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
  20. package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
  21. package/app/.next/server/app/(dashboard)/dashboard/logs/page.js +1 -1
  22. package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
  23. package/app/.next/server/app/(dashboard)/dashboard/memory/page_client-reference-manifest.js +1 -1
  24. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
  25. package/app/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  26. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  27. package/app/.next/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  28. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  29. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  30. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  31. package/app/.next/server/app/(dashboard)/dashboard/search-tools/page_client-reference-manifest.js +1 -1
  32. package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
  33. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  34. package/app/.next/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  35. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  36. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  37. package/app/.next/server/app/400/page_client-reference-manifest.js +1 -1
  38. package/app/.next/server/app/401/page_client-reference-manifest.js +1 -1
  39. package/app/.next/server/app/403/page_client-reference-manifest.js +1 -1
  40. package/app/.next/server/app/408/page_client-reference-manifest.js +1 -1
  41. package/app/.next/server/app/429/page_client-reference-manifest.js +1 -1
  42. package/app/.next/server/app/500/page_client-reference-manifest.js +1 -1
  43. package/app/.next/server/app/502/page_client-reference-manifest.js +1 -1
  44. package/app/.next/server/app/503/page_client-reference-manifest.js +1 -1
  45. package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  46. package/app/.next/server/app/_global-error.html +1 -1
  47. package/app/.next/server/app/_global-error.rsc +1 -1
  48. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  49. package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  50. package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  51. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  52. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  53. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  54. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  55. package/app/.next/server/app/api/acp/agents/route.js.nft.json +1 -1
  56. package/app/.next/server/app/api/auth/login/route.js.nft.json +1 -1
  57. package/app/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
  58. package/app/.next/server/app/api/batches/route.js.nft.json +1 -1
  59. package/app/.next/server/app/api/cache/entries/route.js.nft.json +1 -1
  60. package/app/.next/server/app/api/cache/reasoning/route.js.nft.json +1 -1
  61. package/app/.next/server/app/api/cache/route.js.nft.json +1 -1
  62. package/app/.next/server/app/api/cache/stats/route.js.nft.json +1 -1
  63. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  64. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  65. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  66. package/app/.next/server/app/api/cli-tools/backups/route.js +2 -2
  67. package/app/.next/server/app/api/cli-tools/backups/route.js.nft.json +1 -1
  68. package/app/.next/server/app/api/cli-tools/claude-settings/route.js +2 -2
  69. package/app/.next/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  70. package/app/.next/server/app/api/cli-tools/cline-settings/route.js +1 -1
  71. package/app/.next/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  72. package/app/.next/server/app/api/cli-tools/codex-profiles/route.js +1 -1
  73. package/app/.next/server/app/api/cli-tools/codex-profiles/route.js.nft.json +1 -1
  74. package/app/.next/server/app/api/cli-tools/codex-settings/route.js +2 -2
  75. package/app/.next/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  76. package/app/.next/server/app/api/cli-tools/droid-settings/route.js +1 -1
  77. package/app/.next/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  78. package/app/.next/server/app/api/cli-tools/guide-settings/[toolId]/route.js.nft.json +1 -1
  79. package/app/.next/server/app/api/cli-tools/keys/route.js.nft.json +1 -1
  80. package/app/.next/server/app/api/cli-tools/kilo-settings/route.js +1 -1
  81. package/app/.next/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  82. package/app/.next/server/app/api/cli-tools/openclaw/auto-order/route.js.nft.json +1 -1
  83. package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js +1 -1
  84. package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  85. package/app/.next/server/app/api/cli-tools/qwen-settings/route.js +1 -1
  86. package/app/.next/server/app/api/cli-tools/qwen-settings/route.js.nft.json +1 -1
  87. package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route.js +2 -2
  88. package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route.js.nft.json +1 -1
  89. package/app/.next/server/app/api/cli-tools/status/route.js +1 -1
  90. package/app/.next/server/app/api/cli-tools/status/route.js.nft.json +1 -1
  91. package/app/.next/server/app/api/cloud/auth/route.js.nft.json +1 -1
  92. package/app/.next/server/app/api/cloud/credentials/update/route.js.nft.json +1 -1
  93. package/app/.next/server/app/api/cloud/model/resolve/route.js.nft.json +1 -1
  94. package/app/.next/server/app/api/cloud/models/alias/route.js.nft.json +1 -1
  95. package/app/.next/server/app/api/combos/[id]/route.js +1 -1
  96. package/app/.next/server/app/api/combos/[id]/route.js.nft.json +1 -1
  97. package/app/.next/server/app/api/combos/builder/options/route.js.nft.json +1 -1
  98. package/app/.next/server/app/api/combos/metrics/route.js.nft.json +1 -1
  99. package/app/.next/server/app/api/combos/reorder/route.js.nft.json +1 -1
  100. package/app/.next/server/app/api/combos/route.js +1 -1
  101. package/app/.next/server/app/api/combos/route.js.nft.json +1 -1
  102. package/app/.next/server/app/api/combos/test/route.js +1 -1
  103. package/app/.next/server/app/api/combos/test/route.js.nft.json +1 -1
  104. package/app/.next/server/app/api/compliance/audit-log/route.js.nft.json +1 -1
  105. package/app/.next/server/app/api/db-backups/export/route.js.nft.json +1 -1
  106. package/app/.next/server/app/api/db-backups/exportAll/route.js.nft.json +1 -1
  107. package/app/.next/server/app/api/db-backups/import/route.js.nft.json +1 -1
  108. package/app/.next/server/app/api/db-backups/route.js.nft.json +1 -1
  109. package/app/.next/server/app/api/evals/[suiteId]/route.js.nft.json +1 -1
  110. package/app/.next/server/app/api/evals/route.js.nft.json +1 -1
  111. package/app/.next/server/app/api/evals/scorecard/route.js.nft.json +1 -1
  112. package/app/.next/server/app/api/evals/suites/[suiteId]/route.js.nft.json +1 -1
  113. package/app/.next/server/app/api/evals/suites/route.js.nft.json +1 -1
  114. package/app/.next/server/app/api/fallback/chains/route.js.nft.json +1 -1
  115. package/app/.next/server/app/api/files/[id]/content/route.js.nft.json +1 -1
  116. package/app/.next/server/app/api/files/route.js.nft.json +1 -1
  117. package/app/.next/server/app/api/init/route.js.nft.json +1 -1
  118. package/app/.next/server/app/api/internal/codex-responses-ws/route.js.nft.json +1 -1
  119. package/app/.next/server/app/api/keys/[id]/reveal/route.js.nft.json +1 -1
  120. package/app/.next/server/app/api/keys/[id]/route.js.nft.json +1 -1
  121. package/app/.next/server/app/api/keys/route.js.nft.json +1 -1
  122. package/app/.next/server/app/api/logs/active/route.js.nft.json +1 -1
  123. package/app/.next/server/app/api/logs/console/route.js.nft.json +1 -1
  124. package/app/.next/server/app/api/logs/detail/route.js.nft.json +1 -1
  125. package/app/.next/server/app/api/logs/export/route.js.nft.json +1 -1
  126. package/app/.next/server/app/api/mcp/sse/route.js.nft.json +1 -1
  127. package/app/.next/server/app/api/mcp/status/route.js.nft.json +1 -1
  128. package/app/.next/server/app/api/mcp/stream/route.js.nft.json +1 -1
  129. package/app/.next/server/app/api/memory/[id]/route.js.nft.json +1 -1
  130. package/app/.next/server/app/api/memory/health/route.js.nft.json +1 -1
  131. package/app/.next/server/app/api/memory/route.js.nft.json +1 -1
  132. package/app/.next/server/app/api/model-combo-mappings/[id]/route.js.nft.json +1 -1
  133. package/app/.next/server/app/api/model-combo-mappings/route.js.nft.json +1 -1
  134. package/app/.next/server/app/api/models/alias/route.js.nft.json +1 -1
  135. package/app/.next/server/app/api/models/catalog/route.js.nft.json +1 -1
  136. package/app/.next/server/app/api/models/openrouter-catalog/route.js.nft.json +1 -1
  137. package/app/.next/server/app/api/models/route.js.nft.json +1 -1
  138. package/app/.next/server/app/api/models/test/route.js.nft.json +1 -1
  139. package/app/.next/server/app/api/monitoring/health/route.js +1 -1
  140. package/app/.next/server/app/api/monitoring/health/route.js.nft.json +1 -1
  141. package/app/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  142. package/app/.next/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  143. package/app/.next/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  144. package/app/.next/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  145. package/app/.next/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  146. package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  147. package/app/.next/server/app/api/openapi/try/route.js.nft.json +1 -1
  148. package/app/.next/server/app/api/policies/route.js.nft.json +1 -1
  149. package/app/.next/server/app/api/pricing/models/route.js.nft.json +1 -1
  150. package/app/.next/server/app/api/pricing/route.js.nft.json +1 -1
  151. package/app/.next/server/app/api/pricing/sync/route.js.nft.json +1 -1
  152. package/app/.next/server/app/api/provider-metrics/route.js.nft.json +1 -1
  153. package/app/.next/server/app/api/provider-models/route.js.nft.json +1 -1
  154. package/app/.next/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  155. package/app/.next/server/app/api/provider-nodes/route.js.nft.json +1 -1
  156. package/app/.next/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  157. package/app/.next/server/app/api/providers/[id]/codex-auth/apply-local/route.js.nft.json +1 -1
  158. package/app/.next/server/app/api/providers/[id]/codex-auth/export/route.js.nft.json +1 -1
  159. package/app/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  160. package/app/.next/server/app/api/providers/[id]/refresh/route.js.nft.json +1 -1
  161. package/app/.next/server/app/api/providers/[id]/route.js.nft.json +1 -1
  162. package/app/.next/server/app/api/providers/[id]/sync-models/route.js.nft.json +1 -1
  163. package/app/.next/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  164. package/app/.next/server/app/api/providers/client/route.js.nft.json +1 -1
  165. package/app/.next/server/app/api/providers/route.js.nft.json +1 -1
  166. package/app/.next/server/app/api/providers/test-batch/route.js +1 -1
  167. package/app/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  168. package/app/.next/server/app/api/providers/validate/route.js.nft.json +1 -1
  169. package/app/.next/server/app/api/providers/zed/import/route.js.nft.json +1 -1
  170. package/app/.next/server/app/api/rate-limits/route.js.nft.json +1 -1
  171. package/app/.next/server/app/api/resilience/reset/route.js.nft.json +1 -1
  172. package/app/.next/server/app/api/resilience/route.js.nft.json +1 -1
  173. package/app/.next/server/app/api/restart/route.js.nft.json +1 -1
  174. package/app/.next/server/app/api/search/providers/route.js.nft.json +1 -1
  175. package/app/.next/server/app/api/search/stats/route.js.nft.json +1 -1
  176. package/app/.next/server/app/api/settings/auto-disable-accounts/route.js.nft.json +1 -1
  177. package/app/.next/server/app/api/settings/background-degradation/route.js.nft.json +1 -1
  178. package/app/.next/server/app/api/settings/cache-config/route.js.nft.json +1 -1
  179. package/app/.next/server/app/api/settings/cache-metrics/route.js.nft.json +1 -1
  180. package/app/.next/server/app/api/settings/combo-defaults/route.js.nft.json +1 -1
  181. package/app/.next/server/app/api/settings/export-json/route.js.nft.json +1 -1
  182. package/app/.next/server/app/api/settings/favicon/route.js.nft.json +1 -1
  183. package/app/.next/server/app/api/settings/import-json/route.js.nft.json +1 -1
  184. package/app/.next/server/app/api/settings/ip-filter/route.js.nft.json +1 -1
  185. package/app/.next/server/app/api/settings/lkgp-cache/route.js.nft.json +1 -1
  186. package/app/.next/server/app/api/settings/memory/route.js.nft.json +1 -1
  187. package/app/.next/server/app/api/settings/model-aliases/route.js.nft.json +1 -1
  188. package/app/.next/server/app/api/settings/models-dev/route.js.nft.json +1 -1
  189. package/app/.next/server/app/api/settings/payload-rules/route.js.nft.json +1 -1
  190. package/app/.next/server/app/api/settings/proxies/assignments/route.js.nft.json +1 -1
  191. package/app/.next/server/app/api/settings/proxies/bulk-assign/route.js.nft.json +1 -1
  192. package/app/.next/server/app/api/settings/proxies/health/route.js.nft.json +1 -1
  193. package/app/.next/server/app/api/settings/proxies/migrate/route.js.nft.json +1 -1
  194. package/app/.next/server/app/api/settings/proxies/route.js.nft.json +1 -1
  195. package/app/.next/server/app/api/settings/proxy/route.js.nft.json +1 -1
  196. package/app/.next/server/app/api/settings/proxy/test/route.js.nft.json +1 -1
  197. package/app/.next/server/app/api/settings/purge-logs/route.js.nft.json +1 -1
  198. package/app/.next/server/app/api/settings/require-login/route.js.nft.json +1 -1
  199. package/app/.next/server/app/api/settings/route.js.nft.json +1 -1
  200. package/app/.next/server/app/api/settings/system-prompt/route.js.nft.json +1 -1
  201. package/app/.next/server/app/api/settings/task-routing/route.js.nft.json +1 -1
  202. package/app/.next/server/app/api/settings/thinking-budget/route.js.nft.json +1 -1
  203. package/app/.next/server/app/api/shutdown/route.js.nft.json +1 -1
  204. package/app/.next/server/app/api/skills/[id]/route.js.nft.json +1 -1
  205. package/app/.next/server/app/api/skills/executions/route.js.nft.json +1 -1
  206. package/app/.next/server/app/api/skills/install/route.js.nft.json +1 -1
  207. package/app/.next/server/app/api/skills/marketplace/install/route.js.nft.json +1 -1
  208. package/app/.next/server/app/api/skills/marketplace/route.js.nft.json +1 -1
  209. package/app/.next/server/app/api/skills/route.js.nft.json +1 -1
  210. package/app/.next/server/app/api/skills/skillssh/install/route.js.nft.json +1 -1
  211. package/app/.next/server/app/api/skills/skillssh/route.js.nft.json +1 -1
  212. package/app/.next/server/app/api/storage/health/route.js.nft.json +1 -1
  213. package/app/.next/server/app/api/sync/bundle/route.js.nft.json +1 -1
  214. package/app/.next/server/app/api/sync/cloud/route.js.nft.json +1 -1
  215. package/app/.next/server/app/api/sync/initialize/route.js.nft.json +1 -1
  216. package/app/.next/server/app/api/sync/tokens/[id]/route.js.nft.json +1 -1
  217. package/app/.next/server/app/api/sync/tokens/route.js.nft.json +1 -1
  218. package/app/.next/server/app/api/synced-available-models/route.js.nft.json +1 -1
  219. package/app/.next/server/app/api/system/env/repair/route.js.nft.json +1 -1
  220. package/app/.next/server/app/api/system/version/route.js +1 -1
  221. package/app/.next/server/app/api/system/version/route.js.nft.json +1 -1
  222. package/app/.next/server/app/api/token-health/route.js.nft.json +1 -1
  223. package/app/.next/server/app/api/translator/save/route.js.nft.json +1 -1
  224. package/app/.next/server/app/api/translator/send/route.js.nft.json +1 -1
  225. package/app/.next/server/app/api/translator/translate/route.js.nft.json +1 -1
  226. package/app/.next/server/app/api/tunnels/cloudflared/route.js.nft.json +1 -1
  227. package/app/.next/server/app/api/tunnels/tailscale/check/route.js.nft.json +1 -1
  228. package/app/.next/server/app/api/tunnels/tailscale/disable/route.js.nft.json +1 -1
  229. package/app/.next/server/app/api/tunnels/tailscale/enable/route.js.nft.json +1 -1
  230. package/app/.next/server/app/api/tunnels/tailscale/install/route.js.nft.json +1 -1
  231. package/app/.next/server/app/api/tunnels/tailscale/login/route.js.nft.json +1 -1
  232. package/app/.next/server/app/api/tunnels/tailscale/route.js.nft.json +1 -1
  233. package/app/.next/server/app/api/tunnels/tailscale/start-daemon/route.js.nft.json +1 -1
  234. package/app/.next/server/app/api/upstream-proxy/[providerId]/route.js.nft.json +1 -1
  235. package/app/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  236. package/app/.next/server/app/api/usage/analytics/route.js.nft.json +1 -1
  237. package/app/.next/server/app/api/usage/budget/route.js.nft.json +1 -1
  238. package/app/.next/server/app/api/usage/call-logs/[id]/route.js.nft.json +1 -1
  239. package/app/.next/server/app/api/usage/call-logs/route.js.nft.json +1 -1
  240. package/app/.next/server/app/api/usage/combo-health/route.js +1 -1
  241. package/app/.next/server/app/api/usage/combo-health/route.js.nft.json +1 -1
  242. package/app/.next/server/app/api/usage/history/route.js.nft.json +1 -1
  243. package/app/.next/server/app/api/usage/logs/route.js.nft.json +1 -1
  244. package/app/.next/server/app/api/usage/provider-limits/route.js.nft.json +1 -1
  245. package/app/.next/server/app/api/usage/proxy-logs/route.js.nft.json +1 -1
  246. package/app/.next/server/app/api/usage/quota/route.js.nft.json +1 -1
  247. package/app/.next/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  248. package/app/.next/server/app/api/usage/utilization/route.js.nft.json +1 -1
  249. package/app/.next/server/app/api/v1/accounts/[id]/limits/route.js.nft.json +1 -1
  250. package/app/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  251. package/app/.next/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  252. package/app/.next/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  253. package/app/.next/server/app/api/v1/batches/[id]/cancel/route.js.nft.json +1 -1
  254. package/app/.next/server/app/api/v1/batches/[id]/route.js.nft.json +1 -1
  255. package/app/.next/server/app/api/v1/batches/route.js.nft.json +1 -1
  256. package/app/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  257. package/app/.next/server/app/api/v1/completions/route.js.nft.json +1 -1
  258. package/app/.next/server/app/api/v1/db/health/route.js.nft.json +1 -1
  259. package/app/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  260. package/app/.next/server/app/api/v1/files/[id]/content/route.js.nft.json +1 -1
  261. package/app/.next/server/app/api/v1/files/[id]/route.js.nft.json +1 -1
  262. package/app/.next/server/app/api/v1/files/route.js.nft.json +1 -1
  263. package/app/.next/server/app/api/v1/images/edits/route.js.nft.json +1 -1
  264. package/app/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  265. package/app/.next/server/app/api/v1/issues/report/route.js.nft.json +1 -1
  266. package/app/.next/server/app/api/v1/management/proxies/assignments/route.js.nft.json +1 -1
  267. package/app/.next/server/app/api/v1/management/proxies/bulk-assign/route.js.nft.json +1 -1
  268. package/app/.next/server/app/api/v1/management/proxies/health/route.js.nft.json +1 -1
  269. package/app/.next/server/app/api/v1/management/proxies/route.js.nft.json +1 -1
  270. package/app/.next/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  271. package/app/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
  272. package/app/.next/server/app/api/v1/models/route.js.nft.json +1 -1
  273. package/app/.next/server/app/api/v1/moderations/route.js.nft.json +1 -1
  274. package/app/.next/server/app/api/v1/music/generations/route.js.nft.json +1 -1
  275. package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route.js.nft.json +1 -1
  276. package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route.js.nft.json +1 -1
  277. package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route.js.nft.json +1 -1
  278. package/app/.next/server/app/api/v1/providers/[provider]/limits/route.js.nft.json +1 -1
  279. package/app/.next/server/app/api/v1/quotas/check/route.js.nft.json +1 -1
  280. package/app/.next/server/app/api/v1/registered-keys/[id]/revoke/route.js.nft.json +1 -1
  281. package/app/.next/server/app/api/v1/registered-keys/[id]/route.js.nft.json +1 -1
  282. package/app/.next/server/app/api/v1/registered-keys/route.js.nft.json +1 -1
  283. package/app/.next/server/app/api/v1/rerank/route.js.nft.json +1 -1
  284. package/app/.next/server/app/api/v1/responses/[...path]/route.js.nft.json +1 -1
  285. package/app/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
  286. package/app/.next/server/app/api/v1/route.js.nft.json +1 -1
  287. package/app/.next/server/app/api/v1/search/analytics/route.js.nft.json +1 -1
  288. package/app/.next/server/app/api/v1/search/route.js.nft.json +1 -1
  289. package/app/.next/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
  290. package/app/.next/server/app/api/v1/ws/route.js.nft.json +1 -1
  291. package/app/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  292. package/app/.next/server/app/api/v1beta/models/route.js.nft.json +1 -1
  293. package/app/.next/server/app/api/version-manager/check-update/route.js +1 -1
  294. package/app/.next/server/app/api/version-manager/check-update/route.js.nft.json +1 -1
  295. package/app/.next/server/app/api/version-manager/install/route.js +1 -1
  296. package/app/.next/server/app/api/version-manager/install/route.js.nft.json +1 -1
  297. package/app/.next/server/app/api/version-manager/restart/route.js +1 -1
  298. package/app/.next/server/app/api/version-manager/restart/route.js.nft.json +1 -1
  299. package/app/.next/server/app/api/version-manager/start/route.js +1 -1
  300. package/app/.next/server/app/api/version-manager/start/route.js.nft.json +1 -1
  301. package/app/.next/server/app/api/version-manager/status/route.js +1 -1
  302. package/app/.next/server/app/api/version-manager/status/route.js.nft.json +1 -1
  303. package/app/.next/server/app/api/version-manager/stop/route.js +1 -1
  304. package/app/.next/server/app/api/version-manager/stop/route.js.nft.json +1 -1
  305. package/app/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
  306. package/app/.next/server/app/api/webhooks/[id]/test/route.js.nft.json +1 -1
  307. package/app/.next/server/app/api/webhooks/route.js.nft.json +1 -1
  308. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  309. package/app/.next/server/app/docs/page.js +1 -1
  310. package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  311. package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
  312. package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
  313. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  314. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  315. package/app/.next/server/app/maintenance/page_client-reference-manifest.js +1 -1
  316. package/app/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  317. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  318. package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
  319. package/app/.next/server/app/status/page_client-reference-manifest.js +1 -1
  320. package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
  321. package/app/.next/server/app-paths-manifest.json +15 -15
  322. package/app/.next/server/chunks/12767.js +1 -1
  323. package/app/.next/server/chunks/19849.js +1 -1
  324. package/app/.next/server/chunks/20236.js +1 -1
  325. package/app/.next/server/chunks/36040.js +4 -4
  326. package/app/.next/server/chunks/3832.js +1 -1
  327. package/app/.next/server/chunks/39548.js +1 -1
  328. package/app/.next/server/chunks/39859.js +1 -1
  329. package/app/.next/server/chunks/44088.js +1 -1
  330. package/app/.next/server/chunks/45415.js +1 -1
  331. package/app/.next/server/chunks/55672.js +1 -0
  332. package/app/.next/server/chunks/59092.js +2 -2
  333. package/app/.next/server/chunks/66094.js +1 -1
  334. package/app/.next/server/chunks/69105.js +1 -1
  335. package/app/.next/server/chunks/75225.js +1 -1
  336. package/app/.next/server/chunks/77044.js +1 -1
  337. package/app/.next/server/chunks/83648.js +1 -1
  338. package/app/.next/server/chunks/93831.js +4 -4
  339. package/app/.next/server/chunks/9679.js +3 -3
  340. package/app/.next/server/chunks/99168.js +2 -2
  341. package/app/.next/server/middleware-build-manifest.js +1 -1
  342. package/app/.next/server/middleware-react-loadable-manifest.js +1 -1
  343. package/app/.next/server/middleware.js +2 -2
  344. package/app/.next/server/pages/500.html +1 -1
  345. package/app/.next/server/server-reference-manifest.js +1 -1
  346. package/app/.next/server/server-reference-manifest.json +1 -1
  347. package/app/.next/static/chunks/{1999-fefe90c60eaa3b23.js → 1999-8cf58c233346f980.js} +1 -1
  348. package/app/.next/static/chunks/app/(dashboard)/dashboard/cache/media/page-ad8091c5b7536b7a.js +1 -0
  349. package/app/.next/static/chunks/app/(dashboard)/dashboard/logs/page-ccc65d29bbb19d51.js +1 -0
  350. package/app/.next/static/chunks/app/{layout-3e3b043f9b52bb80.js → layout-fbebdd84c4996160.js} +1 -1
  351. package/app/.next/static/chunks/{webpack-117eac5998a94c69.js → webpack-ea5983ad4b51e934.js} +1 -1
  352. package/app/.next/static/css/7caa8a6802c65def.css +1 -0
  353. package/app/docs/openapi.yaml +1 -1
  354. package/app/open-sse/mcp-server/server.js +15 -1
  355. package/app/package.json +1 -1
  356. package/package.json +1 -1
  357. package/app/.next/server/chunks/80812.js +0 -1
  358. package/app/.next/static/chunks/app/(dashboard)/dashboard/cache/media/page-f0289617f824bbf2.js +0 -1
  359. package/app/.next/static/chunks/app/(dashboard)/dashboard/logs/page-f24fde8a3f731108.js +0 -1
  360. package/app/.next/static/css/8d36e4e21725013b.css +0 -1
  361. /package/app/.next/static/{yvJ6rPtn4eb7sOBUCBGrF → qmeYzerLcoUXZ06JXgit3}/_buildManifest.js +0 -0
  362. /package/app/.next/static/{yvJ6rPtn4eb7sOBUCBGrF → qmeYzerLcoUXZ06JXgit3}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- "use strict";exports.id=39548,exports.ids=[39548],exports.modules={15102:(a,b,c)=>{c.d(b,{NT:()=>k,Uk:()=>i,bV:()=>h,lw:()=>j});let d={"flux-kontext":{provider:"pollinations",model:"flux-kontext",name:"FLUX Kontext",listInCatalog:!0,inputModalities:["text","image"]},"flux-kontext-max":{provider:"together",model:"black-forest-labs/FLUX.1.1-pro",name:"FLUX Kontext Max",listInCatalog:!0,inputModalities:["text","image"]},"flux-redux":{provider:"together",model:"black-forest-labs/FLUX.1-redux",name:"FLUX Redux",listInCatalog:!0,inputModalities:["text","image"]},"flux-depth":{provider:"together",model:"black-forest-labs/FLUX.1-depth",name:"FLUX Depth",listInCatalog:!0,inputModalities:["text","image"]},"flux-canny":{provider:"together",model:"black-forest-labs/FLUX.1-canny",name:"FLUX Canny",listInCatalog:!0,inputModalities:["text","image"]},"flux-dev-lora":{provider:"together",model:"black-forest-labs/FLUX.1-dev-lora",name:"FLUX Dev LoRA",listInCatalog:!0},kontext:{provider:"pollinations",model:"flux-kontext",name:"FLUX Kontext",listInCatalog:!1},"pollinations/kontext":{provider:"pollinations",model:"flux-kontext",name:"FLUX Kontext",listInCatalog:!1}};function e(a){let b=d[a];return b?{provider:b.provider,model:b.model}:null}function f(a,b){let c=g[a];return c&&c.models.find(a=>a.id===b)||null}let g={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"]},codex:{id:"codex",alias:"cx",baseUrl:"https://chatgpt.com/backend-api/codex/responses",authType:"oauth",authHeader:"bearer",format:"codex-responses",models:[{id:"gpt-5.4",name:"GPT 5.4 (Codex Image)"},{id:"gpt-5.3-codex",name:"GPT 5.3 Codex (Image)"},{id:"gpt-5.1-codex-max",name:"GPT 5.1 Codex Max (Image)"}],supportedSizes:["512x512","1024x1024","1024x1536","1536x1024"]},"chatgpt-web":{id:"chatgpt-web",alias:"cgpt-web",baseUrl:"https://chatgpt.com/backend-api/f/conversation",authType:"apikey",authHeader:"cookie",format:"chatgpt-web",models:[{id:"gpt-5.3-instant",name:"GPT-5.3 Instant (ChatGPT Web Image)"}],supportedSizes:["1024x1024","1024x1536","1536x1024"]},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",inputModalities:["text","image"],description:"Advanced contextual image editing and image-to-image generation"},{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"},{id:"black-forest-labs/FLUX.1-redux",name:"FLUX.1 Redux",inputModalities:["text","image"],description:"Generate prompt-guided variations from an input image"},{id:"black-forest-labs/FLUX.1-depth",name:"FLUX.1 Depth",inputModalities:["text","image"],description:"Depth-conditioned image generation from an input image"},{id:"black-forest-labs/FLUX.1-canny",name:"FLUX.1 Canny",inputModalities:["text","image"],description:"Canny edge guided image generation from an input image"},{id:"black-forest-labs/FLUX.1-dev-lora",name:"FLUX.1 Dev LoRA"}],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:[],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"]},openrouter:{id:"openrouter",baseUrl:"https://openrouter.ai/api/v1/images/generations",authType:"apikey",authHeader:"bearer",format:"openai",models:[{id:"openai/dall-e-3",name:"DALL-E 3 (via OpenRouter)"},{id:"openai/gpt-image-1",name:"GPT Image 1 (via OpenRouter)"},{id:"google/imagen-3.0-generate-002",name:"Imagen 3 (via OpenRouter)"},{id:"black-forest-labs/FLUX.1-schnell",name:"FLUX.1 Schnell (via OpenRouter)"}],supportedSizes:["1024x1024","1024x1792","1792x1024","256x256","512x512"]},pollinations:{id:"pollinations",alias:"pol",baseUrl:"https://gen.pollinations.ai/v1/images/generations",authType:"apikey",authHeader:"bearer",format:"openai",models:[{id:"flux",name:"Flux Schnell"},{id:"zimage",name:"Z-Image Turbo"},{id:"klein",name:"FLUX.2 Klein 4B"},{id:"gptimage",name:"GPT Image 1 Mini"},{id:"qwen-image",name:"Qwen Image Plus"},{id:"wan-image",name:"Wan 2.7 Image"},{id:"flux-kontext",name:"FLUX.1 Kontext",inputModalities:["text","image"],description:"Context-aware image editing with optional source image"},{id:"flux-kontext-max",name:"FLUX.1 Kontext Max",inputModalities:["text","image"],description:"Higher quality Kontext editing with optional source image"},{id:"gptimage-large",name:"GPT Image 1.5"}],supportedSizes:["1024x1024","512x512"]},"fal-ai":{id:"fal-ai",baseUrl:"https://fal.run",authType:"apikey",authHeader:"key",format:"fal-ai",models:[{id:"fal-ai/flux-pro/v1.1",name:"FLUX.1 Pro v1.1"},{id:"fal-ai/flux-pro/v1.1-ultra",name:"FLUX.1 Pro v1.1 Ultra"},{id:"fal-ai/flux/schnell",name:"FLUX.1 Schnell"},{id:"bria/text-to-image/3.2",name:"Bria 3.2"},{id:"fal-ai/bytedance/seedream/v3/text-to-image",name:"SeeDream V3"},{id:"fal-ai/bytedance/dreamina/v3.1/text-to-image",name:"Dreamina V3.1"},{id:"fal-ai/ideogram/v3",name:"Ideogram V3"},{id:"fal-ai/imagen4/preview",name:"Imagen 4 Preview"},{id:"fal-ai/imagen4/preview/fast",name:"Imagen 4 Preview Fast"},{id:"fal-ai/imagen4/preview/ultra",name:"Imagen 4 Preview Ultra"},{id:"fal-ai/recraft/v3/text-to-image",name:"Recraft V3 via Fal"},{id:"fal-ai/stable-diffusion-v35-medium",name:"Stable Diffusion v3.5 Medium"}],supportedSizes:["1024x1024","1024x1280","1280x1024"]},"stability-ai":{id:"stability-ai",baseUrl:"https://api.stability.ai",authType:"apikey",authHeader:"bearer",format:"stability-ai",models:[{id:"sd3",name:"sd3"},{id:"sd3-large",name:"sd3-large"},{id:"sd3-large-turbo",name:"sd3-large-turbo"},{id:"sd3-medium",name:"sd3-medium"},{id:"sd3.5-large",name:"sd3.5-large"},{id:"sd3.5-large-turbo",name:"sd3.5-large-turbo"},{id:"sd3.5-medium",name:"sd3.5-medium"},{id:"stable-image-ultra",name:"Stable Image Ultra"},{id:"stable-image-core",name:"Stable Image Core"},{id:"inpaint",name:"Inpaint",inputModalities:["text","image"]},{id:"outpaint",name:"Outpaint",inputModalities:["text","image"]},{id:"erase",name:"Erase",inputModalities:["image"]},{id:"search-and-replace",name:"Search and Replace",inputModalities:["text","image"]},{id:"search-and-recolor",name:"Search and Recolor",inputModalities:["text","image"]},{id:"remove-background",name:"Remove Background",inputModalities:["image"]},{id:"replace-background-and-relight",name:"Replace Background and Relight",inputModalities:["text","image"]},{id:"fast",name:"Fast Upscale",inputModalities:["image"]},{id:"conservative",name:"Conservative Upscale",inputModalities:["image"]},{id:"creative",name:"Creative Upscale",inputModalities:["text","image"]},{id:"sketch",name:"Sketch Control",inputModalities:["text","image"]},{id:"structure",name:"Structure Control",inputModalities:["text","image"]},{id:"style",name:"Style Control",inputModalities:["text","image"]},{id:"style-transfer",name:"Style Transfer",inputModalities:["text","image"]}],supportedSizes:["1024x1024","1024x1280","1280x1024"]},"black-forest-labs":{id:"black-forest-labs",baseUrl:"https://api.bfl.ai",authType:"apikey",authHeader:"x-key",format:"black-forest-labs",models:[{id:"flux-kontext-pro",name:"flux-kontext-pro",inputModalities:["text","image"]},{id:"flux-kontext-max",name:"flux-kontext-max",inputModalities:["text","image"]},{id:"flux-pro-1.0-fill",name:"flux-pro-1.0-fill",inputModalities:["text","image"]},{id:"flux-pro-1.0-expand",name:"flux-pro-1.0-expand",inputModalities:["text","image"]},{id:"flux-pro-1.1",name:"flux-pro-1.1"},{id:"flux-pro-1.1-ultra",name:"flux-pro-1.1-ultra"},{id:"flux-dev",name:"flux-dev"},{id:"flux-pro",name:"flux-pro"}],supportedSizes:["1024x1024","1024x1280","1280x1024"]},recraft:{id:"recraft",baseUrl:"https://external.api.recraft.ai",authType:"apikey",authHeader:"bearer",format:"recraft",models:[{id:"recraftv2",name:"recraftv2"},{id:"recraftv3",name:"recraftv3"}],supportedSizes:["1024x1024","1024x1280","1280x1024"]},topaz:{id:"topaz",baseUrl:"https://api.topazlabs.com",authType:"apikey",authHeader:"x-api-key",format:"topaz",models:[{id:"topaz-enhance",name:"topaz-enhance",inputModalities:["image"]}],supportedSizes:["1024x1024"]}};function h(a){return g[a]||null}function i(a){if(!a)return{provider:null,model:null};let b=e(a);if(b)return b;for(let[b,c]of Object.entries(g)){if(a.startsWith(b+"/")){let c=a.slice(b.length+1);return e(`${b}/${c}`)||e(c)||{provider:b,model:c}}if(c.alias&&a.startsWith(c.alias+"/")){let d=a.slice(c.alias.length+1);return e(`${b}/${d}`)||e(d)||{provider:b,model:d}}}for(let[b,c]of Object.entries(g))if(c.models.some(b=>b.id===a))return{provider:b,model:a};return{provider:null,model:a}}function j(){let a=[];for(let[b,c]of Object.entries(g))for(let d of c.models)a.push({id:`${b}/${d.id}`,name:d.name,provider:b,supportedSizes:c.supportedSizes,inputModalities:d.inputModalities||["text"],description:d.description||void 0});for(let[b,c]of Object.entries(d)){if(!c.listInCatalog)continue;let d=g[c.provider],e=f(c.provider,c.model);a.push({id:b,name:c.name||e?.name||b,provider:c.provider,supportedSizes:d?.supportedSizes||[],inputModalities:c.inputModalities||e?.inputModalities||["text"],description:c.description||e?.description||void 0})}return a}function k(a){if(!a)return null;let b=d[a];if(b){let a=f(b.provider,b.model);return{provider:b.provider,model:b.model,inputModalities:b.inputModalities||a?.inputModalities||["text"],description:b.description||a?.description||void 0}}let{provider:c,model:e}=i(a);if(!c||!e)return null;let g=f(c,e);return g?{provider:c,model:e,inputModalities:g.inputModalities||["text"],description:g.description||void 0}:null}},27756:(a,b,c)=>{c.d(b,{J:()=>f});let d={"256x256":"1:1","512x512":"1:1","1024x1024":"1:1","1792x1024":"16:9","1024x1792":"9:16","1536x1024":"3:2","1024x1536":"2:3"},e=/^\d+:\d+$/;function f(a){return a?e.test(a)?a:d[a]??"1:1":"1:1"}},31245:(a,b,c)=>{c.d(b,{I:()=>g});var d=c(34366);function e(a,b){return"public-only"===b?(0,d.hz)(a):(0,d.Tv)(a)}async function f(a,b){let c=a.headers.get("content-length"),d=c?Number.parseInt(c,10):null;if(null!==d&&Number.isFinite(d)&&d>b)throw Error(`Remote image exceeds ${b} byte limit`);if(!a.body){let c=Buffer.from(await a.arrayBuffer());if(c.byteLength>b)throw Error(`Remote image exceeds ${b} byte limit`);return c}let e=a.body.getReader(),f=[],g=0;try{for(;;){let{done:a,value:c}=await e.read();if(a)break;let d=Buffer.from(c);if((g+=d.byteLength)>b)throw await e.cancel(),Error(`Remote image exceeds ${b} byte limit`);f.push(d)}}finally{e.releaseLock()}return Buffer.concat(f,g)}async function g(a,b={}){var c,h;let i,j=b.fetchImpl??fetch,k=b.guard??(0,d.f2)(),l=b.maxBytes??0x1400000,m=b.maxRedirects??3,n=(c=b.signal,h=b.timeoutMs??15e3,i=AbortSignal.timeout(h),c?AbortSignal.any([c,i]):i),o=e(a,k);for(let a=0;a<=m;a++){let b=await j(o.toString(),{method:"GET",redirect:"manual",signal:n});if(b.status>=300&&b.status<400){let c=b.headers.get("location");if(!c)throw Error(`Remote image redirect missing Location header (${b.status})`);if(a>=m)throw Error(`Remote image exceeded ${m} redirect limit`);o=e(new URL(c,o),k);continue}if(!b.ok)throw Error(`Remote image fetch error ${b.status}`);return{buffer:await f(b,l),contentType:b.headers.get("content-type")||"application/octet-stream",url:o.toString()}}throw Error(`Remote image exceeded ${m} redirect limit`)}},34366:(a,b,c)=>{c.d(b,{Di:()=>g,JG:()=>f,Tv:()=>h,f2:()=>j,hz:()=>i});var d=c(77030);let e=new Set(["1","true","yes","on"]),f="Blocked private or local provider URL";class g extends Error{constructor(a,b){super(a),this.name="OutboundUrlGuardError",this.code=b.code,this.url=b.url,this.hostname=b.hostname??null}}function h(a){let b;try{b=a instanceof URL?a:new URL(String(a))}catch{throw new g(`Invalid outbound URL: ${String(a)}`,{code:"OUTBOUND_URL_INVALID",url:String(a)})}if("http:"!==b.protocol&&"https:"!==b.protocol)throw new g(`Invalid outbound URL protocol for ${b.toString()}`,{code:"OUTBOUND_URL_INVALID",url:b.toString(),hostname:b.hostname||null});if(b.username||b.password)throw new g("Blocked outbound URL with embedded credentials",{code:"OUTBOUND_URL_GUARD_BLOCKED",url:b.toString(),hostname:b.hostname||null});return b}function i(a){let b=h(a);if(function(a){let b,c=(b=a.trim().toLowerCase()).startsWith("[")&&b.endsWith("]")?b.slice(1,-1):b;if(!c||"localhost"===c||"0.0.0.0"===c||"127.0.0.1"===c||"::1"===c||c.endsWith(".localhost")||c.endsWith(".local")||c.startsWith("::ffff:"))return!0;if(4===(0,d.isIP)(c)){let[a,b]=c.split(".").map(a=>parseInt(a,10));return 0===a||10===a||127===a||169===a&&254===b||192===a&&168===b||172===a&&b>=16&&b<=31||100===a&&b>=64&&b<=127||!1}return 6===(0,d.isIP)(c)&&("::1"===c||c.startsWith("fc")||c.startsWith("fd")||c.startsWith("fe80:"))}(b.hostname))throw new g(f,{code:"OUTBOUND_URL_GUARD_BLOCKED",url:b.toString(),hostname:b.hostname||null});return b}function j(){return!function(){let a=process.env.OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS;if(a&&e.has(a.trim().toLowerCase()))return!0;let b=process.env.OUTBOUND_SSRF_GUARD_ENABLED;return!!(b&&["false","0","no","off"].includes(b.trim().toLowerCase()))}()?"public-only":"none"}},39548:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{ky:()=>p,wv:()=>u});var e=c(55511),f=c(15102),g=c(27756),h=c(21832),i=c(82065),j=c(94248),k=c(77598),l=c(14272),m=c(92310),n=c(31245),o=a([l]);l=(o.then?(await o)():o)[0];let W=new Set(["black-forest-labs/FLUX.1-redux","black-forest-labs/FLUX.1-depth","black-forest-labs/FLUX.1-canny","black-forest-labs/FLUX.1.1-pro","FLUX.1-redux","FLUX.1-depth","FLUX.1-canny","FLUX.1.1-pro","flux-kontext-max","flux-kontext","flux-kontext-pro"]),X={"flux-kontext-pro":"/v1/flux-kontext-pro","flux-kontext-max":"/v1/flux-kontext-max","flux-pro-1.0-fill":"/v1/flux-pro-1.0-fill","flux-pro-1.0-expand":"/v1/flux-pro-1.0-expand","flux-pro-1.1":"/v1/flux-pro-1.1","flux-pro-1.1-ultra":"/v1/flux-pro-1.1-ultra","flux-dev":"/v1/flux-dev","flux-pro":"/v1/flux-pro"},Y=new Set(["flux-kontext-pro","flux-kontext-max","flux-pro-1.0-fill","flux-pro-1.0-expand"]),Z=new Set(["Error","Failed","Content Moderated","Request Moderated"]),$={sd3:"/v2beta/stable-image/generate/sd3","sd3-large":"/v2beta/stable-image/generate/sd3","sd3-large-turbo":"/v2beta/stable-image/generate/sd3","sd3-medium":"/v2beta/stable-image/generate/sd3","sd3.5-large":"/v2beta/stable-image/generate/sd3","sd3.5-large-turbo":"/v2beta/stable-image/generate/sd3","sd3.5-medium":"/v2beta/stable-image/generate/sd3","stable-image-ultra":"/v2beta/stable-image/generate/ultra","stable-image-core":"/v2beta/stable-image/generate/core"},_={inpaint:"/v2beta/stable-image/edit/inpaint",outpaint:"/v2beta/stable-image/edit/outpaint",erase:"/v2beta/stable-image/edit/erase","search-and-replace":"/v2beta/stable-image/edit/search-and-replace","search-and-recolor":"/v2beta/stable-image/edit/search-and-recolor","remove-background":"/v2beta/stable-image/edit/remove-background","replace-background-and-relight":"/v2beta/stable-image/edit/replace-background-and-relight",fast:"/v2beta/stable-image/upscale/fast",conservative:"/v2beta/stable-image/upscale/conservative",creative:"/v2beta/stable-image/upscale/creative",sketch:"/v2beta/stable-image/control/sketch",structure:"/v2beta/stable-image/control/structure",style:"/v2beta/stable-image/control/style","style-transfer":"/v2beta/stable-image/control/style-transfer"},aa=new Set(["sketch","structure","style","style-transfer"]),ab={"1024x1024":"square_hd","512x512":"square","1792x1024":"landscape_16_9","1024x1792":"portrait_16_9","1024x768":"landscape_4_3","768x1024":"portrait_4_3","1536x1024":"landscape_3_2","1024x1536":"portrait_3_2","576x1024":"portrait_16_9","1024x576":"landscape_16_9"};async function p({body:a,credentials:b,log:c,resolvedProvider:d=null,signal:e=null,clientHeaders:g=null}){let h,i;if(d){h=d;let b=a.model||"";i=b.startsWith(h+"/")?b.slice(h.length+1):b}else{let b=(0,f.Uk)(a.model);h=b.provider,i=b.model}if(!h)return{success:!1,status:400,error:`Invalid image model: ${a.model}. Use format: provider/model`};let j=(0,f.bV)(h);if(!j){if(!d)return{success:!1,status:400,error:`Unknown image provider: ${h}`};c&&c.info("IMAGE",`Custom model ${h}/${i} — using OpenAI-compatible handler`);let e={id:h,baseUrl:b?.baseUrl||"https://generativelanguage.googleapis.com/v1beta/openai/images/generations",authType:"apikey",authHeader:"bearer",format:"openai"};return r({model:i,provider:h,providerConfig:e,body:a,credentials:b,log:c})}return"gemini-image"===j.format?q({model:i,providerConfig:j,body:a,credentials:b,log:c}):"imagen3"===j.format?V({model:i,provider:h,providerConfig:j,body:a,credentials:b,log:c}):"hyperbolic"===j.format?O({model:i,provider:h,providerConfig:j,body:a,credentials:b,log:c}):"fal-ai"===j.format?v({model:i,provider:h,providerConfig:j,body:a,credentials:b,log:c}):"stability-ai"===j.format?w({model:i,provider:h,providerConfig:j,body:a,credentials:b,log:c}):"black-forest-labs"===j.format?x({model:i,provider:h,providerConfig:j,body:a,credentials:b,log:c}):"recraft"===j.format?y({model:i,provider:h,providerConfig:j,body:a,credentials:b,log:c}):"topaz"===j.format?z({model:i,provider:h,providerConfig:j,body:a,credentials:b,log:c}):"chatgpt-web"===j.format?t({model:i,provider:h,body:a,credentials:b,log:c,signal:e,clientHeaders:g}):"nanobanana"===j.format?P({model:i,provider:h,providerConfig:j,body:a,credentials:b,log:c}):"sdwebui"===j.format?T({model:i,provider:h,providerConfig:j,body:a,log:c}):"comfyui"===j.format?U({model:i,provider:h,providerConfig:j,body:a,log:c}):"codex-responses"===j.format?K({model:i,provider:h,providerConfig:j,body:a,credentials:b,log:c}):r({model:i,provider:h,providerConfig:j,body:a,credentials:b,log:c})}async function q({model:a,providerConfig:b,body:c,credentials:d,log:e}){let f=Date.now(),g=`${b.baseUrl}/${a}:generateContent`,h="antigravity",i={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},j={contents:[{parts:[{text:c.prompt}]}],generationConfig:{responseModalities:["TEXT","IMAGE"]}},k=d.accessToken||d.apiKey,m={"Content-Type":"application/json",Authorization:`Bearer ${k}`};if(e){let b="string"==typeof c.prompt?c.prompt.slice(0,60):String(c.prompt??"").slice(0,60);e.info("IMAGE",`antigravity/${a} (gemini) | prompt: "${b}..." | format: gemini-image`)}try{let b=await fetch(g,{method:"POST",headers:m,body:JSON.stringify(j)});if(!b.ok){let c=await b.text();return e&&e.error("IMAGE",`antigravity error ${b.status}: ${c.slice(0,200)}`),(0,l.gK)({method:"POST",path:"/v1/images/generations",status:b.status,model:`antigravity/${a}`,provider:h,duration:Date.now()-f,error:c.slice(0,500),requestBody:i}).catch(()=>{}),{success:!1,status:b.status,error:c}}let d=await b.json(),k=[];for(let a of d.candidates||[]){let b=a.content?.parts||[];for(let a of b)a.inlineData&&k.push({b64_json:a.inlineData.data,revised_prompt:b.find(a=>a.text)?.text||c.prompt})}return(0,l.gK)({method:"POST",path:"/v1/images/generations",status:200,model:`antigravity/${a}`,provider:h,duration:Date.now()-f,tokens:{prompt_tokens:0,completion_tokens:0},requestBody:i,responseBody:{images_count:k.length}}).catch(()=>{}),{success:!0,data:{created:Math.floor(Date.now()/1e3),data:k}}}catch(b){return e&&e.error("IMAGE",`antigravity fetch error: ${b.message}`),(0,l.gK)({method:"POST",path:"/v1/images/generations",status:502,model:`antigravity/${a}`,provider:h,duration:Date.now()-f,error:b.message,requestBody:i}).catch(()=>{}),{success:!1,status:502,error:`Image provider error: ${b.message}`}}}async function r({model:a,provider:b,providerConfig:c,body:d,credentials:e,log:f}){let g=Date.now(),h={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},i={model:a,prompt:d.prompt};void 0!==d.n&&(i.n=d.n),void 0!==d.size&&(i.size=d.size),void 0!==d.quality&&(i.quality=d.quality),void 0!==d.response_format&&(i.response_format=d.response_format),void 0!==d.style&&(i.style=d.style);let{imageUrl:j}=B(d);j&&W.has(a)&&(i.image_url=j);let k={"Content-Type":"application/json"},m=e.apiKey||e.accessToken;if("bearer"===c.authHeader?k.Authorization=`Bearer ${m}`:"x-api-key"===c.authHeader&&(k["x-api-key"]=m),f){let c="string"==typeof d.prompt?d.prompt.slice(0,60):String(d.prompt??"").slice(0,60);f.info("IMAGE",`${b}/${a} | prompt: "${c}..." | size: ${d.size||"default"}`)}let n=JSON.stringify(i),o=await N(c.baseUrl,k,n,b,f);return!o.success&&c.fallbackUrl&&[404,410,502,503].includes(o.status)&&(f&&f.info("IMAGE",`${b}: primary URL failed (${o.status}), trying fallback...`),o=await N(c.fallbackUrl,k,n,b,f)),(0,l.gK)({method:"POST",path:"/v1/images/generations",status:o.status||(o.success?200:502),model:`${b}/${a}`,provider:b,duration:Date.now()-g,tokens:{prompt_tokens:0,completion_tokens:0},error:o.success?null:"string"==typeof o.error?o.error.slice(0,500):null,requestBody:h,responseBody:o.success?{images_count:o.data?.data?.length||0}:null}).catch(()=>{}),o}let ac=/!\[[^\]]*\]\(([^)\s]+)\)/g,ad=/\/v1\/chatgpt-web\/image\/([a-f0-9]{16,64})(?=[?\s"'<>)]|$)/i;function s(a){let b=[];for(let c of a.matchAll(ac))c[1]&&b.push(c[1]);return b}async function t({model:a,provider:b,body:c,credentials:d,log:e,signal:f,clientHeaders:g}){let h=Date.now(),k="string"==typeof c.prompt?c.prompt.trim():"";if(!k)return M({provider:b,model:a,status:400,startTime:h,error:"Prompt is required for ChatGPT Web image generation"});if(!d?.apiKey)return M({provider:b,model:a,status:401,startTime:h,error:"ChatGPT Web credentials missing session cookie"});let l=Number.isInteger(c.n)&&c.n>0?c.n:1;if(l>4)return M({provider:b,model:a,status:400,startTime:h,error:`ChatGPT Web image generation supports n=1..4 (got ${l}); each n is a separate ~30s chat turn.`});e&&l>1&&e.warn("IMAGE",`ChatGPT Web returns one image per chat turn; requested n=${l} will run sequentially`);let m="b64_json"===c.response_format,n=[],o={model:a,prompt:k.slice(0,500),size:c.size||void 0,quality:c.quality||void 0};for(let k=0;k<l;k++){let k=new i.RF,l=await k.execute({model:a,body:{messages:[{role:"user",content:function(a){let b=String(a.prompt||"").trim(),c=[`Create an image for this prompt: ${b}`];return"string"==typeof a.size&&a.size.trim()&&c.push(`Requested size: ${a.size.trim()}.`),"string"==typeof a.quality&&a.quality.trim()&&c.push(`Requested quality: ${a.quality.trim()}.`),"string"==typeof a.style&&a.style.trim()&&c.push(`Requested style: ${a.style.trim()}.`),c.join("\n")}(c)}]},stream:!1,credentials:d,signal:f,log:e,clientHeaders:g}),p=await l.response.text();if(l.response.status>=400)return M({provider:b,model:a,status:l.response.status,startTime:h,error:p,requestBody:o});let q="";try{let a=JSON.parse(p);q=String(a?.choices?.[0]?.message?.content||"")}catch{q=p}let r=s(q);if(0===r.length)return M({provider:b,model:a,status:502,startTime:h,error:`ChatGPT Web completed without returning image markdown: ${q.slice(0,300)}`,requestBody:o});for(let c of r){if(!m){n.push({url:c});continue}let d=c.match(ad)?.[1],e=d?(0,j.Zb)(d):null;if(!e)return M({provider:b,model:a,status:502,startTime:h,error:"ChatGPT Web image bytes expired before b64_json conversion",requestBody:o});n.push({b64_json:e.bytes.toString("base64")})}}return L({provider:b,model:a,startTime:h,requestBody:o,responseBody:{images_count:n.length},images:n})}async function u({provider:a,model:b,body:c,imageBytes:d,credentials:e,log:f,signal:g=null,clientHeaders:h=null}){let l=Date.now(),m="string"==typeof c.prompt?c.prompt.trim():"";if(!m)return M({provider:a,model:b,status:400,startTime:l,error:"Prompt is required for image edit"});if(!e?.apiKey)return M({provider:a,model:b,status:401,startTime:l,error:"ChatGPT Web credentials missing session cookie"});let n=(0,k.createHash)("sha256").update(d).digest("hex"),o=(0,j._q)(n),p="b64_json"===c.response_format,q={model:b,prompt:m.slice(0,500),size:c.size||void 0,image_hash:n.slice(0,16),image_bytes:d.length,cached_match:!!o?.entry.context};if(!o?.entry.context)return f?.warn?.("IMAGE",`chatgpt-web edit: no cached match for sha256=${n.slice(0,16)} (bytes=${d.length}); returning 400`),M({provider:a,model:b,status:400,startTime:l,error:"chatgpt-web image edit only works for images recently generated through this OmniRoute instance (cache window: 30 minutes). Re-generate the image and try the edit immediately, or disable image-edit in your client to use plain chat-completion edit prompts instead.",requestBody:q});let r=[{role:"assistant",content:`![image](http://internal/v1/chatgpt-web/image/${o.id})`},{role:"user",content:`Edit the image and generate the new image: ${m}`}],t=new i.RF,v=await t.execute({model:b,body:{messages:r},stream:!1,credentials:e,signal:g,log:f,clientHeaders:h}),w=await v.response.text();if(v.response.status>=400)return M({provider:a,model:b,status:v.response.status,startTime:l,error:w,requestBody:q});let x="";try{let a=JSON.parse(w);x=String(a?.choices?.[0]?.message?.content||"")}catch{x=w}let y=s(x);if(0===y.length)return M({provider:a,model:b,status:502,startTime:l,error:`ChatGPT Web edit completed without returning image markdown: ${x.slice(0,300)}`,requestBody:q});let z=[];for(let c of y){if(!p){z.push({url:c});continue}let d=c.match(ad)?.[1],e=d?(0,j.Zb)(d):null;if(!e)return M({provider:a,model:b,status:502,startTime:l,error:"ChatGPT Web image bytes expired before b64_json conversion",requestBody:q});z.push({b64_json:e.bytes.toString("base64")})}return L({provider:a,model:b,startTime:l,requestBody:q,responseBody:{images_count:z.length,edit_match:!!o?.entry.context},images:z})}async function v({model:a,provider:b,providerConfig:c,body:d,credentials:e,log:f}){var h;let i=Date.now(),j=e.apiKey||e.accessToken,{imageUrl:k,imageUrls:l}=B(d),m={prompt:d.prompt,sync_mode:d.sync_mode??!0};void 0!==d.n&&(m.num_images=Number(d.n)||1),d.negative_prompt&&(m.negative_prompt=d.negative_prompt),void 0!==d.seed&&(m.seed=d.seed),d.style&&(h=d.style,m.style="vivid"===h?"digital_illustration":"natural"===h?"realistic_image":h);let n=E(d,"png");if(n&&(m.output_format=n),a.includes("flux-pro/v1.1")&&!a.includes("ultra")?m.image_size=F(d.size,"landscape_4_3"):a.includes("bytedance/")||a.includes("stable-diffusion")||a.includes("ideogram")||a.includes("recraft/v3")?m.image_size=F(d.size,"square_hd"):m.aspect_ratio=d.aspect_ratio||function(a,b="1:1"){return a?(0,g.J)(a):b}(d.size,"1:1"),"hd"===d.quality&&a.includes("ultra")&&(m.raw=!0),k&&a.includes("flux-pro/v1.1-ultra")&&(m.image_url=k),l.length>0&&a.includes("ideogram")&&(m.image_urls=l),f){let c=String(d.prompt??"").slice(0,60);f.info("IMAGE",`${b}/${a} (fal-ai) | prompt: "${c}..."`)}try{let e=await fetch(`${c.baseUrl.replace(/\/$/,"")}/${a}`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Key ${j}`},body:JSON.stringify(m)});if(!e.ok){let c=await e.text();return f&&f.error("IMAGE",`${b} error ${e.status}: ${c.slice(0,200)}`),M({provider:b,model:a,status:e.status,startTime:i,error:c,requestBody:m})}let g=await e.json(),h=await G(g,d,f);return L({provider:b,model:a,startTime:i,requestBody:m,responseBody:{images_count:h.length},created:g.created,images:h})}catch(c){return f&&f.error("IMAGE",`${b} fetch error: ${c.message}`),M({provider:b,model:a,status:502,startTime:i,error:`Image provider error: ${c.message}`})}}async function w({model:a,provider:b,providerConfig:c,body:d,credentials:e,log:f}){let h=Date.now(),i=e.apiKey||e.accessToken,j=$[a]||_[a];if(!j)return{success:!1,status:400,error:`Unsupported Stability AI image model: ${a}`};let{imageUrl:k,maskUrl:l}=B(d),m={output_format:"remove-background"===a?E(d,"png",["png","webp"]):E(d,"png")};d.prompt&&(m.prompt=d.prompt),d.negative_prompt&&(m.negative_prompt=d.negative_prompt),void 0!==d.seed&&(m.seed=d.seed);try{var n;let e;if($[a]?(a.startsWith("sd3")&&"sd3"!==a&&(m.model=a),k?(m.mode="image-to-image",m.image=(await C(k)).base64,void 0!==d.strength&&(m.strength=d.strength)):m.mode="text-to-image",a.startsWith("sd3")&&k||(m.aspect_ratio=d.aspect_ratio||(0,g.J)(d.size)),d.style_preset&&(m.style_preset=d.style_preset)):(k&&(m.image=(await C(k)).base64),l&&(n=a,new Set(["inpaint","erase","search-and-replace","search-and-recolor","replace-background-and-relight"]).has(n))&&(m.mask=(await C(l)).base64),d.search_prompt&&(m.search_prompt=d.search_prompt),void 0!==d.grow_mask&&(m.grow_mask=d.grow_mask),void 0!==d.control_strength&&(m.control_strength=d.control_strength),void 0!==d.creativity&&(m.creativity=d.creativity),void 0!==d.left&&(m.left=d.left),void 0!==d.right&&(m.right=d.right),void 0!==d.up&&(m.up=d.up),void 0!==d.down&&(m.down=d.down),d.style_preset&&(m.style_preset=d.style_preset),aa.has(a)&&!m.prompt&&(m.prompt=d.prompt||"")),f){let c=String(d.prompt??"").slice(0,60);f.info("IMAGE",`${b}/${a} (stability-ai) | prompt: "${c}..."`)}let o=await fetch(`${c.baseUrl.replace(/\/$/,"")}${j}`,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json",Authorization:`Bearer ${i}`},body:JSON.stringify(m)});if(!o.ok){let c=await o.text();return f&&f.error("IMAGE",`${b} error ${o.status}: ${c.slice(0,200)}`),M({provider:b,model:a,status:o.status,startTime:h,error:c,requestBody:m})}e=(o.headers.get("content-type")||"").includes("application/json")?await o.json():{image:Buffer.from(await o.arrayBuffer()).toString("base64")};let p=await G(e,d,f);return L({provider:b,model:a,startTime:h,requestBody:m,responseBody:{images_count:p.length},created:e.created,images:p})}catch(c){return f&&f.error("IMAGE",`${b} fetch error: ${c.message}`),M({provider:b,model:a,status:502,startTime:h,error:`Image provider error: ${c.message}`})}}async function x({model:a,provider:b,providerConfig:c,body:d,credentials:e,log:f}){let h=Date.now(),i=e.apiKey||e.accessToken,j=X[a];if(!j)return{success:!1,status:400,error:`Unsupported Black Forest Labs image model: ${a}`};let{imageUrl:k,maskUrl:l}=B(d),m={prompt:d.prompt,output_format:E(d,"png")};try{if(Y.has(a)&&k?m.input_image=(await C(k)).base64:k&&J(k)&&(m.image_url=k),l&&("flux-pro-1.0-fill"===a||"flux-kontext-pro"===a)&&(m.mask=(await C(l)).base64),"flux-kontext-pro"===a||"flux-kontext-max"===a)m.aspect_ratio=d.aspect_ratio||(0,g.J)(d.size);else if("string"==typeof d.size&&d.size.includes("x")){let{width:a,height:b}=D(d.size,1024);m.width=a,m.height=b}if(void 0!==d.seed&&(m.seed=d.seed),void 0!==d.n&&a.includes("ultra")&&(m.num_images=Number(d.n)||1),"hd"===d.quality&&a.includes("ultra")&&(m.raw=!0),void 0!==d.left&&(m.left=d.left),void 0!==d.right&&(m.right=d.right),void 0!==d.top&&(m.top=d.top),void 0!==d.bottom&&(m.bottom=d.bottom),void 0!==d.steps&&(m.steps=d.steps),void 0!==d.guidance&&(m.guidance=d.guidance),void 0!==d.grow_mask&&(m.grow_mask=d.grow_mask),void 0!==d.safety_tolerance&&(m.safety_tolerance=d.safety_tolerance),f){let c=String(d.prompt??"").slice(0,60);f.info("IMAGE",`${b}/${a} (black-forest-labs) | prompt: "${c}..."`)}let e=await fetch(`${c.baseUrl.replace(/\/$/,"")}${j}`,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","x-key":i},body:JSON.stringify(m)});if(!e.ok){let c=await e.text();return f&&f.error("IMAGE",`${b} error ${e.status}: ${c.slice(0,200)}`),M({provider:b,model:a,status:e.status,startTime:h,error:c,requestBody:m})}let n=await e.json(),o=n.polling_url?await A({pollingUrl:n.polling_url,token:i,body:d,log:f}):n,p=await G(o,d,f);return L({provider:b,model:a,startTime:h,requestBody:m,responseBody:{images_count:p.length},created:o.created,images:p})}catch(c){return f&&f.error("IMAGE",`${b} fetch error: ${c.message}`),M({provider:b,model:a,status:502,startTime:h,error:`Image provider error: ${c.message}`})}}async function y({model:a,provider:b,providerConfig:c,body:d,credentials:e,log:f}){let g=Date.now(),h=e.apiKey||e.accessToken,i={model:a,prompt:d.prompt};if(void 0!==d.n&&(i.n=d.n),void 0!==d.size&&(i.size=d.size),void 0!==d.response_format&&(i.response_format=d.response_format),void 0!==d.style&&(i.style=d.style),f){let c=String(d.prompt??"").slice(0,60);f.info("IMAGE",`${b}/${a} (recraft) | prompt: "${c}..."`)}try{let e=await fetch(`${c.baseUrl.replace(/\/$/,"")}/v1/images/generations`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${h}`},body:JSON.stringify(i)});if(!e.ok){let c=await e.text();return f&&f.error("IMAGE",`${b} error ${e.status}: ${c.slice(0,200)}`),M({provider:b,model:a,status:e.status,startTime:g,error:c,requestBody:i})}let j=await e.json(),k=await G(j,d,f);return L({provider:b,model:a,startTime:g,requestBody:i,responseBody:{images_count:k.length},created:j.created,images:k})}catch(c){return f&&f.error("IMAGE",`${b} fetch error: ${c.message}`),M({provider:b,model:a,status:502,startTime:g,error:`Image provider error: ${c.message}`})}}async function z({model:a,provider:b,providerConfig:c,body:d,credentials:e,log:f}){let g=Date.now(),h=e.apiKey||e.accessToken,{imageUrl:i}=B(d);if(!i)return{success:!1,status:400,error:`Topaz model ${a} requires an input image`};try{let e=await C(i),j=new FormData,k=new Blob([e.buffer],{type:e.contentType||"image/png"});if(j.append("image",k,"image.png"),"string"==typeof d.size&&d.size.includes("x")){let{width:a,height:b}=D(d.size,1024);j.append("output_width",String(a)),j.append("output_height",String(b))}if(f){let c=String(d.prompt??"enhance image").slice(0,60);f.info("IMAGE",`${b}/${a} (topaz) | prompt: "${c}..."`)}let l=await fetch(`${c.baseUrl.replace(/\/$/,"")}/image/v1/enhance`,{method:"POST",headers:{Accept:"image/jpeg","X-API-Key":h},body:j});if(!l.ok){let c=await l.text();return f&&f.error("IMAGE",`${b} error ${l.status}: ${c.slice(0,200)}`),M({provider:b,model:a,status:l.status,startTime:g,error:c})}let m=l.headers.get("content-type")||"image/jpeg",n=Buffer.from(await l.arrayBuffer()).toString("base64"),o=["b64_json"===d.response_format?{b64_json:n,revised_prompt:d.prompt}:{url:`data:${m};base64,${n}`,revised_prompt:d.prompt}];return L({provider:b,model:a,startTime:g,responseBody:{images_count:o.length},images:o})}catch(c){return f&&f.error("IMAGE",`${b} fetch error: ${c.message}`),M({provider:b,model:a,status:502,startTime:g,error:`Image provider error: ${c.message}`})}}async function A({pollingUrl:a,token:b,body:c,log:d}){let e=R(c.timeout_ms,3e5),f=R(c.poll_interval_ms,1500),g=Date.now()+e;for(;Date.now()<g;){let c=await fetch(a,{method:"GET",headers:{"x-key":b}});if(!c.ok){let a=await c.text();throw Error(`BFL polling failed (${c.status}): ${a}`)}let e=await c.json(),g=e?.status;if("Ready"===g)return e;if(Z.has(g))throw Error(`BFL image generation failed: ${g}`);d&&d.info("IMAGE",`black-forest-labs polling status: ${String(g||"Pending")}`),await S(f)}throw Error(`BFL polling timed out after ${e}ms`)}function B(a){let b=[],c=new Set,d=a=>{if("string"!=typeof a)return;let d=a.trim();!d||c.has(d)||(c.add(d),b.push(d))};if(d(a?.image_url),d(a?.image),Array.isArray(a?.imageUrls))for(let b of a.imageUrls)d(b);if(Array.isArray(a?.image_urls))for(let b of a.image_urls)d(b);if(Array.isArray(a?.messages)){for(let b of a.messages)if(Array.isArray(b?.content))for(let a of b.content)a?.type==="image_url"&&d(a?.image_url?.url)}return{imageUrl:b[0]||null,imageUrls:b,maskUrl:"string"==typeof a?.mask_url?a.mask_url:"string"==typeof a?.mask?a.mask:null}}async function C(a){if("string"!=typeof a||0===a.trim().length)throw Error("Invalid image source");let b=a.trim(),c=/^data:([^;]+);base64,(.+)$/i.exec(b);if(c){let[,a,b]=c;return{buffer:Buffer.from(b,"base64"),base64:b,contentType:a}}if(J(b)){let a=await (0,n.I)(b);return{buffer:a.buffer,base64:a.buffer.toString("base64"),contentType:a.contentType}}return{buffer:Buffer.from(b,"base64"),base64:b,contentType:"application/octet-stream"}}function D(a,b=1024){if("string"!=typeof a||!a.includes("x"))return{width:b,height:b};let[c,d]=a.split("x"),e=Number(c),f=Number(d);return{width:Number.isFinite(e)&&e>0?e:b,height:Number.isFinite(f)&&f>0?f:b}}function E(a,b="png",c=["jpeg","png","webp"]){let d="string"==typeof a?.output_format?a.output_format.toLowerCase():"string"!=typeof a?.response_format||["url","b64_json"].includes(a.response_format.toLowerCase())?b:a.response_format.toLowerCase();return c.includes(d)?d:b}function F(a,b="square_hd"){if("string"!=typeof a)return b;if(ab[a])return ab[a];if(a.includes("x")){let{width:b,height:c}=D(a,1024);return{width:b,height:c}}return b}async function G(a,b,c){let d=[],e=a=>{null!=a&&d.push(a)};if(Array.isArray(a?.data))for(let b of a.data)e(b);if(Array.isArray(a?.images))for(let b of a.images)e(b);if(a?.image&&e({b64_json:a.image}),a?.url&&e({url:a.url}),a?.sample&&e({url:a.sample}),a?.result?.sample&&e({url:a.result.sample}),Array.isArray(a?.result?.images))for(let b of a.result.images)e(b);let f=[];for(let a of d){let c=await H(a,b);c&&f.push(c)}return 0===f.length&&c&&c.warn("IMAGE",`Provider returned no recognizable image payload: ${JSON.stringify(a).slice(0,240)}`),f}async function H(a,b){let c=b?.response_format==="b64_json",d=null,e=null;if("string"==typeof a){let b=/^data:[^;]+;base64,(.+)$/i.exec(a);b?e=b[1]:J(a)?d=a:e=a}else a&&"object"==typeof a&&(d=I(a.url,a.image_url,a.sample,a.file_url)||null,e=I(a.b64_json,a.image,a.base64,a.data)||null);return(c&&!e&&d&&(e=(await C(d)).base64),d&&!c)?{url:d,revised_prompt:b?.prompt}:e?{b64_json:e,revised_prompt:b?.prompt}:d?{url:d,revised_prompt:b?.prompt}:null}function I(...a){for(let b of a)if("string"==typeof b&&b.length>0)return b;return null}function J(a){return"string"==typeof a&&/^https?:\/\//i.test(a)}async function K({model:a,provider:b,providerConfig:c,body:d,credentials:e,log:f}){let g,i=Date.now(),j="string"==typeof d.prompt?d.prompt:"";if(!j.trim())return M({provider:b,model:a,status:400,startTime:i,error:"Prompt is required for Codex image generation"});let k=Number.isInteger(d.n)&&d.n>0?d.n:1;f&&k>1&&f.warn("IMAGE",`Codex hosted image_generation returns one image per call; requested n=${k} will run sequentially`);let l=e?.accessToken||e?.apiKey;if(!l)return M({provider:b,model:a,status:401,startTime:i,error:"Codex credentials missing accessToken — reconnect the Codex provider"});let m=e?.providerSpecificData&&"object"==typeof e.providerSpecificData&&!Array.isArray(e.providerSpecificData)?e.providerSpecificData.workspaceId:void 0,n={type:"image_generation",output_format:"png"};"string"==typeof d.size&&d.size.trim()&&(n.size=d.size.trim()),"string"==typeof d.quality&&d.quality.trim()&&(g=d.quality.trim().toLowerCase(),n.quality="standard"===g?"medium":"hd"===g?"high":g);let o={model:a,instructions:"You must call the image_generation tool exactly once to fulfill the user's request. Do not add narration.",input:[{role:"user",content:[{type:"input_text",text:j}]}],tools:[n],stream:!0,store:!1},p={"Content-Type":"application/json",Accept:"text/event-stream",Authorization:`Bearer ${l}`,Version:(0,h.zq)(),"User-Agent":(0,h.EQ)(),originator:"codex_cli_rs"};"string"==typeof m&&m&&(p["chatgpt-account-id"]=m,p.session_id=m),f&&f.info("IMAGE",`${b}/${a} (codex-responses) | prompt: "${j.slice(0,60)}..."`);let q=[];for(let d=0;d<k;d++){let d;try{d=await fetch(c.baseUrl,{method:"POST",headers:p,body:JSON.stringify(o)})}catch(c){return f&&f.error("IMAGE",`${b} fetch error: ${c.message}`),M({provider:b,model:a,status:502,startTime:i,error:`Image provider error: ${c.message}`,requestBody:o})}if(!d.ok){let c=await d.text();return f&&f.error("IMAGE",`${b} error ${d.status}: ${c.slice(0,200)}`),M({provider:b,model:a,status:d.status,startTime:i,error:c,requestBody:o})}let e=await d.text(),g=function(a){let b=[];for(let c of String(a||"").split("\n")){let a,d=c.trim();if(!d.startsWith("data:"))continue;let e=d.slice(5).trim();if(!e||"[DONE]"===e)continue;try{a=JSON.parse(e)}catch{continue}if(a?.type!=="response.output_item.done")continue;let f=a.item;if(!f||"image_generation_call"!==f.type)continue;let g="string"==typeof f.result?f.result:"";if(!g)continue;let h="string"==typeof f.revised_prompt?f.revised_prompt:null;b.push({b64:g,revisedPrompt:h})}return b}(e);if(0===g.length)return M({provider:b,model:a,status:502,startTime:i,error:"Codex completed without producing an image_generation_call — the model may have declined the tool",requestBody:o});for(let a of g)q.push({b64_json:a.b64,...a.revisedPrompt?{revised_prompt:a.revisedPrompt}:{}})}let r="b64_json"!==d.response_format?q.map(a=>({url:`data:image/png;base64,${a.b64_json}`,...a.revised_prompt?{revised_prompt:a.revised_prompt}:{}})):q;return L({provider:b,model:a,startTime:i,requestBody:o,responseBody:{images_count:r.length},images:r})}function L({provider:a,model:b,startTime:c,requestBody:d=null,responseBody:e=null,created:f=null,images:g}){return(0,l.gK)({method:"POST",path:"/v1/images/generations",status:200,model:`${a}/${b}`,provider:a,duration:Date.now()-c,requestBody:d,responseBody:e}).catch(()=>{}),{success:!0,data:{created:f||Math.floor(Date.now()/1e3),data:g}}}function M({provider:a,model:b,status:c,startTime:d,error:e,requestBody:f=null}){return(0,l.gK)({method:"POST",path:"/v1/images/generations",status:c,model:`${a}/${b}`,provider:a,duration:Date.now()-d,error:"string"==typeof e?e.slice(0,500):String(e).slice(0,500),requestBody:f}).catch(()=>{}),{success:!1,status:c,error:e}}async function N(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 O({model:a,provider:b,providerConfig:c,body:d,credentials:e,log:f}){let g=Date.now(),h=e.apiKey||e.accessToken,[i,j]=(d.size||"1024x1024").split("x").map(Number),k={model_name:a,prompt:d.prompt,height:j||1024,width:i||1024,backend:"auto"};if(f){let c=String(d.prompt??"").slice(0,60);f.info("IMAGE",`${b}/${a} (hyperbolic) | prompt: "${c}..."`)}try{let e=await fetch(c.baseUrl,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${h}`},body:JSON.stringify(k)});if(!e.ok){let c=await e.text();return f&&f.error("IMAGE",`${b} error ${e.status}: ${c.slice(0,200)}`),(0,l.gK)({method:"POST",path:"/v1/images/generations",status:e.status,model:`${b}/${a}`,provider:b,duration:Date.now()-g,error:c.slice(0,500)}).catch(()=>{}),{success:!1,status:e.status,error:c}}let i=((await e.json()).images||[]).map(a=>({b64_json:a.image,revised_prompt:d.prompt}));return(0,l.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} fetch error: ${c.message}`),(0,l.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,credentials:e,log:f}){let h=Date.now(),i=e.apiKey||e.accessToken,j="nanobanana-pro"===a,k=j&&c.proUrl?c.proUrl:c.baseUrl,m=c.statusUrl,n="string"==typeof d.aspectRatio?d.aspectRatio:"string"==typeof d.aspect_ratio?d.aspect_ratio:(0,g.J)(d.size),o="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"===o&&(o="2K");let p=j?{prompt:d.prompt,resolution:o,aspectRatio:n,...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:n,...Array.isArray(d.imageUrls)?{imageUrls:d.imageUrls}:{}};if(f){let c=String(d.prompt??"").slice(0,60);f.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(p)});if(!c.ok){let d=await c.text();return f&&f.error("IMAGE",`${b} submit error ${c.status}: ${d.slice(0,200)}`),(0,l.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 e=await c.json();if(e?.image||Array.isArray(e?.images)||Array.isArray(e?.data)||e?.data?.[0]?.url||e?.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)}}(e,d.prompt);return(0,l.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 g=e?.data?.taskId||e?.taskId;if(!g){let c=`NanoBanana submit did not return taskId: ${JSON.stringify(e).slice(0,400)}`;return(0,l.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(!m){let c="NanoBanana statusUrl is not configured";return(0,l.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 j=R(d.timeout_ms,R(process.env.NANOBANANA_POLL_TIMEOUT_MS,12e4)),n=R(d.poll_interval_ms,R(process.env.NANOBANANA_POLL_INTERVAL_MS,2500)),o=null,q=Date.now()+j;for(;Date.now()<q;){let c=await fetch(`${m}?taskId=${encodeURIComponent(g)}`,{method:"GET",headers:{Authorization:`Bearer ${i}`}});if(!c.ok){let a=await c.text();return f&&f.error("IMAGE",`${b} poll error ${c.status}: ${a.slice(0,200)}`),{success:!1,status:c.status,error:a}}let e=await c.json(),j=e?.data||e;o=j;let k=Number(j?.successFlag);if(1===k){let c=await Q(j,d,f);return(0,l.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:g}}).catch(()=>{}),{success:!0,data:{created:Math.floor(Date.now()/1e3),data:c}}}if(2===k||3===k){let c=j?.errorMessage||`NanoBanana task failed (successFlag=${String(k)})`;return(0,l.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:g,successFlag:k,errorCode:j?.errorCode??null}}).catch(()=>{}),{success:!1,status:502,error:c}}await S(n)}let r=`NanoBanana task timeout after ${j}ms (taskId=${g}, successFlag=${String(o?.successFlag??"unknown")})`;return(0,l.gK)({method:"POST",path:"/v1/images/generations",status:504,model:`${b}/${a}`,provider:b,duration:Date.now()-h,error:r,responseBody:{taskId:g,lastSuccessFlag:o?.successFlag??null}}).catch(()=>{}),{success:!1,status:504,error:r}}catch(c){return f&&f.error("IMAGE",`${b} fetch error: ${c.message}`),(0,l.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 Q(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];return[{b64_json:(await (0,n.I)(a)).buffer.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 R(a,b){let c=Number(a);return!Number.isFinite(c)||c<=0?b:Math.floor(c)}function S(a){return new Promise(b=>setTimeout(b,a))}async function T({model:a,provider:b,providerConfig:c,body:d,log:e}){let f=Date.now(),[g,h]=(d.size||"512x512").split("x").map(Number),i={prompt:d.prompt,negative_prompt:d.negative_prompt||"",width:g||512,height:h||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(e){let c=String(d.prompt??"").slice(0,60);e.info("IMAGE",`${b}/${a} (sdwebui) | prompt: "${c}..."`)}try{let g=await fetch(c.baseUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)});if(!g.ok){let c=await g.text();return e&&e.error("IMAGE",`${b} error ${g.status}: ${c.slice(0,200)}`),(0,l.gK)({method:"POST",path:"/v1/images/generations",status:g.status,model:`${b}/${a}`,provider:b,duration:Date.now()-f,error:c.slice(0,500)}).catch(()=>{}),{success:!1,status:g.status,error:c}}let h=((await g.json()).images||[]).map(a=>({b64_json:a,revised_prompt:d.prompt}));return(0,l.gK)({method:"POST",path:"/v1/images/generations",status:200,model:`${b}/${a}`,provider:b,duration:Date.now()-f,responseBody:{images_count:h.length}}).catch(()=>{}),{success:!0,data:{created:Math.floor(Date.now()/1e3),data:h}}}catch(c){return e&&e.error("IMAGE",`${b} sdwebui error: ${c.message}`),(0,l.gK)({method:"POST",path:"/v1/images/generations",status:502,model:`${b}/${a}`,provider:b,duration:Date.now()-f,error:c.message}).catch(()=>{}),{success:!1,status:502,error:`Image provider error: ${c.message}`}}}async function U({model:a,provider:b,providerConfig:c,body:d,log:f}){let g=Date.now(),[h,i]=(d.size||"1024x1024").split("x").map(Number),j={3:{class_type:"KSampler",inputs:{seed:parseInt((0,e.randomUUID)().replace(/-/g,"").substring(0,8),16)%0x100000000,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:h||1024,height:i||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(f){let c=String(d.prompt??"").slice(0,60);f.info("IMAGE",`${b}/${a} (comfyui) | prompt: "${c}..."`)}try{let e=await (0,m.ep)(c.baseUrl,j),f=await (0,m.VA)(c.baseUrl,e),h=(0,m.AC)(f),i=[];for(let a of h){let b=await (0,m.Uh)(c.baseUrl,a.filename,a.subfolder,a.type),e=Buffer.from(b).toString("base64");i.push({b64_json:e,revised_prompt:d.prompt})}return(0,l.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} comfyui error: ${c.message}`),(0,l.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 V({model:a,provider:b,providerConfig:c,body:d,credentials:e,log:f}){let h=Date.now(),i=e.apiKey||e.accessToken,j=(0,g.J)(d.size),k={prompt:d.prompt,aspect_ratio:j,number_of_images:d.n??1};if(f){let c=String(d.prompt??"").slice(0,60);f.info("IMAGE",`${b}/${a} (imagen3) | prompt: "${c}..." | aspect_ratio: ${j}`)}try{let e=await fetch(c.baseUrl,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${i}`},body:JSON.stringify(k)});if(!e.ok){let c=await e.text();return f&&f.error("IMAGE",`${b} error ${e.status}: ${c.slice(0,200)}`),(0,l.gK)({method:"POST",path:"/v1/images/generations",status:e.status,model:`${b}/${a}`,provider:b,duration:Date.now()-h,error:c.slice(0,500),requestBody:k}).catch(()=>{}),{success:!1,status:e.status,error:c}}let g=await e.json(),j=[];return Array.isArray(g.images)?j.push(...g.images.map(a=>({b64_json:a.image??a.b64_json??a.url??a,revised_prompt:d.prompt}))):Array.isArray(g.data)?j.push(...g.data):(g.url||g.b64_json||g.image)&&j.push({b64_json:g.image||g.b64_json||g.url,url:g.url,revised_prompt:d.prompt}),(0,l.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:g.created||Math.floor(Date.now()/1e3),data:j}}}catch(d){let c=d instanceof Error?d.message:String(d);return f&&f.error("IMAGE",`${b} fetch error: ${c}`),(0,l.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:`Image provider error: ${c}`}}}d()}catch(a){d(a)}})}};
1
+ "use strict";exports.id=39548,exports.ids=[39548],exports.modules={15102:(a,b,c)=>{c.d(b,{NT:()=>k,Uk:()=>i,bV:()=>h,lw:()=>j});let d={"flux-kontext":{provider:"black-forest-labs",model:"flux-kontext-pro",name:"FLUX Kontext Pro",listInCatalog:!0,inputModalities:["text","image"]},"flux-kontext-max":{provider:"black-forest-labs",model:"flux-kontext-max",name:"FLUX Kontext Max",listInCatalog:!0,inputModalities:["text","image"]},"flux-2-max":{provider:"black-forest-labs",model:"flux-2-max",name:"FLUX.2 Max",listInCatalog:!0,inputModalities:["text","image"]},"flux-2-pro":{provider:"black-forest-labs",model:"flux-2-pro",name:"FLUX.2 Pro",listInCatalog:!0,inputModalities:["text","image"]},"flux-2-flex":{provider:"black-forest-labs",model:"flux-2-flex",name:"FLUX.2 Flex",listInCatalog:!0,inputModalities:["text","image"]},"flux-2-dev":{provider:"together",model:"black-forest-labs/FLUX.2-dev",name:"FLUX.2 Dev",listInCatalog:!0,inputModalities:["text","image"]},kontext:{provider:"black-forest-labs",model:"flux-kontext-pro",name:"FLUX Kontext Pro",listInCatalog:!1,inputModalities:["text","image"]},"pollinations/kontext":{provider:"black-forest-labs",model:"flux-kontext-pro",name:"FLUX Kontext Pro",listInCatalog:!1,inputModalities:["text","image"]}};function e(a){let b=d[a];return b?{provider:b.provider,model:b.model}:null}function f(a,b){let c=g[a];return c&&c.models.find(a=>a.id===b)||null}let g={openai:{id:"openai",baseUrl:"https://api.openai.com/v1/images/generations",authType:"apikey",authHeader:"bearer",format:"openai",models:[{id:"gpt-image-2",name:"GPT Image 2"},{id:"gpt-image-1.5",name:"GPT Image 1.5"},{id:"gpt-image-1-mini",name:"GPT Image 1 Mini"}],supportedSizes:["1024x1024","1024x1792","1792x1024"]},codex:{id:"codex",alias:"cx",baseUrl:"https://chatgpt.com/backend-api/codex/responses",authType:"oauth",authHeader:"bearer",format:"codex-responses",models:[{id:"gpt-5.5",name:"GPT 5.5 (Codex Image)"},{id:"gpt-5.4",name:"GPT 5.4 (Codex Image)"},{id:"gpt-5.3-codex",name:"GPT 5.3 Codex (Image)"}],supportedSizes:["1024x1024","1024x1536","1536x1024"]},"chatgpt-web":{id:"chatgpt-web",alias:"cgpt-web",baseUrl:"https://chatgpt.com/backend-api/f/conversation",authType:"apikey",authHeader:"cookie",format:"chatgpt-web",models:[{id:"gpt-5.3-instant",name:"GPT-5.3 Instant (ChatGPT Web Image)"}],supportedSizes:["1024x1024","1024x1536","1536x1024"]},xai:{id:"xai",baseUrl:"https://api.x.ai/v1/images/generations",authType:"apikey",authHeader:"bearer",format:"openai",models:[{id:"grok-imagine-image",name:"Grok Imagine 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.2-max",name:"FLUX.2 Max",inputModalities:["text","image"]},{id:"black-forest-labs/FLUX.2-pro",name:"FLUX.2 Pro",inputModalities:["text","image"]},{id:"black-forest-labs/FLUX.2-flex",name:"FLUX.2 Flex",inputModalities:["text","image"]},{id:"black-forest-labs/FLUX.2-dev",name:"FLUX.2 Dev",inputModalities:["text","image"]},{id:"openai/gpt-image-1.5",name:"GPT Image 1.5",inputModalities:["text","image"]},{id:"Wan-AI/Wan2.6-image",name:"Wan 2.6 Image",inputModalities:["text","image"]},{id:"Qwen/Qwen-Image-2.0-Pro",name:"Qwen Image 2.0 Pro",inputModalities:["text","image"]},{id:"Qwen/Qwen-Image-2.0",name:"Qwen Image 2.0",inputModalities:["text","image"]},{id:"google/flash-image-3.1",name:"NanoBanana 2",inputModalities:["text","image"]},{id:"google/gemini-3-pro-image",name:"NanoBanana Pro",inputModalities:["text","image"]}],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/flux-kontext-max",name:"FLUX Kontext Max"},{id:"accounts/fireworks/flux-kontext-pro",name:"FLUX Kontext Pro"},{id:"accounts/fireworks/flux-1-schnell-fp8",name:"FLUX.1 schnell"},{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:[],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:"No Model yet"}],supportedSizes:["1024x1024"]},hyperbolic:{id:"hyperbolic",baseUrl:"https://api.hyperbolic.xyz/v1/image/generation",authType:"apikey",authHeader:"bearer",format:"hyperbolic",models:[{id:"SDXL1.0-base",name:"No Model yet"}],supportedSizes:["1024x1024"]},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"]},openrouter:{id:"openrouter",baseUrl:"https://openrouter.ai/api/v1/images/generations",authType:"apikey",authHeader:"bearer",format:"openai",models:[{id:"openai/gpt-5.4-image-2",name:"GPT Image 2 (via OpenRouter)"},{id:"openai/gpt-5-image-mini",name:"GPT Image 1 Mini (via OpenRouter)"},{id:"google/gemini-3.1-flash-image-preview",name:"Nano Banana 2 (via OpenRouter)"},{id:"google/gemini-3-pro-image-preview",name:"Nano Banana Pro (via OpenRouter)"},{id:"black-forest-labs/flux.2-max",name:"FLUX.2 Max (via OpenRouter)"},{id:"black-forest-labs/flux.2-pro",name:"FLUX.2 Pro (via OpenRouter)"},{id:"black-forest-labs/flux.2-flex",name:"FLUX.2 Flex (via OpenRouter)"}],supportedSizes:["1024x1024","1024x1792","1792x1024"]},pollinations:{id:"pollinations",alias:"pol",baseUrl:"https://gen.pollinations.ai/v1/images/generations",authType:"apikey",authHeader:"bearer",format:"openai",models:[{id:"klein",name:"FLUX.2 Klein 4B"},{id:"flux",name:"Flux Schnell"},{id:"zimage",name:"Z-Image Turbo"},{id:"qwen-image",name:"Qwen Image Plus"},{id:"wan-image",name:"Wan 2.7 Image"},{id:"gpt-image-2",name:"GPT Image 2"},{id:"gptimage-large",name:"GPT Image 1.5"},{id:"gptimage",name:"GPT Image 1 Mini"}],supportedSizes:["1024x1024","512x512"]},"fal-ai":{id:"fal-ai",baseUrl:"https://fal.run",authType:"apikey",authHeader:"key",format:"fal-ai",models:[{id:"fal-ai/flux-2-max",name:"FLUX.2 Max"},{id:"fal-ai/flux-2-pro",name:"FLUX.2 Pro"},{id:"fal-ai/flux-2-flex",name:"FLUX.2 Flex"},{id:"bria/text-to-image/3.2",name:"Bria 3.2"},{id:"fal-ai/bytedance/seedream/v4.5/text-to-image",name:"SeeDream V4.5"},{id:"fal-ai/bytedance/dreamina/v3.1/text-to-image",name:"Dreamina V3.1"},{id:"fal-ai/ideogram/v3",name:"Ideogram V3"},{id:"fal-ai/nano-banana-pro",name:"Nano Banana Pro"},{id:"fal-ai/nano-banana-2",name:"Nano Banana 2"},{id:"fal-ai/recraft/v4/pro/text-to-image",name:"Recraft V4 Pro via Fal"},{id:"fal-ai/recraft/v4/text-to-image",name:"Recraft V4 via Fal"},{id:"fal-ai/stable-diffusion-v35-medium",name:"Stable Diffusion v3.5 Medium"}],supportedSizes:["1024x1024","1024x1280","1280x1024"]},"stability-ai":{id:"stability-ai",baseUrl:"https://api.stability.ai",authType:"apikey",authHeader:"bearer",format:"stability-ai",models:[{id:"stable-image-ultra",name:"Stable Image Ultra"},{id:"stable-image-core",name:"Stable Image Core"},{id:"sd3.5-large-turbo",name:"sd3.5-large-turbo"},{id:"sd3.5-large",name:"sd3.5-large"},{id:"sd3.5-medium",name:"sd3.5-medium"},{id:"sd3.5-flash",name:"sd3.5-flash"},{id:"erase",name:"Erase",inputModalities:["image"]},{id:"inpaint",name:"Inpaint",inputModalities:["text","image"]},{id:"outpaint",name:"Outpaint",inputModalities:["text","image"]},{id:"remove-background",name:"Remove Background",inputModalities:["image"]},{id:"search-and-replace",name:"Search and Replace",inputModalities:["text","image"]},{id:"search-and-recolor",name:"Search and Recolor",inputModalities:["text","image"]},{id:"replace-background-and-relight",name:"Replace Background and Relight",inputModalities:["text","image"]},{id:"creative",name:"Creative Upscale",inputModalities:["text","image"]},{id:"fast",name:"Fast Upscale",inputModalities:["image"]},{id:"conservative",name:"Conservative Upscale",inputModalities:["image"]},{id:"sketch",name:"Sketch Control",inputModalities:["text","image"]},{id:"structure",name:"Structure Control",inputModalities:["text","image"]},{id:"style",name:"Style Control",inputModalities:["text","image"]},{id:"style-transfer",name:"Style Transfer",inputModalities:["text","image"]}],supportedSizes:["1024x1024","1024x1280","1280x1024"]},"black-forest-labs":{id:"black-forest-labs",baseUrl:"https://api.bfl.ai",authType:"apikey",authHeader:"x-key",format:"black-forest-labs",models:[{id:"flux-2-max",name:"FLUX.2 Max"},{id:"flux-2-pro",name:"FLUX.2 Pro"},{id:"flux-2-flex",name:"FLUX.2 Flex"},{id:"flux-pro-1.1-ultra",name:"flux-pro-1.1-ultra"},{id:"flux-pro-1.1",name:"flux-pro-1.1"},{id:"flux-2-klein-9b",name:"flux 2 Klein 9B"},{id:"flux-2-klein-4b",name:"flux 2 Klein 4B"},{id:"flux-kontext-max",name:"flux-kontext-max",inputModalities:["text","image"]},{id:"flux-kontext-pro",name:"flux-kontext-pro",inputModalities:["text","image"]},{id:"flux-dev",name:"flux-dev"},{id:"flux-pro",name:"flux-pro"}],supportedSizes:["1024x1024","1024x1280","1280x1024"]},recraft:{id:"recraft",baseUrl:"https://external.api.recraft.ai",authType:"apikey",authHeader:"bearer",format:"recraft",models:[{id:"recraftv4_pro",name:"Recraft V4 Pro"},{id:"recraftv4",name:"Recraft V4"},{id:"recraftv3",name:"Recraft V3"},{id:"recraftv2",name:"Recraft V2"}],supportedSizes:["1024x1024","1024x1280","1280x1024"]},topaz:{id:"topaz",baseUrl:"https://api.topazlabs.com",authType:"apikey",authHeader:"x-api-key",format:"topaz",models:[{id:"topaz-enhance",name:"topaz-enhance",inputModalities:["image"]}],supportedSizes:["1024x1024"]}};function h(a){return g[a]||null}function i(a){if(!a)return{provider:null,model:null};let b=e(a);if(b)return b;for(let[b,c]of Object.entries(g)){if(a.startsWith(b+"/")){let c=a.slice(b.length+1);return e(`${b}/${c}`)||e(c)||{provider:b,model:c}}if(c.alias&&a.startsWith(c.alias+"/")){let d=a.slice(c.alias.length+1);return e(`${b}/${d}`)||e(d)||{provider:b,model:d}}}for(let[b,c]of Object.entries(g))if(c.models.some(b=>b.id===a))return{provider:b,model:a};return{provider:null,model:a}}function j(){let a=[];for(let[b,c]of Object.entries(g))for(let d of c.models)a.push({id:`${b}/${d.id}`,name:d.name,provider:b,supportedSizes:c.supportedSizes,inputModalities:d.inputModalities||["text"],description:d.description||void 0});for(let[b,c]of Object.entries(d)){if(!c.listInCatalog)continue;let d=g[c.provider],e=f(c.provider,c.model);a.push({id:b,name:c.name||e?.name||b,provider:c.provider,supportedSizes:d?.supportedSizes||[],inputModalities:c.inputModalities||e?.inputModalities||["text"],description:c.description||e?.description||void 0})}return a}function k(a){if(!a)return null;let b=d[a];if(b){let a=f(b.provider,b.model);return{provider:b.provider,model:b.model,inputModalities:b.inputModalities||a?.inputModalities||["text"],description:b.description||a?.description||void 0}}let{provider:c,model:e}=i(a);if(!c||!e)return null;let g=f(c,e);return g?{provider:c,model:e,inputModalities:g.inputModalities||["text"],description:g.description||void 0}:null}},27756:(a,b,c)=>{c.d(b,{J:()=>f});let d={"256x256":"1:1","512x512":"1:1","1024x1024":"1:1","1792x1024":"16:9","1024x1792":"9:16","1536x1024":"3:2","1024x1536":"2:3"},e=/^\d+:\d+$/;function f(a){return a?e.test(a)?a:d[a]??"1:1":"1:1"}},31245:(a,b,c)=>{c.d(b,{I:()=>g});var d=c(34366);function e(a,b){return"public-only"===b?(0,d.hz)(a):(0,d.Tv)(a)}async function f(a,b){let c=a.headers.get("content-length"),d=c?Number.parseInt(c,10):null;if(null!==d&&Number.isFinite(d)&&d>b)throw Error(`Remote image exceeds ${b} byte limit`);if(!a.body){let c=Buffer.from(await a.arrayBuffer());if(c.byteLength>b)throw Error(`Remote image exceeds ${b} byte limit`);return c}let e=a.body.getReader(),f=[],g=0;try{for(;;){let{done:a,value:c}=await e.read();if(a)break;let d=Buffer.from(c);if((g+=d.byteLength)>b)throw await e.cancel(),Error(`Remote image exceeds ${b} byte limit`);f.push(d)}}finally{e.releaseLock()}return Buffer.concat(f,g)}async function g(a,b={}){var c,h;let i,j=b.fetchImpl??fetch,k=b.guard??(0,d.f2)(),l=b.maxBytes??0x1400000,m=b.maxRedirects??3,n=(c=b.signal,h=b.timeoutMs??15e3,i=AbortSignal.timeout(h),c?AbortSignal.any([c,i]):i),o=e(a,k);for(let a=0;a<=m;a++){let b=await j(o.toString(),{method:"GET",redirect:"manual",signal:n});if(b.status>=300&&b.status<400){let c=b.headers.get("location");if(!c)throw Error(`Remote image redirect missing Location header (${b.status})`);if(a>=m)throw Error(`Remote image exceeded ${m} redirect limit`);o=e(new URL(c,o),k);continue}if(!b.ok)throw Error(`Remote image fetch error ${b.status}`);return{buffer:await f(b,l),contentType:b.headers.get("content-type")||"application/octet-stream",url:o.toString()}}throw Error(`Remote image exceeded ${m} redirect limit`)}},34366:(a,b,c)=>{c.d(b,{Di:()=>g,JG:()=>f,Tv:()=>h,f2:()=>j,hz:()=>i});var d=c(77030);let e=new Set(["1","true","yes","on"]),f="Blocked private or local provider URL";class g extends Error{constructor(a,b){super(a),this.name="OutboundUrlGuardError",this.code=b.code,this.url=b.url,this.hostname=b.hostname??null}}function h(a){let b;try{b=a instanceof URL?a:new URL(String(a))}catch{throw new g(`Invalid outbound URL: ${String(a)}`,{code:"OUTBOUND_URL_INVALID",url:String(a)})}if("http:"!==b.protocol&&"https:"!==b.protocol)throw new g(`Invalid outbound URL protocol for ${b.toString()}`,{code:"OUTBOUND_URL_INVALID",url:b.toString(),hostname:b.hostname||null});if(b.username||b.password)throw new g("Blocked outbound URL with embedded credentials",{code:"OUTBOUND_URL_GUARD_BLOCKED",url:b.toString(),hostname:b.hostname||null});return b}function i(a){let b=h(a);if(function(a){let b,c=(b=a.trim().toLowerCase()).startsWith("[")&&b.endsWith("]")?b.slice(1,-1):b;if(!c||"localhost"===c||"0.0.0.0"===c||"127.0.0.1"===c||"::1"===c||c.endsWith(".localhost")||c.endsWith(".local")||c.startsWith("::ffff:"))return!0;if(4===(0,d.isIP)(c)){let[a,b]=c.split(".").map(a=>parseInt(a,10));return 0===a||10===a||127===a||169===a&&254===b||192===a&&168===b||172===a&&b>=16&&b<=31||100===a&&b>=64&&b<=127||!1}return 6===(0,d.isIP)(c)&&("::1"===c||c.startsWith("fc")||c.startsWith("fd")||c.startsWith("fe80:"))}(b.hostname))throw new g(f,{code:"OUTBOUND_URL_GUARD_BLOCKED",url:b.toString(),hostname:b.hostname||null});return b}function j(){return!function(){let a=process.env.OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS;if(a&&e.has(a.trim().toLowerCase()))return!0;let b=process.env.OUTBOUND_SSRF_GUARD_ENABLED;return!!(b&&["false","0","no","off"].includes(b.trim().toLowerCase()))}()?"public-only":"none"}},39548:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{ky:()=>p,wv:()=>u});var e=c(55511),f=c(15102),g=c(27756),h=c(21832),i=c(82065),j=c(94248),k=c(77598),l=c(14272),m=c(92310),n=c(31245),o=a([l]);l=(o.then?(await o)():o)[0];let W=new Set(["black-forest-labs/FLUX.2-max","black-forest-labs/FLUX.2-pro","black-forest-labs/FLUX.2-flex","black-forest-labs/FLUX.2-dev","openai/gpt-image-1.5","Wan-AI/Wan2.6-image","Qwen/Qwen-Image-2.0-Pro","Qwen/Qwen-Image-2.0","google/flash-image-3.1","google/gemini-3-pro-image","flux-kontext-max","flux-kontext","flux-kontext-pro"]),X={"flux-2-max":"/v1/flux-2-max","flux-2-pro":"/v1/flux-2-pro","flux-2-flex":"/v1/flux-2-flex","flux-2-klein-9b":"/v1/flux-2-klein-9b","flux-2-klein-4b":"/v1/flux-2-klein-4b","flux-kontext-pro":"/v1/flux-kontext-pro","flux-kontext-max":"/v1/flux-kontext-max","flux-pro-1.1":"/v1/flux-pro-1.1","flux-pro-1.1-ultra":"/v1/flux-pro-1.1-ultra","flux-dev":"/v1/flux-dev","flux-pro":"/v1/flux-pro"},Y=new Set(["flux-2-max","flux-2-pro","flux-2-flex","flux-kontext-pro","flux-kontext-max"]),Z=new Set(["Error","Failed","Content Moderated","Request Moderated"]),$={"sd3.5-large":"/v2beta/stable-image/generate/sd3","sd3.5-large-turbo":"/v2beta/stable-image/generate/sd3","sd3.5-medium":"/v2beta/stable-image/generate/sd3","sd3.5-flash":"/v2beta/stable-image/generate/sd3","stable-image-ultra":"/v2beta/stable-image/generate/ultra","stable-image-core":"/v2beta/stable-image/generate/core"},_={inpaint:"/v2beta/stable-image/edit/inpaint",outpaint:"/v2beta/stable-image/edit/outpaint",erase:"/v2beta/stable-image/edit/erase","search-and-replace":"/v2beta/stable-image/edit/search-and-replace","search-and-recolor":"/v2beta/stable-image/edit/search-and-recolor","remove-background":"/v2beta/stable-image/edit/remove-background","replace-background-and-relight":"/v2beta/stable-image/edit/replace-background-and-relight",fast:"/v2beta/stable-image/upscale/fast",conservative:"/v2beta/stable-image/upscale/conservative",creative:"/v2beta/stable-image/upscale/creative",sketch:"/v2beta/stable-image/control/sketch",structure:"/v2beta/stable-image/control/structure",style:"/v2beta/stable-image/control/style","style-transfer":"/v2beta/stable-image/control/style-transfer"},aa=new Set(["sketch","structure","style","style-transfer"]),ab={"1024x1024":"square_hd","512x512":"square","1792x1024":"landscape_16_9","1024x1792":"portrait_16_9","1024x768":"landscape_4_3","768x1024":"portrait_4_3","1536x1024":"landscape_3_2","1024x1536":"portrait_3_2","576x1024":"portrait_16_9","1024x576":"landscape_16_9"};async function p({body:a,credentials:b,log:c,resolvedProvider:d=null,signal:e=null,clientHeaders:g=null}){let h,i;if(d){h=d;let b=a.model||"";i=b.startsWith(h+"/")?b.slice(h.length+1):b}else{let b=(0,f.Uk)(a.model);h=b.provider,i=b.model}if(!h)return{success:!1,status:400,error:`Invalid image model: ${a.model}. Use format: provider/model`};let j=(0,f.bV)(h);if(!j){if(!d)return{success:!1,status:400,error:`Unknown image provider: ${h}`};c&&c.info("IMAGE",`Custom model ${h}/${i} — using OpenAI-compatible handler`);let e={id:h,baseUrl:b?.baseUrl||"https://generativelanguage.googleapis.com/v1beta/openai/images/generations",authType:"apikey",authHeader:"bearer",format:"openai"};return r({model:i,provider:h,providerConfig:e,body:a,credentials:b,log:c})}return"gemini-image"===j.format?q({model:i,providerConfig:j,body:a,credentials:b,log:c}):"imagen3"===j.format?V({model:i,provider:h,providerConfig:j,body:a,credentials:b,log:c}):"hyperbolic"===j.format?O({model:i,provider:h,providerConfig:j,body:a,credentials:b,log:c}):"fal-ai"===j.format?v({model:i,provider:h,providerConfig:j,body:a,credentials:b,log:c}):"stability-ai"===j.format?w({model:i,provider:h,providerConfig:j,body:a,credentials:b,log:c}):"black-forest-labs"===j.format?x({model:i,provider:h,providerConfig:j,body:a,credentials:b,log:c}):"recraft"===j.format?y({model:i,provider:h,providerConfig:j,body:a,credentials:b,log:c}):"topaz"===j.format?z({model:i,provider:h,providerConfig:j,body:a,credentials:b,log:c}):"chatgpt-web"===j.format?t({model:i,provider:h,body:a,credentials:b,log:c,signal:e,clientHeaders:g}):"nanobanana"===j.format?P({model:i,provider:h,providerConfig:j,body:a,credentials:b,log:c}):"sdwebui"===j.format?T({model:i,provider:h,providerConfig:j,body:a,log:c}):"comfyui"===j.format?U({model:i,provider:h,providerConfig:j,body:a,log:c}):"codex-responses"===j.format?K({model:i,provider:h,providerConfig:j,body:a,credentials:b,log:c}):r({model:i,provider:h,providerConfig:j,body:a,credentials:b,log:c})}async function q({model:a,providerConfig:b,body:c,credentials:d,log:e}){let f=Date.now(),g=`${b.baseUrl}/${a}:generateContent`,h="antigravity",i={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},j={contents:[{parts:[{text:c.prompt}]}],generationConfig:{responseModalities:["TEXT","IMAGE"]}},k=d.accessToken||d.apiKey,m={"Content-Type":"application/json",Authorization:`Bearer ${k}`};if(e){let b="string"==typeof c.prompt?c.prompt.slice(0,60):String(c.prompt??"").slice(0,60);e.info("IMAGE",`antigravity/${a} (gemini) | prompt: "${b}..." | format: gemini-image`)}try{let b=await fetch(g,{method:"POST",headers:m,body:JSON.stringify(j)});if(!b.ok){let c=await b.text();return e&&e.error("IMAGE",`antigravity error ${b.status}: ${c.slice(0,200)}`),(0,l.gK)({method:"POST",path:"/v1/images/generations",status:b.status,model:`antigravity/${a}`,provider:h,duration:Date.now()-f,error:c.slice(0,500),requestBody:i}).catch(()=>{}),{success:!1,status:b.status,error:c}}let d=await b.json(),k=[];for(let a of d.candidates||[]){let b=a.content?.parts||[];for(let a of b)a.inlineData&&k.push({b64_json:a.inlineData.data,revised_prompt:b.find(a=>a.text)?.text||c.prompt})}return(0,l.gK)({method:"POST",path:"/v1/images/generations",status:200,model:`antigravity/${a}`,provider:h,duration:Date.now()-f,tokens:{prompt_tokens:0,completion_tokens:0},requestBody:i,responseBody:{images_count:k.length}}).catch(()=>{}),{success:!0,data:{created:Math.floor(Date.now()/1e3),data:k}}}catch(b){return e&&e.error("IMAGE",`antigravity fetch error: ${b.message}`),(0,l.gK)({method:"POST",path:"/v1/images/generations",status:502,model:`antigravity/${a}`,provider:h,duration:Date.now()-f,error:b.message,requestBody:i}).catch(()=>{}),{success:!1,status:502,error:`Image provider error: ${b.message}`}}}async function r({model:a,provider:b,providerConfig:c,body:d,credentials:e,log:f}){let g=Date.now(),h={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},i={model:a,prompt:d.prompt};void 0!==d.n&&(i.n=d.n),void 0!==d.size&&(i.size=d.size),void 0!==d.quality&&(i.quality=d.quality),void 0!==d.response_format&&(i.response_format=d.response_format),void 0!==d.style&&(i.style=d.style);let{imageUrl:j}=B(d);j&&W.has(a)&&(i.image_url=j);let k={"Content-Type":"application/json"},m=e.apiKey||e.accessToken;if("bearer"===c.authHeader?k.Authorization=`Bearer ${m}`:"x-api-key"===c.authHeader&&(k["x-api-key"]=m),f){let c="string"==typeof d.prompt?d.prompt.slice(0,60):String(d.prompt??"").slice(0,60);f.info("IMAGE",`${b}/${a} | prompt: "${c}..." | size: ${d.size||"default"}`)}let n=JSON.stringify(i),o=await N(c.baseUrl,k,n,b,f);return!o.success&&c.fallbackUrl&&[404,410,502,503].includes(o.status)&&(f&&f.info("IMAGE",`${b}: primary URL failed (${o.status}), trying fallback...`),o=await N(c.fallbackUrl,k,n,b,f)),(0,l.gK)({method:"POST",path:"/v1/images/generations",status:o.status||(o.success?200:502),model:`${b}/${a}`,provider:b,duration:Date.now()-g,tokens:{prompt_tokens:0,completion_tokens:0},error:o.success?null:"string"==typeof o.error?o.error.slice(0,500):null,requestBody:h,responseBody:o.success?{images_count:o.data?.data?.length||0}:null}).catch(()=>{}),o}let ac=/!\[[^\]]*\]\(([^)\s]+)\)/g,ad=/\/v1\/chatgpt-web\/image\/([a-f0-9]{16,64})(?=[?\s"'<>)]|$)/i;function s(a){let b=[];for(let c of a.matchAll(ac))c[1]&&b.push(c[1]);return b}async function t({model:a,provider:b,body:c,credentials:d,log:e,signal:f,clientHeaders:g}){let h=Date.now(),k="string"==typeof c.prompt?c.prompt.trim():"";if(!k)return M({provider:b,model:a,status:400,startTime:h,error:"Prompt is required for ChatGPT Web image generation"});if(!d?.apiKey)return M({provider:b,model:a,status:401,startTime:h,error:"ChatGPT Web credentials missing session cookie"});let l=Number.isInteger(c.n)&&c.n>0?c.n:1;if(l>4)return M({provider:b,model:a,status:400,startTime:h,error:`ChatGPT Web image generation supports n=1..4 (got ${l}); each n is a separate ~30s chat turn.`});e&&l>1&&e.warn("IMAGE",`ChatGPT Web returns one image per chat turn; requested n=${l} will run sequentially`);let m="b64_json"===c.response_format,n=[],o={model:a,prompt:k.slice(0,500),size:c.size||void 0,quality:c.quality||void 0};for(let k=0;k<l;k++){let k=new i.RF,l=await k.execute({model:a,body:{messages:[{role:"user",content:function(a){let b=String(a.prompt||"").trim(),c=[`Create an image for this prompt: ${b}`];return"string"==typeof a.size&&a.size.trim()&&c.push(`Requested size: ${a.size.trim()}.`),"string"==typeof a.quality&&a.quality.trim()&&c.push(`Requested quality: ${a.quality.trim()}.`),"string"==typeof a.style&&a.style.trim()&&c.push(`Requested style: ${a.style.trim()}.`),c.join("\n")}(c)}]},stream:!1,credentials:d,signal:f,log:e,clientHeaders:g}),p=await l.response.text();if(l.response.status>=400)return M({provider:b,model:a,status:l.response.status,startTime:h,error:p,requestBody:o});let q="";try{let a=JSON.parse(p);q=String(a?.choices?.[0]?.message?.content||"")}catch{q=p}let r=s(q);if(0===r.length)return M({provider:b,model:a,status:502,startTime:h,error:`ChatGPT Web completed without returning image markdown: ${q.slice(0,300)}`,requestBody:o});for(let c of r){if(!m){n.push({url:c});continue}let d=c.match(ad)?.[1],e=d?(0,j.Zb)(d):null;if(!e)return M({provider:b,model:a,status:502,startTime:h,error:"ChatGPT Web image bytes expired before b64_json conversion",requestBody:o});n.push({b64_json:e.bytes.toString("base64")})}}return L({provider:b,model:a,startTime:h,requestBody:o,responseBody:{images_count:n.length},images:n})}async function u({provider:a,model:b,body:c,imageBytes:d,credentials:e,log:f,signal:g=null,clientHeaders:h=null}){let l=Date.now(),m="string"==typeof c.prompt?c.prompt.trim():"";if(!m)return M({provider:a,model:b,status:400,startTime:l,error:"Prompt is required for image edit"});if(!e?.apiKey)return M({provider:a,model:b,status:401,startTime:l,error:"ChatGPT Web credentials missing session cookie"});let n=(0,k.createHash)("sha256").update(d).digest("hex"),o=(0,j._q)(n),p="b64_json"===c.response_format,q={model:b,prompt:m.slice(0,500),size:c.size||void 0,image_hash:n.slice(0,16),image_bytes:d.length,cached_match:!!o?.entry.context};if(!o?.entry.context)return f?.warn?.("IMAGE",`chatgpt-web edit: no cached match for sha256=${n.slice(0,16)} (bytes=${d.length}); returning 400`),M({provider:a,model:b,status:400,startTime:l,error:"chatgpt-web image edit only works for images recently generated through this OmniRoute instance (cache window: 30 minutes). Re-generate the image and try the edit immediately, or disable image-edit in your client to use plain chat-completion edit prompts instead.",requestBody:q});let r=[{role:"assistant",content:`![image](http://internal/v1/chatgpt-web/image/${o.id})`},{role:"user",content:`Edit the image and generate the new image: ${m}`}],t=new i.RF,v=await t.execute({model:b,body:{messages:r},stream:!1,credentials:e,signal:g,log:f,clientHeaders:h}),w=await v.response.text();if(v.response.status>=400)return M({provider:a,model:b,status:v.response.status,startTime:l,error:w,requestBody:q});let x="";try{let a=JSON.parse(w);x=String(a?.choices?.[0]?.message?.content||"")}catch{x=w}let y=s(x);if(0===y.length)return M({provider:a,model:b,status:502,startTime:l,error:`ChatGPT Web edit completed without returning image markdown: ${x.slice(0,300)}`,requestBody:q});let z=[];for(let c of y){if(!p){z.push({url:c});continue}let d=c.match(ad)?.[1],e=d?(0,j.Zb)(d):null;if(!e)return M({provider:a,model:b,status:502,startTime:l,error:"ChatGPT Web image bytes expired before b64_json conversion",requestBody:q});z.push({b64_json:e.bytes.toString("base64")})}return L({provider:a,model:b,startTime:l,requestBody:q,responseBody:{images_count:z.length,edit_match:!!o?.entry.context},images:z})}async function v({model:a,provider:b,providerConfig:c,body:d,credentials:e,log:f}){var h;let i=Date.now(),j=e.apiKey||e.accessToken,{imageUrl:k,imageUrls:l}=B(d),m={prompt:d.prompt,sync_mode:d.sync_mode??!0};void 0!==d.n&&(m.num_images=Number(d.n)||1),d.negative_prompt&&(m.negative_prompt=d.negative_prompt),void 0!==d.seed&&(m.seed=d.seed),d.style&&(h=d.style,m.style="vivid"===h?"digital_illustration":"natural"===h?"realistic_image":h);let n=E(d,"png");if(n&&(m.output_format=n),a.includes("flux-pro/v1.1")&&!a.includes("ultra")?m.image_size=F(d.size,"landscape_4_3"):a.includes("bytedance/")||a.includes("stable-diffusion")||a.includes("ideogram")||a.includes("recraft/v3")?m.image_size=F(d.size,"square_hd"):m.aspect_ratio=d.aspect_ratio||function(a,b="1:1"){return a?(0,g.J)(a):b}(d.size,"1:1"),"hd"===d.quality&&a.includes("ultra")&&(m.raw=!0),k&&a.includes("flux-pro/v1.1-ultra")&&(m.image_url=k),l.length>0&&a.includes("ideogram")&&(m.image_urls=l),f){let c=String(d.prompt??"").slice(0,60);f.info("IMAGE",`${b}/${a} (fal-ai) | prompt: "${c}..."`)}try{let e=await fetch(`${c.baseUrl.replace(/\/$/,"")}/${a}`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Key ${j}`},body:JSON.stringify(m)});if(!e.ok){let c=await e.text();return f&&f.error("IMAGE",`${b} error ${e.status}: ${c.slice(0,200)}`),M({provider:b,model:a,status:e.status,startTime:i,error:c,requestBody:m})}let g=await e.json(),h=await G(g,d,f);return L({provider:b,model:a,startTime:i,requestBody:m,responseBody:{images_count:h.length},created:g.created,images:h})}catch(c){return f&&f.error("IMAGE",`${b} fetch error: ${c.message}`),M({provider:b,model:a,status:502,startTime:i,error:`Image provider error: ${c.message}`})}}async function w({model:a,provider:b,providerConfig:c,body:d,credentials:e,log:f}){let h=Date.now(),i=e.apiKey||e.accessToken,j=$[a]||_[a];if(!j)return{success:!1,status:400,error:`Unsupported Stability AI image model: ${a}`};let{imageUrl:k,maskUrl:l}=B(d),m={output_format:"remove-background"===a?E(d,"png",["png","webp"]):E(d,"png")};d.prompt&&(m.prompt=d.prompt),d.negative_prompt&&(m.negative_prompt=d.negative_prompt),void 0!==d.seed&&(m.seed=d.seed);try{var n;let e;if($[a]?(a.startsWith("sd3.5")&&(m.model=a),k?(m.mode="image-to-image",m.image=(await C(k)).base64,void 0!==d.strength&&(m.strength=d.strength)):m.mode="text-to-image",a.startsWith("sd3.5")&&k||(m.aspect_ratio=d.aspect_ratio||(0,g.J)(d.size)),d.style_preset&&(m.style_preset=d.style_preset)):(k&&(m.image=(await C(k)).base64),l&&(n=a,new Set(["inpaint","erase","search-and-replace","search-and-recolor","replace-background-and-relight"]).has(n))&&(m.mask=(await C(l)).base64),d.search_prompt&&(m.search_prompt=d.search_prompt),void 0!==d.grow_mask&&(m.grow_mask=d.grow_mask),void 0!==d.control_strength&&(m.control_strength=d.control_strength),void 0!==d.creativity&&(m.creativity=d.creativity),void 0!==d.left&&(m.left=d.left),void 0!==d.right&&(m.right=d.right),void 0!==d.up&&(m.up=d.up),void 0!==d.down&&(m.down=d.down),d.style_preset&&(m.style_preset=d.style_preset),aa.has(a)&&!m.prompt&&(m.prompt=d.prompt||"")),f){let c=String(d.prompt??"").slice(0,60);f.info("IMAGE",`${b}/${a} (stability-ai) | prompt: "${c}..."`)}let o=await fetch(`${c.baseUrl.replace(/\/$/,"")}${j}`,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json",Authorization:`Bearer ${i}`},body:JSON.stringify(m)});if(!o.ok){let c=await o.text();return f&&f.error("IMAGE",`${b} error ${o.status}: ${c.slice(0,200)}`),M({provider:b,model:a,status:o.status,startTime:h,error:c,requestBody:m})}e=(o.headers.get("content-type")||"").includes("application/json")?await o.json():{image:Buffer.from(await o.arrayBuffer()).toString("base64")};let p=await G(e,d,f);return L({provider:b,model:a,startTime:h,requestBody:m,responseBody:{images_count:p.length},created:e.created,images:p})}catch(c){return f&&f.error("IMAGE",`${b} fetch error: ${c.message}`),M({provider:b,model:a,status:502,startTime:h,error:`Image provider error: ${c.message}`})}}async function x({model:a,provider:b,providerConfig:c,body:d,credentials:e,log:f}){let h=Date.now(),i=e.apiKey||e.accessToken,j=X[a];if(!j)return{success:!1,status:400,error:`Unsupported Black Forest Labs image model: ${a}`};let{imageUrl:k,maskUrl:l}=B(d),m={prompt:d.prompt,output_format:E(d,"png")};try{if(Y.has(a)&&k?m.input_image=(await C(k)).base64:k&&J(k)&&(m.image_url=k),l&&("flux-pro-1.0-fill"===a||"flux-kontext-pro"===a)&&(m.mask=(await C(l)).base64),"flux-kontext-pro"===a||"flux-kontext-max"===a)m.aspect_ratio=d.aspect_ratio||(0,g.J)(d.size);else if("string"==typeof d.size&&d.size.includes("x")){let{width:a,height:b}=D(d.size,1024);m.width=a,m.height=b}if(void 0!==d.seed&&(m.seed=d.seed),void 0!==d.n&&a.includes("ultra")&&(m.num_images=Number(d.n)||1),"hd"===d.quality&&a.includes("ultra")&&(m.raw=!0),void 0!==d.left&&(m.left=d.left),void 0!==d.right&&(m.right=d.right),void 0!==d.top&&(m.top=d.top),void 0!==d.bottom&&(m.bottom=d.bottom),void 0!==d.steps&&(m.steps=d.steps),void 0!==d.guidance&&(m.guidance=d.guidance),void 0!==d.grow_mask&&(m.grow_mask=d.grow_mask),void 0!==d.safety_tolerance&&(m.safety_tolerance=d.safety_tolerance),f){let c=String(d.prompt??"").slice(0,60);f.info("IMAGE",`${b}/${a} (black-forest-labs) | prompt: "${c}..."`)}let e=await fetch(`${c.baseUrl.replace(/\/$/,"")}${j}`,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","x-key":i},body:JSON.stringify(m)});if(!e.ok){let c=await e.text();return f&&f.error("IMAGE",`${b} error ${e.status}: ${c.slice(0,200)}`),M({provider:b,model:a,status:e.status,startTime:h,error:c,requestBody:m})}let n=await e.json(),o=n.polling_url?await A({pollingUrl:n.polling_url,token:i,body:d,log:f}):n,p=await G(o,d,f);return L({provider:b,model:a,startTime:h,requestBody:m,responseBody:{images_count:p.length},created:o.created,images:p})}catch(c){return f&&f.error("IMAGE",`${b} fetch error: ${c.message}`),M({provider:b,model:a,status:502,startTime:h,error:`Image provider error: ${c.message}`})}}async function y({model:a,provider:b,providerConfig:c,body:d,credentials:e,log:f}){let g=Date.now(),h=e.apiKey||e.accessToken,i={model:a,prompt:d.prompt};if(void 0!==d.n&&(i.n=d.n),void 0!==d.size&&(i.size=d.size),void 0!==d.response_format&&(i.response_format=d.response_format),void 0!==d.style&&(i.style=d.style),f){let c=String(d.prompt??"").slice(0,60);f.info("IMAGE",`${b}/${a} (recraft) | prompt: "${c}..."`)}try{let e=await fetch(`${c.baseUrl.replace(/\/$/,"")}/v1/images/generations`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${h}`},body:JSON.stringify(i)});if(!e.ok){let c=await e.text();return f&&f.error("IMAGE",`${b} error ${e.status}: ${c.slice(0,200)}`),M({provider:b,model:a,status:e.status,startTime:g,error:c,requestBody:i})}let j=await e.json(),k=await G(j,d,f);return L({provider:b,model:a,startTime:g,requestBody:i,responseBody:{images_count:k.length},created:j.created,images:k})}catch(c){return f&&f.error("IMAGE",`${b} fetch error: ${c.message}`),M({provider:b,model:a,status:502,startTime:g,error:`Image provider error: ${c.message}`})}}async function z({model:a,provider:b,providerConfig:c,body:d,credentials:e,log:f}){let g=Date.now(),h=e.apiKey||e.accessToken,{imageUrl:i}=B(d);if(!i)return{success:!1,status:400,error:`Topaz model ${a} requires an input image`};try{let e=await C(i),j=new FormData,k=new Blob([e.buffer],{type:e.contentType||"image/png"});if(j.append("image",k,"image.png"),"string"==typeof d.size&&d.size.includes("x")){let{width:a,height:b}=D(d.size,1024);j.append("output_width",String(a)),j.append("output_height",String(b))}if(f){let c=String(d.prompt??"enhance image").slice(0,60);f.info("IMAGE",`${b}/${a} (topaz) | prompt: "${c}..."`)}let l=await fetch(`${c.baseUrl.replace(/\/$/,"")}/image/v1/enhance`,{method:"POST",headers:{Accept:"image/jpeg","X-API-Key":h},body:j});if(!l.ok){let c=await l.text();return f&&f.error("IMAGE",`${b} error ${l.status}: ${c.slice(0,200)}`),M({provider:b,model:a,status:l.status,startTime:g,error:c})}let m=l.headers.get("content-type")||"image/jpeg",n=Buffer.from(await l.arrayBuffer()).toString("base64"),o=["b64_json"===d.response_format?{b64_json:n,revised_prompt:d.prompt}:{url:`data:${m};base64,${n}`,revised_prompt:d.prompt}];return L({provider:b,model:a,startTime:g,responseBody:{images_count:o.length},images:o})}catch(c){return f&&f.error("IMAGE",`${b} fetch error: ${c.message}`),M({provider:b,model:a,status:502,startTime:g,error:`Image provider error: ${c.message}`})}}async function A({pollingUrl:a,token:b,body:c,log:d}){let e=R(c.timeout_ms,3e5),f=R(c.poll_interval_ms,1500),g=Date.now()+e;for(;Date.now()<g;){let c=await fetch(a,{method:"GET",headers:{"x-key":b}});if(!c.ok){let a=await c.text();throw Error(`BFL polling failed (${c.status}): ${a}`)}let e=await c.json(),g=e?.status;if("Ready"===g)return e;if(Z.has(g))throw Error(`BFL image generation failed: ${g}`);d&&d.info("IMAGE",`black-forest-labs polling status: ${String(g||"Pending")}`),await S(f)}throw Error(`BFL polling timed out after ${e}ms`)}function B(a){let b=[],c=new Set,d=a=>{if("string"!=typeof a)return;let d=a.trim();!d||c.has(d)||(c.add(d),b.push(d))};if(d(a?.image_url),d(a?.image),Array.isArray(a?.imageUrls))for(let b of a.imageUrls)d(b);if(Array.isArray(a?.image_urls))for(let b of a.image_urls)d(b);if(Array.isArray(a?.messages)){for(let b of a.messages)if(Array.isArray(b?.content))for(let a of b.content)a?.type==="image_url"&&d(a?.image_url?.url)}return{imageUrl:b[0]||null,imageUrls:b,maskUrl:"string"==typeof a?.mask_url?a.mask_url:"string"==typeof a?.mask?a.mask:null}}async function C(a){if("string"!=typeof a||0===a.trim().length)throw Error("Invalid image source");let b=a.trim(),c=/^data:([^;]+);base64,(.+)$/i.exec(b);if(c){let[,a,b]=c;return{buffer:Buffer.from(b,"base64"),base64:b,contentType:a}}if(J(b)){let a=await (0,n.I)(b);return{buffer:a.buffer,base64:a.buffer.toString("base64"),contentType:a.contentType}}return{buffer:Buffer.from(b,"base64"),base64:b,contentType:"application/octet-stream"}}function D(a,b=1024){if("string"!=typeof a||!a.includes("x"))return{width:b,height:b};let[c,d]=a.split("x"),e=Number(c),f=Number(d);return{width:Number.isFinite(e)&&e>0?e:b,height:Number.isFinite(f)&&f>0?f:b}}function E(a,b="png",c=["jpeg","png","webp"]){let d="string"==typeof a?.output_format?a.output_format.toLowerCase():"string"!=typeof a?.response_format||["url","b64_json"].includes(a.response_format.toLowerCase())?b:a.response_format.toLowerCase();return c.includes(d)?d:b}function F(a,b="square_hd"){if("string"!=typeof a)return b;if(ab[a])return ab[a];if(a.includes("x")){let{width:b,height:c}=D(a,1024);return{width:b,height:c}}return b}async function G(a,b,c){let d=[],e=a=>{null!=a&&d.push(a)};if(Array.isArray(a?.data))for(let b of a.data)e(b);if(Array.isArray(a?.images))for(let b of a.images)e(b);if(a?.image&&e({b64_json:a.image}),a?.url&&e({url:a.url}),a?.sample&&e({url:a.sample}),a?.result?.sample&&e({url:a.result.sample}),Array.isArray(a?.result?.images))for(let b of a.result.images)e(b);let f=[];for(let a of d){let c=await H(a,b);c&&f.push(c)}return 0===f.length&&c&&c.warn("IMAGE",`Provider returned no recognizable image payload: ${JSON.stringify(a).slice(0,240)}`),f}async function H(a,b){let c=b?.response_format==="b64_json",d=null,e=null;if("string"==typeof a){let b=/^data:[^;]+;base64,(.+)$/i.exec(a);b?e=b[1]:J(a)?d=a:e=a}else a&&"object"==typeof a&&(d=I(a.url,a.image_url,a.sample,a.file_url)||null,e=I(a.b64_json,a.image,a.base64,a.data)||null);return(c&&!e&&d&&(e=(await C(d)).base64),d&&!c)?{url:d,revised_prompt:b?.prompt}:e?{b64_json:e,revised_prompt:b?.prompt}:d?{url:d,revised_prompt:b?.prompt}:null}function I(...a){for(let b of a)if("string"==typeof b&&b.length>0)return b;return null}function J(a){return"string"==typeof a&&/^https?:\/\//i.test(a)}async function K({model:a,provider:b,providerConfig:c,body:d,credentials:e,log:f}){let g,i=Date.now(),j="string"==typeof d.prompt?d.prompt:"";if(!j.trim())return M({provider:b,model:a,status:400,startTime:i,error:"Prompt is required for Codex image generation"});let k=Number.isInteger(d.n)&&d.n>0?d.n:1;f&&k>1&&f.warn("IMAGE",`Codex hosted image_generation returns one image per call; requested n=${k} will run sequentially`);let l=e?.accessToken||e?.apiKey;if(!l)return M({provider:b,model:a,status:401,startTime:i,error:"Codex credentials missing accessToken — reconnect the Codex provider"});let m=e?.providerSpecificData&&"object"==typeof e.providerSpecificData&&!Array.isArray(e.providerSpecificData)?e.providerSpecificData.workspaceId:void 0,n={type:"image_generation",output_format:"png"};"string"==typeof d.size&&d.size.trim()&&(n.size=d.size.trim()),"string"==typeof d.quality&&d.quality.trim()&&(g=d.quality.trim().toLowerCase(),n.quality="standard"===g?"medium":"hd"===g?"high":g);let o={model:a,instructions:"You must call the image_generation tool exactly once to fulfill the user's request. Do not add narration.",input:[{role:"user",content:[{type:"input_text",text:j}]}],tools:[n],stream:!0,store:!1},p={"Content-Type":"application/json",Accept:"text/event-stream",Authorization:`Bearer ${l}`,Version:(0,h.zq)(),"User-Agent":(0,h.EQ)(),originator:"codex_cli_rs"};"string"==typeof m&&m&&(p["chatgpt-account-id"]=m,p.session_id=m),f&&f.info("IMAGE",`${b}/${a} (codex-responses) | prompt: "${j.slice(0,60)}..."`);let q=[];for(let d=0;d<k;d++){let d;try{d=await fetch(c.baseUrl,{method:"POST",headers:p,body:JSON.stringify(o)})}catch(c){return f&&f.error("IMAGE",`${b} fetch error: ${c.message}`),M({provider:b,model:a,status:502,startTime:i,error:`Image provider error: ${c.message}`,requestBody:o})}if(!d.ok){let c=await d.text();return f&&f.error("IMAGE",`${b} error ${d.status}: ${c.slice(0,200)}`),M({provider:b,model:a,status:d.status,startTime:i,error:c,requestBody:o})}let e=await d.text(),g=function(a){let b=[];for(let c of String(a||"").split("\n")){let a,d=c.trim();if(!d.startsWith("data:"))continue;let e=d.slice(5).trim();if(!e||"[DONE]"===e)continue;try{a=JSON.parse(e)}catch{continue}if(a?.type!=="response.output_item.done")continue;let f=a.item;if(!f||"image_generation_call"!==f.type)continue;let g="string"==typeof f.result?f.result:"";if(!g)continue;let h="string"==typeof f.revised_prompt?f.revised_prompt:null;b.push({b64:g,revisedPrompt:h})}return b}(e);if(0===g.length)return M({provider:b,model:a,status:502,startTime:i,error:"Codex completed without producing an image_generation_call — the model may have declined the tool",requestBody:o});for(let a of g)q.push({b64_json:a.b64,...a.revisedPrompt?{revised_prompt:a.revisedPrompt}:{}})}let r="b64_json"!==d.response_format?q.map(a=>({url:`data:image/png;base64,${a.b64_json}`,...a.revised_prompt?{revised_prompt:a.revised_prompt}:{}})):q;return L({provider:b,model:a,startTime:i,requestBody:o,responseBody:{images_count:r.length},images:r})}function L({provider:a,model:b,startTime:c,requestBody:d=null,responseBody:e=null,created:f=null,images:g}){return(0,l.gK)({method:"POST",path:"/v1/images/generations",status:200,model:`${a}/${b}`,provider:a,duration:Date.now()-c,requestBody:d,responseBody:e}).catch(()=>{}),{success:!0,data:{created:f||Math.floor(Date.now()/1e3),data:g}}}function M({provider:a,model:b,status:c,startTime:d,error:e,requestBody:f=null}){return(0,l.gK)({method:"POST",path:"/v1/images/generations",status:c,model:`${a}/${b}`,provider:a,duration:Date.now()-d,error:"string"==typeof e?e.slice(0,500):String(e).slice(0,500),requestBody:f}).catch(()=>{}),{success:!1,status:c,error:e}}async function N(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 O({model:a,provider:b,providerConfig:c,body:d,credentials:e,log:f}){let g=Date.now(),h=e.apiKey||e.accessToken,[i,j]=(d.size||"1024x1024").split("x").map(Number),k={model_name:a,prompt:d.prompt,height:j||1024,width:i||1024,backend:"auto"};if(f){let c=String(d.prompt??"").slice(0,60);f.info("IMAGE",`${b}/${a} (hyperbolic) | prompt: "${c}..."`)}try{let e=await fetch(c.baseUrl,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${h}`},body:JSON.stringify(k)});if(!e.ok){let c=await e.text();return f&&f.error("IMAGE",`${b} error ${e.status}: ${c.slice(0,200)}`),(0,l.gK)({method:"POST",path:"/v1/images/generations",status:e.status,model:`${b}/${a}`,provider:b,duration:Date.now()-g,error:c.slice(0,500)}).catch(()=>{}),{success:!1,status:e.status,error:c}}let i=((await e.json()).images||[]).map(a=>({b64_json:a.image,revised_prompt:d.prompt}));return(0,l.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} fetch error: ${c.message}`),(0,l.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,credentials:e,log:f}){let h=Date.now(),i=e.apiKey||e.accessToken,j="nanobanana-pro"===a,k=j&&c.proUrl?c.proUrl:c.baseUrl,m=c.statusUrl,n="string"==typeof d.aspectRatio?d.aspectRatio:"string"==typeof d.aspect_ratio?d.aspect_ratio:(0,g.J)(d.size),o="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"===o&&(o="2K");let p=j?{prompt:d.prompt,resolution:o,aspectRatio:n,...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:n,...Array.isArray(d.imageUrls)?{imageUrls:d.imageUrls}:{}};if(f){let c=String(d.prompt??"").slice(0,60);f.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(p)});if(!c.ok){let d=await c.text();return f&&f.error("IMAGE",`${b} submit error ${c.status}: ${d.slice(0,200)}`),(0,l.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 e=await c.json();if(e?.image||Array.isArray(e?.images)||Array.isArray(e?.data)||e?.data?.[0]?.url||e?.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)}}(e,d.prompt);return(0,l.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 g=e?.data?.taskId||e?.taskId;if(!g){let c=`NanoBanana submit did not return taskId: ${JSON.stringify(e).slice(0,400)}`;return(0,l.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(!m){let c="NanoBanana statusUrl is not configured";return(0,l.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 j=R(d.timeout_ms,R(process.env.NANOBANANA_POLL_TIMEOUT_MS,12e4)),n=R(d.poll_interval_ms,R(process.env.NANOBANANA_POLL_INTERVAL_MS,2500)),o=null,q=Date.now()+j;for(;Date.now()<q;){let c=await fetch(`${m}?taskId=${encodeURIComponent(g)}`,{method:"GET",headers:{Authorization:`Bearer ${i}`}});if(!c.ok){let a=await c.text();return f&&f.error("IMAGE",`${b} poll error ${c.status}: ${a.slice(0,200)}`),{success:!1,status:c.status,error:a}}let e=await c.json(),j=e?.data||e;o=j;let k=Number(j?.successFlag);if(1===k){let c=await Q(j,d,f);return(0,l.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:g}}).catch(()=>{}),{success:!0,data:{created:Math.floor(Date.now()/1e3),data:c}}}if(2===k||3===k){let c=j?.errorMessage||`NanoBanana task failed (successFlag=${String(k)})`;return(0,l.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:g,successFlag:k,errorCode:j?.errorCode??null}}).catch(()=>{}),{success:!1,status:502,error:c}}await S(n)}let r=`NanoBanana task timeout after ${j}ms (taskId=${g}, successFlag=${String(o?.successFlag??"unknown")})`;return(0,l.gK)({method:"POST",path:"/v1/images/generations",status:504,model:`${b}/${a}`,provider:b,duration:Date.now()-h,error:r,responseBody:{taskId:g,lastSuccessFlag:o?.successFlag??null}}).catch(()=>{}),{success:!1,status:504,error:r}}catch(c){return f&&f.error("IMAGE",`${b} fetch error: ${c.message}`),(0,l.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 Q(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];return[{b64_json:(await (0,n.I)(a)).buffer.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 R(a,b){let c=Number(a);return!Number.isFinite(c)||c<=0?b:Math.floor(c)}function S(a){return new Promise(b=>setTimeout(b,a))}async function T({model:a,provider:b,providerConfig:c,body:d,log:e}){let f=Date.now(),[g,h]=(d.size||"512x512").split("x").map(Number),i={prompt:d.prompt,negative_prompt:d.negative_prompt||"",width:g||512,height:h||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(e){let c=String(d.prompt??"").slice(0,60);e.info("IMAGE",`${b}/${a} (sdwebui) | prompt: "${c}..."`)}try{let g=await fetch(c.baseUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)});if(!g.ok){let c=await g.text();return e&&e.error("IMAGE",`${b} error ${g.status}: ${c.slice(0,200)}`),(0,l.gK)({method:"POST",path:"/v1/images/generations",status:g.status,model:`${b}/${a}`,provider:b,duration:Date.now()-f,error:c.slice(0,500)}).catch(()=>{}),{success:!1,status:g.status,error:c}}let h=((await g.json()).images||[]).map(a=>({b64_json:a,revised_prompt:d.prompt}));return(0,l.gK)({method:"POST",path:"/v1/images/generations",status:200,model:`${b}/${a}`,provider:b,duration:Date.now()-f,responseBody:{images_count:h.length}}).catch(()=>{}),{success:!0,data:{created:Math.floor(Date.now()/1e3),data:h}}}catch(c){return e&&e.error("IMAGE",`${b} sdwebui error: ${c.message}`),(0,l.gK)({method:"POST",path:"/v1/images/generations",status:502,model:`${b}/${a}`,provider:b,duration:Date.now()-f,error:c.message}).catch(()=>{}),{success:!1,status:502,error:`Image provider error: ${c.message}`}}}async function U({model:a,provider:b,providerConfig:c,body:d,log:f}){let g=Date.now(),[h,i]=(d.size||"1024x1024").split("x").map(Number),j={3:{class_type:"KSampler",inputs:{seed:parseInt((0,e.randomUUID)().replace(/-/g,"").substring(0,8),16)%0x100000000,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:h||1024,height:i||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(f){let c=String(d.prompt??"").slice(0,60);f.info("IMAGE",`${b}/${a} (comfyui) | prompt: "${c}..."`)}try{let e=await (0,m.ep)(c.baseUrl,j),f=await (0,m.VA)(c.baseUrl,e),h=(0,m.AC)(f),i=[];for(let a of h){let b=await (0,m.Uh)(c.baseUrl,a.filename,a.subfolder,a.type),e=Buffer.from(b).toString("base64");i.push({b64_json:e,revised_prompt:d.prompt})}return(0,l.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} comfyui error: ${c.message}`),(0,l.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 V({model:a,provider:b,providerConfig:c,body:d,credentials:e,log:f}){let h=Date.now(),i=e.apiKey||e.accessToken,j=(0,g.J)(d.size),k={prompt:d.prompt,aspect_ratio:j,number_of_images:d.n??1};if(f){let c=String(d.prompt??"").slice(0,60);f.info("IMAGE",`${b}/${a} (imagen3) | prompt: "${c}..." | aspect_ratio: ${j}`)}try{let e=await fetch(c.baseUrl,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${i}`},body:JSON.stringify(k)});if(!e.ok){let c=await e.text();return f&&f.error("IMAGE",`${b} error ${e.status}: ${c.slice(0,200)}`),(0,l.gK)({method:"POST",path:"/v1/images/generations",status:e.status,model:`${b}/${a}`,provider:b,duration:Date.now()-h,error:c.slice(0,500),requestBody:k}).catch(()=>{}),{success:!1,status:e.status,error:c}}let g=await e.json(),j=[];return Array.isArray(g.images)?j.push(...g.images.map(a=>({b64_json:a.image??a.b64_json??a.url??a,revised_prompt:d.prompt}))):Array.isArray(g.data)?j.push(...g.data):(g.url||g.b64_json||g.image)&&j.push({b64_json:g.image||g.b64_json||g.url,url:g.url,revised_prompt:d.prompt}),(0,l.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:g.created||Math.floor(Date.now()/1e3),data:j}}}catch(d){let c=d instanceof Error?d.message:String(d);return f&&f.error("IMAGE",`${b} fetch error: ${c}`),(0,l.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:`Image provider error: ${c}`}}}d()}catch(a){d(a)}})}};
@@ -1 +1 @@
1
- "use strict";exports.id=39859,exports.ids=[39859],exports.modules={39859:(a,b,c)=>{c.d(b,{Hv:()=>r,OW:()=>q,Uv:()=>p,_F:()=>o});var d=c(60293),e=c(78103),f=c(78174),g=c(32113),h=c(43961),i=c(73630),j=c(88791),k=c(23969),l=c(38548),m=c(12540),n=c(77598);function o(a,b){if(b){for(let[c,d]of Object.entries(b))if("string"==typeof c&&c.length>0&&"string"==typeof d){if("user-agent"===c.toLowerCase()){p(a,d);continue}a[c]=d}}}function p(a,b){a["User-Agent"]=b,"user-agent"in a&&(a["user-agent"]=b)}function q(a,b){let c=new AbortController,d=a=>{c.signal.aborted||c.abort(a.reason)};return a.aborted?d(a):b.aborted?d(b):(a.addEventListener("abort",()=>d(a),{once:!0}),b.addEventListener("abort",()=>d(b),{once:!0})),c.signal}class r{constructor(a,b){this.provider=a,this.config=b}getProvider(){return this.provider}getBaseUrls(){return this.config.baseUrls||(this.config.baseUrl?[this.config.baseUrl]:[])}getFallbackCount(){return this.getBaseUrls().length||1}getTimeoutMs(){let a=this.config?.timeoutMs;return"number"==typeof a&&Number.isFinite(a)?Math.max(1,Math.floor(a)):d.MT}buildUrl(a,b,c=0,d=null){if(this.provider?.startsWith?.("openai-compatible-")){let a=d?.providerSpecificData,b=("string"==typeof a?.baseUrl?a.baseUrl:"https://api.openai.com/v1").replace(/\/$/,""),c="string"==typeof a?.chatPath&&a.chatPath?a.chatPath:null,e=c&&!("string"!=typeof c||!c.startsWith("/")||c.includes("\0")||c.includes(".."))&&!(c.length>512)&&1?c:null;if(e)return`${b}${e}`;let f="responses"===(0,g.J9)(this.provider,a)?"/responses":"/chat/completions";return`${b}${f}`}let e=this.getBaseUrls();return e[c]||e[0]||this.config.baseUrl}buildHeaders(a,b=!0,c){let d={"Content-Type":"application/json",...this.config.headers},e=this.config?.id||this.provider;if(e){let a=`${e.toUpperCase().replace(/[^A-Z0-9]/g,"_")}_USER_AGENT`,b=process.env[a]?.trim();b&&p(d,b)}if(a.accessToken)d.Authorization=`Bearer ${a.accessToken}`;else if(a.apiKey){let b=a.providerSpecificData?.extraApiKeys??[],c=b.length>0&&a.connectionId?(0,f.Cy)(a.connectionId,a.apiKey,b):a.apiKey;d.Authorization=`Bearer ${c}`}return d.Accept=b?"text/event-stream":"application/json",d}transformRequest(a,b,c,d){return b}shouldRetry(a,b){return a===d.gx.RATE_LIMITED&&b+1<this.getFallbackCount()}static{this.RETRY_CONFIG={maxAttempts:2,delayMs:2e3}}static{this.FETCH_START_TIMEOUT_MS=d.MT}async refreshCredentials(a,b){return null}needsRefresh(a){return!!a?.expiresAt&&new Date(a.expiresAt).getTime()-Date.now()<3e5}parseError(a,b){return{status:a.status,message:b||`HTTP ${a.status}`}}buildCountTokensUrl(a,b=null){let c=this.buildUrl(a,!1,0,b);if("string"!=typeof c||0===c.length||this.config?.format!=="claude"||!c.includes("/messages"))return null;let[d,e=""]=c.split("?"),f=(d.endsWith("/messages"),`${d}/count_tokens`);return e?`${f}?${e}`:f}async countTokens({model:a,body:b,credentials:c,signal:d,log:e}){let f=this.buildCountTokensUrl(a,c);if(!f)return null;let g=this.buildHeaders(c,!1),h=b&&"object"==typeof b?{...b,model:a}:{model:a},i=null,j=d||null,k=null,l=this.getTimeoutMs();j||(k=new AbortController,i=setTimeout(()=>k?.abort(),l),j=k.signal);try{let a=await fetch(f,{method:"POST",headers:g,body:JSON.stringify(h),signal:j||void 0}),b=await a.text();if(!a.ok){let c=this.parseError(a,b);throw Error(c.message)}let c=b?JSON.parse(b):{},d=Number(c?.input_tokens);if(!Number.isFinite(d))throw Error("Provider count_tokens response missing input_tokens");return{input_tokens:d,provider:this.provider,source:"provider"}}catch(b){return e?.debug?.("COUNT_TOKENS",`${this.provider}/${a} real count unavailable: ${b instanceof Error?b.message:String(b)}`),null}finally{i&&clearTimeout(i)}}async execute({model:a,body:b,stream:c,credentials:f,signal:s,log:t,extendedContext:u,upstreamExtraHeaders:v,clientHeaders:w}){let x=this.getFallbackCount(),y=null,z=0,A=f,B={};if(this.needsRefresh(f))try{let a=await this.refreshCredentials(f,t||null);a&&(A={...f,...a},arguments[0].onCredentialsRefreshed&&await arguments[0].onCredentialsRefreshed(a))}catch(a){t?.warn?.("TOKEN",`Credential refresh failed for ${this.provider}: ${a instanceof Error?a.message:String(a)}`)}for(let f=0;f<x;f++){let C=this.buildUrl(a,c,f,A),D=this.buildHeaders(A,c,w);!function(a,b){let c=("string"==typeof b?.customUserAgent?b.customUserAgent.trim():"")||null;c&&p(a,c)}(D,A?.providerSpecificData);let E=(0,g.GK)(this.provider)?(0,j.RG)(A?.providerSpecificData):{},F=u&&(0,i.zP)(a)&&!(0,g.GK)(this.provider),G=(0,g.GK)(this.provider)&&!0===E.context1m;(F||G)&&(0,i.QH)(D,i.c8);let H=await this.transformRequest(a,b,c,A);try{let b,c=this.getTimeoutMs(),i=c>0?new AbortController:null,j=null;i&&(j=setTimeout(()=>{let a=Error(`Fetch timeout after ${c}ms on ${C}`);a.name="TimeoutError",i.abort(a)},c));let p=i?.signal??null,u=s&&p?q(s,p):s||p,x=w?.["x-app"]==="cli"||w?.["user-agent"]&&w["user-agent"].toLowerCase().includes("claude-code")||w?.["user-agent"]&&w["user-agent"].toLowerCase().includes("claude-cli");if("claude"===this.provider&&x&&"object"==typeof H&&null!==H){(0,l.ye)(H),(0,m.oS)(H);let b="2.1.114",c=new Date().toISOString().slice(0,10),d=(0,n.createHash)("sha256").update(`${c}${b}`).digest("hex").slice(0,3),e=`x-anthropic-billing-header: cc_version=${b}.${d}; cc_entrypoint=cli; cch=00000;`;if(Array.isArray(H.system)){let a=H.system,b=a[0]&&"object"==typeof a[0]&&!Array.isArray(a[0])&&a[0].cache_control?a[0].cache_control:void 0,c={type:"text",text:e};b&&(c.cache_control=b),a.unshift(c)}else"string"==typeof H.system?H.system=[{type:"text",text:e},{type:"text",text:H.system}]:H.system=[{type:"text",text:e}];H.metadata&&"object"==typeof H.metadata||(H.metadata={user_id:JSON.stringify({device_id:(0,n.createHash)("sha256").update("omniroute").digest("hex").slice(0,24),account_uuid:"",session_id:(0,n.randomUUID)()})});let f=(0,k.j$)("claude",a);f&&!H.thinking&&(H.thinking={type:"adaptive"}),f&&!H.context_management&&(H.context_management={edits:[{type:"clear_thinking_20251015",keep:"all"}]}),f&&!H.output_config&&(H.output_config={effort:"high"});let g={"anthropic-version":"2023-06-01","anthropic-beta":"claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14,redact-thinking-2026-02-12,context-management-2025-06-27,prompt-caching-scope-2026-01-05,advisor-tool-2026-03-01,advanced-tool-use-2025-11-20,effort-2025-11-24","anthropic-dangerous-direct-browser-access":"true","x-app":"cli","User-Agent":`claude-cli/${b} (external, cli)`,"X-Stainless-Package-Version":"0.81.0","X-Stainless-Timeout":"600","accept-language":"*","accept-encoding":"gzip, deflate, br, zstd",connection:"keep-alive","x-client-request-id":(0,n.randomUUID)(),"X-Claude-Code-Session-Id":(0,n.randomUUID)()},h=new Set(Object.keys(g).map(a=>a.toLowerCase()));for(let a of Object.keys(D))h.has(a.toLowerCase())&&delete D[a];Object.assign(D,g),delete D["X-Stainless-Helper-Method"],D["X-Stainless-Arch"]="x64",D["X-Stainless-Lang"]="js",D["X-Stainless-OS"]="Windows",D["X-Stainless-Runtime"]="node",D["X-Stainless-Runtime-Version"]="v24.3.0",D["X-Stainless-Retry-Count"]="0",delete D["X-Stainless-Os"],console.log(`[CLAUDE-PATCH] provider=${this.provider} tools remapped, billing header injected, body fields added, headers patched`)}let y=D,A=JSON.stringify(H);if((0,e.IL)(this.provider)){let a=(0,e.BI)(this.provider,D,H);y=a.headers,A=a.bodyString}((0,g.GK)(this.provider)||"claude"===this.provider)&&(A=await (0,h.jD)(A)),o(y,v);let E={method:"POST",headers:y,body:A};u&&(E.signal=u);try{b=await fetch(C,E)}finally{j&&(clearTimeout(j),j=null)}if(b.status===d.gx.RATE_LIMITED&&(B[f]??0)<r.RETRY_CONFIG.maxAttempts){B[f]=(B[f]??0)+1;let a=B[f];t?.debug?.("RETRY",`429 intra-retry ${a}/${r.RETRY_CONFIG.maxAttempts} on ${C} — waiting ${r.RETRY_CONFIG.delayMs}ms`),await new Promise(a=>setTimeout(a,r.RETRY_CONFIG.delayMs)),f--;continue}if(this.shouldRetry(b.status,f)){t?.debug?.("RETRY",`${b.status} on ${C}, trying fallback ${f+1}`),z=b.status;continue}return{response:b,url:C,headers:y,transformedBody:H}}catch(b){let a=b instanceof Error?b:Error(String(b));if("TimeoutError"===a.name&&t?.warn?.("TIMEOUT",`Fetch timeout after ${this.getTimeoutMs()}ms on ${C}`),y=a,f+1<x){t?.debug?.("RETRY",`Error on ${C}, trying fallback ${f+1}`);continue}throw a}}throw y||Error(`All ${x} URLs failed with status ${z}`)}}},78174:(a,b,c)=>{c.d(b,{Cy:()=>e});let d=new Map;function e(a,b,c=[]){let f=c.filter(a=>"string"==typeof a&&a.trim().length>0);if(0===f.length)return b;let g=[b,...f].filter(Boolean);if(g.length<=1)return b;let h=d.get(a)??0,i=h%g.length;return d.set(a,h+1),g[i]}}};
1
+ "use strict";exports.id=39859,exports.ids=[39859],exports.modules={39859:(a,b,c)=>{c.d(b,{Hv:()=>r,OW:()=>q,Uv:()=>p,_F:()=>o});var d=c(60293),e=c(78103),f=c(78174),g=c(32113),h=c(43961),i=c(73630),j=c(88791),k=c(23969),l=c(38548),m=c(12540),n=c(77598);function o(a,b){if(b){for(let[c,d]of Object.entries(b))if("string"==typeof c&&c.length>0&&"string"==typeof d){if("user-agent"===c.toLowerCase()){p(a,d);continue}a[c]=d}}}function p(a,b){a["User-Agent"]=b,"user-agent"in a&&(a["user-agent"]=b)}function q(a,b){let c=new AbortController,d=a=>{c.signal.aborted||c.abort(a.reason)};return a.aborted?d(a):b.aborted?d(b):(a.addEventListener("abort",()=>d(a),{once:!0}),b.addEventListener("abort",()=>d(b),{once:!0})),c.signal}class r{constructor(a,b){this.provider=a,this.config=b}getProvider(){return this.provider}getBaseUrls(){return this.config.baseUrls||(this.config.baseUrl?[this.config.baseUrl]:[])}getFallbackCount(){return this.getBaseUrls().length||1}getTimeoutMs(){let a=this.config?.timeoutMs;return"number"==typeof a&&Number.isFinite(a)?Math.max(1,Math.floor(a)):d.MT}buildUrl(a,b,c=0,d=null){if(this.provider?.startsWith?.("openai-compatible-")){let a=d?.providerSpecificData,b=("string"==typeof a?.baseUrl?a.baseUrl:"https://api.openai.com/v1").replace(/\/$/,""),c="string"==typeof a?.chatPath&&a.chatPath?a.chatPath:null,e=c&&!("string"!=typeof c||!c.startsWith("/")||c.includes("\0")||c.includes(".."))&&!(c.length>512)&&1?c:null;if(e)return`${b}${e}`;let f="responses"===(0,g.J9)(this.provider,a)?"/responses":"/chat/completions";return`${b}${f}`}let e=this.getBaseUrls();return e[c]||e[0]||this.config.baseUrl}buildHeaders(a,b=!0,c){let d={"Content-Type":"application/json",...this.config.headers},e=this.config?.id||this.provider;if(e){let a=`${e.toUpperCase().replace(/[^A-Z0-9]/g,"_")}_USER_AGENT`,b=process.env[a]?.trim();b&&p(d,b)}if(a.accessToken)d.Authorization=`Bearer ${a.accessToken}`;else if(a.apiKey){let b=a.providerSpecificData?.extraApiKeys??[],c=b.length>0&&a.connectionId?(0,f.Cy)(a.connectionId,a.apiKey,b):a.apiKey;d.Authorization=`Bearer ${c}`}return d.Accept=b?"text/event-stream":"application/json",d}transformRequest(a,b,c,d){return b}shouldRetry(a,b){return a===d.gx.RATE_LIMITED&&b+1<this.getFallbackCount()}static{this.RETRY_CONFIG={maxAttempts:2,delayMs:2e3}}static{this.FETCH_START_TIMEOUT_MS=d.MT}async refreshCredentials(a,b){return null}needsRefresh(a){return!!a?.expiresAt&&new Date(a.expiresAt).getTime()-Date.now()<3e5}parseError(a,b){return{status:a.status,message:b||`HTTP ${a.status}`}}buildCountTokensUrl(a,b=null){let c=this.buildUrl(a,!1,0,b);if("string"!=typeof c||0===c.length||this.config?.format!=="claude"||!c.includes("/messages"))return null;let[d,e=""]=c.split("?"),f=(d.endsWith("/messages"),`${d}/count_tokens`);return e?`${f}?${e}`:f}async countTokens({model:a,body:b,credentials:c,signal:d,log:e}){let f=this.buildCountTokensUrl(a,c);if(!f)return null;let g=this.buildHeaders(c,!1),h=b&&"object"==typeof b?{...b,model:a}:{model:a},i=null,j=d||null,k=null,l=this.getTimeoutMs();j||(k=new AbortController,i=setTimeout(()=>k?.abort(),l),j=k.signal);try{let a=await fetch(f,{method:"POST",headers:g,body:JSON.stringify(h),signal:j||void 0}),b=await a.text();if(!a.ok){let c=this.parseError(a,b);throw Error(c.message)}let c=b?JSON.parse(b):{},d=Number(c?.input_tokens);if(!Number.isFinite(d))throw Error("Provider count_tokens response missing input_tokens");return{input_tokens:d,provider:this.provider,source:"provider"}}catch(b){return e?.debug?.("COUNT_TOKENS",`${this.provider}/${a} real count unavailable: ${b instanceof Error?b.message:String(b)}`),null}finally{i&&clearTimeout(i)}}async execute({model:a,body:b,stream:c,credentials:f,signal:s,log:t,extendedContext:u,upstreamExtraHeaders:v,clientHeaders:w}){let x=this.getFallbackCount(),y=null,z=0,A=f,B={};if(this.needsRefresh(f))try{let a=await this.refreshCredentials(f,t||null);a&&(A={...f,...a},arguments[0].onCredentialsRefreshed&&await arguments[0].onCredentialsRefreshed(a))}catch(a){t?.warn?.("TOKEN",`Credential refresh failed for ${this.provider}: ${a instanceof Error?a.message:String(a)}`)}for(let f=0;f<x;f++){let C=this.buildUrl(a,c,f,A),D=this.buildHeaders(A,c,w);!function(a,b){let c=("string"==typeof b?.customUserAgent?b.customUserAgent.trim():"")||null;c&&p(a,c)}(D,A?.providerSpecificData);let E=(0,g.GK)(this.provider)?(0,j.RG)(A?.providerSpecificData):{},F=u&&(0,i.zP)(a)&&!(0,g.GK)(this.provider),G=(0,g.GK)(this.provider)&&!0===E.context1m;(F||G)&&(0,i.QH)(D,i.c8);let H=await this.transformRequest(a,b,c,A);try{let b,c=this.getTimeoutMs(),i=c>0?new AbortController:null,j=null;i&&(j=setTimeout(()=>{let a=Error(`Fetch timeout after ${c}ms on ${C}`);a.name="TimeoutError",i.abort(a)},c));let p=i?.signal??null,u=s&&p?q(s,p):s||p,x=w?.["x-app"]==="cli"||w?.["user-agent"]&&w["user-agent"].toLowerCase().includes("claude-code")||w?.["user-agent"]&&w["user-agent"].toLowerCase().includes("claude-cli");if("claude"===this.provider&&x&&"object"==typeof H&&null!==H){(0,l.ye)(H),(0,m.oS)(H);let b="2.1.114",c=new Date().toISOString().slice(0,10),d=(0,n.createHash)("sha256").update(`${c}${b}`).digest("hex").slice(0,3),e=`x-anthropic-billing-header: cc_version=${b}.${d}; cc_entrypoint=cli; cch=00000;`;if(Array.isArray(H.system)){let a=H.system;for(let b=a.length-1;b>=0;b--){let c=a[b];c&&"string"==typeof c.text&&c.text.startsWith("x-anthropic-billing-header:")&&a.splice(b,1)}let b=a[0]&&"object"==typeof a[0]&&!Array.isArray(a[0])&&a[0].cache_control?a[0].cache_control:void 0,c={type:"text",text:e};b&&(c.cache_control=b),a.unshift(c)}else"string"==typeof H.system?H.system=[{type:"text",text:e},{type:"text",text:H.system}]:H.system=[{type:"text",text:e}];H.metadata&&"object"==typeof H.metadata||(H.metadata={user_id:JSON.stringify({device_id:(0,n.createHash)("sha256").update("omniroute").digest("hex").slice(0,24),account_uuid:"",session_id:(0,n.randomUUID)()})});let f=(0,k.j$)("claude",a);f&&!H.thinking&&(H.thinking={type:"adaptive"}),f&&!H.context_management&&(H.context_management={edits:[{type:"clear_thinking_20251015",keep:"all"}]}),f&&!H.output_config&&(H.output_config={effort:"high"});let g={"anthropic-version":"2023-06-01","anthropic-beta":"claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14,redact-thinking-2026-02-12,context-management-2025-06-27,prompt-caching-scope-2026-01-05,advisor-tool-2026-03-01,advanced-tool-use-2025-11-20,effort-2025-11-24","anthropic-dangerous-direct-browser-access":"true","x-app":"cli","User-Agent":`claude-cli/${b} (external, cli)`,"X-Stainless-Package-Version":"0.81.0","X-Stainless-Timeout":"600","accept-language":"*","accept-encoding":"gzip, deflate, br, zstd",connection:"keep-alive","x-client-request-id":(0,n.randomUUID)(),"X-Claude-Code-Session-Id":(0,n.randomUUID)()},h=new Set(Object.keys(g).map(a=>a.toLowerCase()));for(let a of Object.keys(D))h.has(a.toLowerCase())&&delete D[a];Object.assign(D,g),delete D["X-Stainless-Helper-Method"],D["X-Stainless-Arch"]="x64",D["X-Stainless-Lang"]="js",D["X-Stainless-OS"]="Windows",D["X-Stainless-Runtime"]="node",D["X-Stainless-Runtime-Version"]="v24.3.0",D["X-Stainless-Retry-Count"]="0",delete D["X-Stainless-Os"],console.log(`[CLAUDE-PATCH] provider=${this.provider} tools remapped, billing header injected, body fields added, headers patched`)}let y=D,A=JSON.stringify(H);if((0,e.IL)(this.provider)){let a=(0,e.BI)(this.provider,D,H);y=a.headers,A=a.bodyString}((0,g.GK)(this.provider)||"claude"===this.provider)&&(A=await (0,h.jD)(A)),o(y,v);let E={method:"POST",headers:y,body:A};u&&(E.signal=u);try{b=await fetch(C,E)}finally{j&&(clearTimeout(j),j=null)}if(b.status===d.gx.RATE_LIMITED&&(B[f]??0)<r.RETRY_CONFIG.maxAttempts){B[f]=(B[f]??0)+1;let a=B[f];t?.debug?.("RETRY",`429 intra-retry ${a}/${r.RETRY_CONFIG.maxAttempts} on ${C} — waiting ${r.RETRY_CONFIG.delayMs}ms`),await new Promise(a=>setTimeout(a,r.RETRY_CONFIG.delayMs)),f--;continue}if(this.shouldRetry(b.status,f)){t?.debug?.("RETRY",`${b.status} on ${C}, trying fallback ${f+1}`),z=b.status;continue}return{response:b,url:C,headers:y,transformedBody:H}}catch(b){let a=b instanceof Error?b:Error(String(b));if("TimeoutError"===a.name&&t?.warn?.("TIMEOUT",`Fetch timeout after ${this.getTimeoutMs()}ms on ${C}`),y=a,f+1<x){t?.debug?.("RETRY",`Error on ${C}, trying fallback ${f+1}`);continue}throw a}}throw y||Error(`All ${x} URLs failed with status ${z}`)}}},78174:(a,b,c)=>{c.d(b,{Cy:()=>e});let d=new Map;function e(a,b,c=[]){let f=c.filter(a=>"string"==typeof a&&a.trim().length>0);if(0===f.length)return b;let g=[b,...f].filter(Boolean);if(g.length<=1)return b;let h=d.get(a)??0,i=h%g.length;return d.set(a,h+1),g[i]}}};
@@ -1 +1 @@
1
- "use strict";exports.id=44088,exports.ids=[44088],exports.modules={15102:(a,b,c)=>{c.d(b,{NT:()=>k,Uk:()=>i,bV:()=>h,lw:()=>j});let d={"flux-kontext":{provider:"pollinations",model:"flux-kontext",name:"FLUX Kontext",listInCatalog:!0,inputModalities:["text","image"]},"flux-kontext-max":{provider:"together",model:"black-forest-labs/FLUX.1.1-pro",name:"FLUX Kontext Max",listInCatalog:!0,inputModalities:["text","image"]},"flux-redux":{provider:"together",model:"black-forest-labs/FLUX.1-redux",name:"FLUX Redux",listInCatalog:!0,inputModalities:["text","image"]},"flux-depth":{provider:"together",model:"black-forest-labs/FLUX.1-depth",name:"FLUX Depth",listInCatalog:!0,inputModalities:["text","image"]},"flux-canny":{provider:"together",model:"black-forest-labs/FLUX.1-canny",name:"FLUX Canny",listInCatalog:!0,inputModalities:["text","image"]},"flux-dev-lora":{provider:"together",model:"black-forest-labs/FLUX.1-dev-lora",name:"FLUX Dev LoRA",listInCatalog:!0},kontext:{provider:"pollinations",model:"flux-kontext",name:"FLUX Kontext",listInCatalog:!1},"pollinations/kontext":{provider:"pollinations",model:"flux-kontext",name:"FLUX Kontext",listInCatalog:!1}};function e(a){let b=d[a];return b?{provider:b.provider,model:b.model}:null}function f(a,b){let c=g[a];return c&&c.models.find(a=>a.id===b)||null}let g={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"]},codex:{id:"codex",alias:"cx",baseUrl:"https://chatgpt.com/backend-api/codex/responses",authType:"oauth",authHeader:"bearer",format:"codex-responses",models:[{id:"gpt-5.4",name:"GPT 5.4 (Codex Image)"},{id:"gpt-5.3-codex",name:"GPT 5.3 Codex (Image)"},{id:"gpt-5.1-codex-max",name:"GPT 5.1 Codex Max (Image)"}],supportedSizes:["512x512","1024x1024","1024x1536","1536x1024"]},"chatgpt-web":{id:"chatgpt-web",alias:"cgpt-web",baseUrl:"https://chatgpt.com/backend-api/f/conversation",authType:"apikey",authHeader:"cookie",format:"chatgpt-web",models:[{id:"gpt-5.3-instant",name:"GPT-5.3 Instant (ChatGPT Web Image)"}],supportedSizes:["1024x1024","1024x1536","1536x1024"]},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",inputModalities:["text","image"],description:"Advanced contextual image editing and image-to-image generation"},{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"},{id:"black-forest-labs/FLUX.1-redux",name:"FLUX.1 Redux",inputModalities:["text","image"],description:"Generate prompt-guided variations from an input image"},{id:"black-forest-labs/FLUX.1-depth",name:"FLUX.1 Depth",inputModalities:["text","image"],description:"Depth-conditioned image generation from an input image"},{id:"black-forest-labs/FLUX.1-canny",name:"FLUX.1 Canny",inputModalities:["text","image"],description:"Canny edge guided image generation from an input image"},{id:"black-forest-labs/FLUX.1-dev-lora",name:"FLUX.1 Dev LoRA"}],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:[],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"]},openrouter:{id:"openrouter",baseUrl:"https://openrouter.ai/api/v1/images/generations",authType:"apikey",authHeader:"bearer",format:"openai",models:[{id:"openai/dall-e-3",name:"DALL-E 3 (via OpenRouter)"},{id:"openai/gpt-image-1",name:"GPT Image 1 (via OpenRouter)"},{id:"google/imagen-3.0-generate-002",name:"Imagen 3 (via OpenRouter)"},{id:"black-forest-labs/FLUX.1-schnell",name:"FLUX.1 Schnell (via OpenRouter)"}],supportedSizes:["1024x1024","1024x1792","1792x1024","256x256","512x512"]},pollinations:{id:"pollinations",alias:"pol",baseUrl:"https://gen.pollinations.ai/v1/images/generations",authType:"apikey",authHeader:"bearer",format:"openai",models:[{id:"flux",name:"Flux Schnell"},{id:"zimage",name:"Z-Image Turbo"},{id:"klein",name:"FLUX.2 Klein 4B"},{id:"gptimage",name:"GPT Image 1 Mini"},{id:"qwen-image",name:"Qwen Image Plus"},{id:"wan-image",name:"Wan 2.7 Image"},{id:"flux-kontext",name:"FLUX.1 Kontext",inputModalities:["text","image"],description:"Context-aware image editing with optional source image"},{id:"flux-kontext-max",name:"FLUX.1 Kontext Max",inputModalities:["text","image"],description:"Higher quality Kontext editing with optional source image"},{id:"gptimage-large",name:"GPT Image 1.5"}],supportedSizes:["1024x1024","512x512"]},"fal-ai":{id:"fal-ai",baseUrl:"https://fal.run",authType:"apikey",authHeader:"key",format:"fal-ai",models:[{id:"fal-ai/flux-pro/v1.1",name:"FLUX.1 Pro v1.1"},{id:"fal-ai/flux-pro/v1.1-ultra",name:"FLUX.1 Pro v1.1 Ultra"},{id:"fal-ai/flux/schnell",name:"FLUX.1 Schnell"},{id:"bria/text-to-image/3.2",name:"Bria 3.2"},{id:"fal-ai/bytedance/seedream/v3/text-to-image",name:"SeeDream V3"},{id:"fal-ai/bytedance/dreamina/v3.1/text-to-image",name:"Dreamina V3.1"},{id:"fal-ai/ideogram/v3",name:"Ideogram V3"},{id:"fal-ai/imagen4/preview",name:"Imagen 4 Preview"},{id:"fal-ai/imagen4/preview/fast",name:"Imagen 4 Preview Fast"},{id:"fal-ai/imagen4/preview/ultra",name:"Imagen 4 Preview Ultra"},{id:"fal-ai/recraft/v3/text-to-image",name:"Recraft V3 via Fal"},{id:"fal-ai/stable-diffusion-v35-medium",name:"Stable Diffusion v3.5 Medium"}],supportedSizes:["1024x1024","1024x1280","1280x1024"]},"stability-ai":{id:"stability-ai",baseUrl:"https://api.stability.ai",authType:"apikey",authHeader:"bearer",format:"stability-ai",models:[{id:"sd3",name:"sd3"},{id:"sd3-large",name:"sd3-large"},{id:"sd3-large-turbo",name:"sd3-large-turbo"},{id:"sd3-medium",name:"sd3-medium"},{id:"sd3.5-large",name:"sd3.5-large"},{id:"sd3.5-large-turbo",name:"sd3.5-large-turbo"},{id:"sd3.5-medium",name:"sd3.5-medium"},{id:"stable-image-ultra",name:"Stable Image Ultra"},{id:"stable-image-core",name:"Stable Image Core"},{id:"inpaint",name:"Inpaint",inputModalities:["text","image"]},{id:"outpaint",name:"Outpaint",inputModalities:["text","image"]},{id:"erase",name:"Erase",inputModalities:["image"]},{id:"search-and-replace",name:"Search and Replace",inputModalities:["text","image"]},{id:"search-and-recolor",name:"Search and Recolor",inputModalities:["text","image"]},{id:"remove-background",name:"Remove Background",inputModalities:["image"]},{id:"replace-background-and-relight",name:"Replace Background and Relight",inputModalities:["text","image"]},{id:"fast",name:"Fast Upscale",inputModalities:["image"]},{id:"conservative",name:"Conservative Upscale",inputModalities:["image"]},{id:"creative",name:"Creative Upscale",inputModalities:["text","image"]},{id:"sketch",name:"Sketch Control",inputModalities:["text","image"]},{id:"structure",name:"Structure Control",inputModalities:["text","image"]},{id:"style",name:"Style Control",inputModalities:["text","image"]},{id:"style-transfer",name:"Style Transfer",inputModalities:["text","image"]}],supportedSizes:["1024x1024","1024x1280","1280x1024"]},"black-forest-labs":{id:"black-forest-labs",baseUrl:"https://api.bfl.ai",authType:"apikey",authHeader:"x-key",format:"black-forest-labs",models:[{id:"flux-kontext-pro",name:"flux-kontext-pro",inputModalities:["text","image"]},{id:"flux-kontext-max",name:"flux-kontext-max",inputModalities:["text","image"]},{id:"flux-pro-1.0-fill",name:"flux-pro-1.0-fill",inputModalities:["text","image"]},{id:"flux-pro-1.0-expand",name:"flux-pro-1.0-expand",inputModalities:["text","image"]},{id:"flux-pro-1.1",name:"flux-pro-1.1"},{id:"flux-pro-1.1-ultra",name:"flux-pro-1.1-ultra"},{id:"flux-dev",name:"flux-dev"},{id:"flux-pro",name:"flux-pro"}],supportedSizes:["1024x1024","1024x1280","1280x1024"]},recraft:{id:"recraft",baseUrl:"https://external.api.recraft.ai",authType:"apikey",authHeader:"bearer",format:"recraft",models:[{id:"recraftv2",name:"recraftv2"},{id:"recraftv3",name:"recraftv3"}],supportedSizes:["1024x1024","1024x1280","1280x1024"]},topaz:{id:"topaz",baseUrl:"https://api.topazlabs.com",authType:"apikey",authHeader:"x-api-key",format:"topaz",models:[{id:"topaz-enhance",name:"topaz-enhance",inputModalities:["image"]}],supportedSizes:["1024x1024"]}};function h(a){return g[a]||null}function i(a){if(!a)return{provider:null,model:null};let b=e(a);if(b)return b;for(let[b,c]of Object.entries(g)){if(a.startsWith(b+"/")){let c=a.slice(b.length+1);return e(`${b}/${c}`)||e(c)||{provider:b,model:c}}if(c.alias&&a.startsWith(c.alias+"/")){let d=a.slice(c.alias.length+1);return e(`${b}/${d}`)||e(d)||{provider:b,model:d}}}for(let[b,c]of Object.entries(g))if(c.models.some(b=>b.id===a))return{provider:b,model:a};return{provider:null,model:a}}function j(){let a=[];for(let[b,c]of Object.entries(g))for(let d of c.models)a.push({id:`${b}/${d.id}`,name:d.name,provider:b,supportedSizes:c.supportedSizes,inputModalities:d.inputModalities||["text"],description:d.description||void 0});for(let[b,c]of Object.entries(d)){if(!c.listInCatalog)continue;let d=g[c.provider],e=f(c.provider,c.model);a.push({id:b,name:c.name||e?.name||b,provider:c.provider,supportedSizes:d?.supportedSizes||[],inputModalities:c.inputModalities||e?.inputModalities||["text"],description:c.description||e?.description||void 0})}return a}function k(a){if(!a)return null;let b=d[a];if(b){let a=f(b.provider,b.model);return{provider:b.provider,model:b.model,inputModalities:b.inputModalities||a?.inputModalities||["text"],description:b.description||a?.description||void 0}}let{provider:c,model:e}=i(a);if(!c||!e)return null;let g=f(c,e);return g?{provider:c,model:e,inputModalities:g.inputModalities||["text"],description:g.description||void 0}:null}},47293:(a,b,c)=>{c.d(b,{A:()=>f});let d=new Uint8Array(16);var e=c(50122);let f=function(a,b,c){return b||a||!crypto.randomUUID?function(a,b,c){let f=(a=a||{}).random??a.rng?.()??crypto.getRandomValues(d);if(f.length<16)throw Error("Random bytes length must be >= 16");if(f[6]=15&f[6]|64,f[8]=63&f[8]|128,b){if((c=c||0)<0||c+16>b.length)throw RangeError(`UUID byte range ${c}:${c+15} is out of buffer bounds`);for(let a=0;a<16;++a)b[c+a]=f[a];return b}return(0,e.k)(f)}(a,b,c):crypto.randomUUID()}},50122:(a,b,c)=>{c.d(b,{k:()=>e});let d=[];for(let a=0;a<256;++a)d.push((a+256).toString(16).slice(1));function e(a,b=0){return(d[a[b+0]]+d[a[b+1]]+d[a[b+2]]+d[a[b+3]]+"-"+d[a[b+4]]+d[a[b+5]]+"-"+d[a[b+6]]+d[a[b+7]]+"-"+d[a[b+8]]+d[a[b+9]]+"-"+d[a[b+10]]+d[a[b+11]]+d[a[b+12]]+d[a[b+13]]+d[a[b+14]]+d[a[b+15]]).toLowerCase()}}};
1
+ "use strict";exports.id=44088,exports.ids=[44088],exports.modules={15102:(a,b,c)=>{c.d(b,{NT:()=>k,Uk:()=>i,bV:()=>h,lw:()=>j});let d={"flux-kontext":{provider:"black-forest-labs",model:"flux-kontext-pro",name:"FLUX Kontext Pro",listInCatalog:!0,inputModalities:["text","image"]},"flux-kontext-max":{provider:"black-forest-labs",model:"flux-kontext-max",name:"FLUX Kontext Max",listInCatalog:!0,inputModalities:["text","image"]},"flux-2-max":{provider:"black-forest-labs",model:"flux-2-max",name:"FLUX.2 Max",listInCatalog:!0,inputModalities:["text","image"]},"flux-2-pro":{provider:"black-forest-labs",model:"flux-2-pro",name:"FLUX.2 Pro",listInCatalog:!0,inputModalities:["text","image"]},"flux-2-flex":{provider:"black-forest-labs",model:"flux-2-flex",name:"FLUX.2 Flex",listInCatalog:!0,inputModalities:["text","image"]},"flux-2-dev":{provider:"together",model:"black-forest-labs/FLUX.2-dev",name:"FLUX.2 Dev",listInCatalog:!0,inputModalities:["text","image"]},kontext:{provider:"black-forest-labs",model:"flux-kontext-pro",name:"FLUX Kontext Pro",listInCatalog:!1,inputModalities:["text","image"]},"pollinations/kontext":{provider:"black-forest-labs",model:"flux-kontext-pro",name:"FLUX Kontext Pro",listInCatalog:!1,inputModalities:["text","image"]}};function e(a){let b=d[a];return b?{provider:b.provider,model:b.model}:null}function f(a,b){let c=g[a];return c&&c.models.find(a=>a.id===b)||null}let g={openai:{id:"openai",baseUrl:"https://api.openai.com/v1/images/generations",authType:"apikey",authHeader:"bearer",format:"openai",models:[{id:"gpt-image-2",name:"GPT Image 2"},{id:"gpt-image-1.5",name:"GPT Image 1.5"},{id:"gpt-image-1-mini",name:"GPT Image 1 Mini"}],supportedSizes:["1024x1024","1024x1792","1792x1024"]},codex:{id:"codex",alias:"cx",baseUrl:"https://chatgpt.com/backend-api/codex/responses",authType:"oauth",authHeader:"bearer",format:"codex-responses",models:[{id:"gpt-5.5",name:"GPT 5.5 (Codex Image)"},{id:"gpt-5.4",name:"GPT 5.4 (Codex Image)"},{id:"gpt-5.3-codex",name:"GPT 5.3 Codex (Image)"}],supportedSizes:["1024x1024","1024x1536","1536x1024"]},"chatgpt-web":{id:"chatgpt-web",alias:"cgpt-web",baseUrl:"https://chatgpt.com/backend-api/f/conversation",authType:"apikey",authHeader:"cookie",format:"chatgpt-web",models:[{id:"gpt-5.3-instant",name:"GPT-5.3 Instant (ChatGPT Web Image)"}],supportedSizes:["1024x1024","1024x1536","1536x1024"]},xai:{id:"xai",baseUrl:"https://api.x.ai/v1/images/generations",authType:"apikey",authHeader:"bearer",format:"openai",models:[{id:"grok-imagine-image",name:"Grok Imagine 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.2-max",name:"FLUX.2 Max",inputModalities:["text","image"]},{id:"black-forest-labs/FLUX.2-pro",name:"FLUX.2 Pro",inputModalities:["text","image"]},{id:"black-forest-labs/FLUX.2-flex",name:"FLUX.2 Flex",inputModalities:["text","image"]},{id:"black-forest-labs/FLUX.2-dev",name:"FLUX.2 Dev",inputModalities:["text","image"]},{id:"openai/gpt-image-1.5",name:"GPT Image 1.5",inputModalities:["text","image"]},{id:"Wan-AI/Wan2.6-image",name:"Wan 2.6 Image",inputModalities:["text","image"]},{id:"Qwen/Qwen-Image-2.0-Pro",name:"Qwen Image 2.0 Pro",inputModalities:["text","image"]},{id:"Qwen/Qwen-Image-2.0",name:"Qwen Image 2.0",inputModalities:["text","image"]},{id:"google/flash-image-3.1",name:"NanoBanana 2",inputModalities:["text","image"]},{id:"google/gemini-3-pro-image",name:"NanoBanana Pro",inputModalities:["text","image"]}],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/flux-kontext-max",name:"FLUX Kontext Max"},{id:"accounts/fireworks/flux-kontext-pro",name:"FLUX Kontext Pro"},{id:"accounts/fireworks/flux-1-schnell-fp8",name:"FLUX.1 schnell"},{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:[],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:"No Model yet"}],supportedSizes:["1024x1024"]},hyperbolic:{id:"hyperbolic",baseUrl:"https://api.hyperbolic.xyz/v1/image/generation",authType:"apikey",authHeader:"bearer",format:"hyperbolic",models:[{id:"SDXL1.0-base",name:"No Model yet"}],supportedSizes:["1024x1024"]},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"]},openrouter:{id:"openrouter",baseUrl:"https://openrouter.ai/api/v1/images/generations",authType:"apikey",authHeader:"bearer",format:"openai",models:[{id:"openai/gpt-5.4-image-2",name:"GPT Image 2 (via OpenRouter)"},{id:"openai/gpt-5-image-mini",name:"GPT Image 1 Mini (via OpenRouter)"},{id:"google/gemini-3.1-flash-image-preview",name:"Nano Banana 2 (via OpenRouter)"},{id:"google/gemini-3-pro-image-preview",name:"Nano Banana Pro (via OpenRouter)"},{id:"black-forest-labs/flux.2-max",name:"FLUX.2 Max (via OpenRouter)"},{id:"black-forest-labs/flux.2-pro",name:"FLUX.2 Pro (via OpenRouter)"},{id:"black-forest-labs/flux.2-flex",name:"FLUX.2 Flex (via OpenRouter)"}],supportedSizes:["1024x1024","1024x1792","1792x1024"]},pollinations:{id:"pollinations",alias:"pol",baseUrl:"https://gen.pollinations.ai/v1/images/generations",authType:"apikey",authHeader:"bearer",format:"openai",models:[{id:"klein",name:"FLUX.2 Klein 4B"},{id:"flux",name:"Flux Schnell"},{id:"zimage",name:"Z-Image Turbo"},{id:"qwen-image",name:"Qwen Image Plus"},{id:"wan-image",name:"Wan 2.7 Image"},{id:"gpt-image-2",name:"GPT Image 2"},{id:"gptimage-large",name:"GPT Image 1.5"},{id:"gptimage",name:"GPT Image 1 Mini"}],supportedSizes:["1024x1024","512x512"]},"fal-ai":{id:"fal-ai",baseUrl:"https://fal.run",authType:"apikey",authHeader:"key",format:"fal-ai",models:[{id:"fal-ai/flux-2-max",name:"FLUX.2 Max"},{id:"fal-ai/flux-2-pro",name:"FLUX.2 Pro"},{id:"fal-ai/flux-2-flex",name:"FLUX.2 Flex"},{id:"bria/text-to-image/3.2",name:"Bria 3.2"},{id:"fal-ai/bytedance/seedream/v4.5/text-to-image",name:"SeeDream V4.5"},{id:"fal-ai/bytedance/dreamina/v3.1/text-to-image",name:"Dreamina V3.1"},{id:"fal-ai/ideogram/v3",name:"Ideogram V3"},{id:"fal-ai/nano-banana-pro",name:"Nano Banana Pro"},{id:"fal-ai/nano-banana-2",name:"Nano Banana 2"},{id:"fal-ai/recraft/v4/pro/text-to-image",name:"Recraft V4 Pro via Fal"},{id:"fal-ai/recraft/v4/text-to-image",name:"Recraft V4 via Fal"},{id:"fal-ai/stable-diffusion-v35-medium",name:"Stable Diffusion v3.5 Medium"}],supportedSizes:["1024x1024","1024x1280","1280x1024"]},"stability-ai":{id:"stability-ai",baseUrl:"https://api.stability.ai",authType:"apikey",authHeader:"bearer",format:"stability-ai",models:[{id:"stable-image-ultra",name:"Stable Image Ultra"},{id:"stable-image-core",name:"Stable Image Core"},{id:"sd3.5-large-turbo",name:"sd3.5-large-turbo"},{id:"sd3.5-large",name:"sd3.5-large"},{id:"sd3.5-medium",name:"sd3.5-medium"},{id:"sd3.5-flash",name:"sd3.5-flash"},{id:"erase",name:"Erase",inputModalities:["image"]},{id:"inpaint",name:"Inpaint",inputModalities:["text","image"]},{id:"outpaint",name:"Outpaint",inputModalities:["text","image"]},{id:"remove-background",name:"Remove Background",inputModalities:["image"]},{id:"search-and-replace",name:"Search and Replace",inputModalities:["text","image"]},{id:"search-and-recolor",name:"Search and Recolor",inputModalities:["text","image"]},{id:"replace-background-and-relight",name:"Replace Background and Relight",inputModalities:["text","image"]},{id:"creative",name:"Creative Upscale",inputModalities:["text","image"]},{id:"fast",name:"Fast Upscale",inputModalities:["image"]},{id:"conservative",name:"Conservative Upscale",inputModalities:["image"]},{id:"sketch",name:"Sketch Control",inputModalities:["text","image"]},{id:"structure",name:"Structure Control",inputModalities:["text","image"]},{id:"style",name:"Style Control",inputModalities:["text","image"]},{id:"style-transfer",name:"Style Transfer",inputModalities:["text","image"]}],supportedSizes:["1024x1024","1024x1280","1280x1024"]},"black-forest-labs":{id:"black-forest-labs",baseUrl:"https://api.bfl.ai",authType:"apikey",authHeader:"x-key",format:"black-forest-labs",models:[{id:"flux-2-max",name:"FLUX.2 Max"},{id:"flux-2-pro",name:"FLUX.2 Pro"},{id:"flux-2-flex",name:"FLUX.2 Flex"},{id:"flux-pro-1.1-ultra",name:"flux-pro-1.1-ultra"},{id:"flux-pro-1.1",name:"flux-pro-1.1"},{id:"flux-2-klein-9b",name:"flux 2 Klein 9B"},{id:"flux-2-klein-4b",name:"flux 2 Klein 4B"},{id:"flux-kontext-max",name:"flux-kontext-max",inputModalities:["text","image"]},{id:"flux-kontext-pro",name:"flux-kontext-pro",inputModalities:["text","image"]},{id:"flux-dev",name:"flux-dev"},{id:"flux-pro",name:"flux-pro"}],supportedSizes:["1024x1024","1024x1280","1280x1024"]},recraft:{id:"recraft",baseUrl:"https://external.api.recraft.ai",authType:"apikey",authHeader:"bearer",format:"recraft",models:[{id:"recraftv4_pro",name:"Recraft V4 Pro"},{id:"recraftv4",name:"Recraft V4"},{id:"recraftv3",name:"Recraft V3"},{id:"recraftv2",name:"Recraft V2"}],supportedSizes:["1024x1024","1024x1280","1280x1024"]},topaz:{id:"topaz",baseUrl:"https://api.topazlabs.com",authType:"apikey",authHeader:"x-api-key",format:"topaz",models:[{id:"topaz-enhance",name:"topaz-enhance",inputModalities:["image"]}],supportedSizes:["1024x1024"]}};function h(a){return g[a]||null}function i(a){if(!a)return{provider:null,model:null};let b=e(a);if(b)return b;for(let[b,c]of Object.entries(g)){if(a.startsWith(b+"/")){let c=a.slice(b.length+1);return e(`${b}/${c}`)||e(c)||{provider:b,model:c}}if(c.alias&&a.startsWith(c.alias+"/")){let d=a.slice(c.alias.length+1);return e(`${b}/${d}`)||e(d)||{provider:b,model:d}}}for(let[b,c]of Object.entries(g))if(c.models.some(b=>b.id===a))return{provider:b,model:a};return{provider:null,model:a}}function j(){let a=[];for(let[b,c]of Object.entries(g))for(let d of c.models)a.push({id:`${b}/${d.id}`,name:d.name,provider:b,supportedSizes:c.supportedSizes,inputModalities:d.inputModalities||["text"],description:d.description||void 0});for(let[b,c]of Object.entries(d)){if(!c.listInCatalog)continue;let d=g[c.provider],e=f(c.provider,c.model);a.push({id:b,name:c.name||e?.name||b,provider:c.provider,supportedSizes:d?.supportedSizes||[],inputModalities:c.inputModalities||e?.inputModalities||["text"],description:c.description||e?.description||void 0})}return a}function k(a){if(!a)return null;let b=d[a];if(b){let a=f(b.provider,b.model);return{provider:b.provider,model:b.model,inputModalities:b.inputModalities||a?.inputModalities||["text"],description:b.description||a?.description||void 0}}let{provider:c,model:e}=i(a);if(!c||!e)return null;let g=f(c,e);return g?{provider:c,model:e,inputModalities:g.inputModalities||["text"],description:g.description||void 0}:null}},47293:(a,b,c)=>{c.d(b,{A:()=>f});let d=new Uint8Array(16);var e=c(50122);let f=function(a,b,c){return b||a||!crypto.randomUUID?function(a,b,c){let f=(a=a||{}).random??a.rng?.()??crypto.getRandomValues(d);if(f.length<16)throw Error("Random bytes length must be >= 16");if(f[6]=15&f[6]|64,f[8]=63&f[8]|128,b){if((c=c||0)<0||c+16>b.length)throw RangeError(`UUID byte range ${c}:${c+15} is out of buffer bounds`);for(let a=0;a<16;++a)b[c+a]=f[a];return b}return(0,e.k)(f)}(a,b,c):crypto.randomUUID()}},50122:(a,b,c)=>{c.d(b,{k:()=>e});let d=[];for(let a=0;a<256;++a)d.push((a+256).toString(16).slice(1));function e(a,b=0){return(d[a[b+0]]+d[a[b+1]]+d[a[b+2]]+d[a[b+3]]+"-"+d[a[b+4]]+d[a[b+5]]+"-"+d[a[b+6]]+d[a[b+7]]+"-"+d[a[b+8]]+d[a[b+9]]+"-"+d[a[b+10]]+d[a[b+11]]+d[a[b+12]]+d[a[b+13]]+d[a[b+14]]+d[a[b+15]]).toLowerCase()}}};
@@ -1,4 +1,4 @@
1
- "use strict";exports.id=45415,exports.ids=[45415],exports.modules={11256:(a,b,c)=>{c.d(b,{_3:()=>l,sm:()=>k,ys:()=>m});var d=c(33873),e=c.n(d),f=c(21820),g=c.n(f);let h="omniroute";function i(){try{return g().homedir()}catch{let a;return"string"==typeof(a=process.env.HOME||process.env.USERPROFILE)&&a.trim().length>0?e().resolve(a):g().tmpdir()}}function j(a){if("string"!=typeof a)return null;let b=a.trim();return b?e().resolve(b):null}function k(){return e().join(i(),`.${h}`)}function l({isCloud:a=!1}={}){if(a)return"/tmp";let b=j(process.env.DATA_DIR);if(b)return b;let c=i();if("win32"===process.platform){let a=process.env.APPDATA||e().join(c,"AppData","Roaming");return e().join(a,h)}let d=j(process.env.XDG_CONFIG_HOME);return d?e().join(d,h):k()}function m(a,b){if(!a||!b)return!1;let c=e().resolve(a),d=e().resolve(b);return"win32"===process.platform?c.toLowerCase()===d.toLowerCase():c===d}},12135:(a,b,c)=>{c.d(b,{Bn:()=>n,DL:()=>l,JQ:()=>q,LY:()=>o,TX:()=>i,Tw:()=>s,U$:()=>k,Zi:()=>j,ax:()=>r,jo:()=>p,tY:()=>m,x0:()=>h,xL:()=>g});var d=c(33873);let e=c.n(d)().join(process.cwd(),"logs","application","app.log");function f(a,b){if(!a)return b;let c=Number.parseInt(a,10);return Number.isInteger(c)&&c>0?c:b}function g(){return"false"!==process.env.APP_LOG_TO_FILE}function h(){return process.env.APP_LOG_FILE_PATH||e}function i(){var a=process.env.APP_LOG_MAX_FILE_SIZE;if(!a)return 0x3200000;let b=a.match(/^(\d+)\s*(k|m|g|kb|mb|gb)?$/i);if(!b)return 0x3200000;let c=parseInt(b[1],10);switch((b[2]||"").toLowerCase()){case"k":case"kb":return 1024*c;case"m":case"mb":return 1024*c*1024;case"g":case"gb":return 1024*c*1048576;default:return c}}function j(){return f(process.env.APP_LOG_RETENTION_DAYS,7)}function k(){return f(process.env.CALL_LOG_RETENTION_DAYS,7)}function l(){return f(process.env.APP_LOG_MAX_FILES,20)}function m(){return f(process.env.CALL_LOG_MAX_ENTRIES,1e4)}function n(){return f(process.env.CALL_LOGS_TABLE_MAX_ROWS,1e5)}function o(){return function(a,b){if(!a)return b;let c=a.trim().toLowerCase();return!!["1","true","yes","on"].includes(c)||!["0","false","no","off"].includes(c)&&b}(process.env.CALL_LOG_PIPELINE_CAPTURE_STREAM_CHUNKS,!0)}function p(){return 1024*f(process.env.CALL_LOG_PIPELINE_MAX_SIZE_KB,512)}function q(){return f(process.env.PROXY_LOGS_TABLE_MAX_ROWS,1e5)}function r(a){return process.env.APP_LOG_LEVEL||a}function s(a){return process.env.APP_LOG_FORMAT||a}},14067:(a,b,c)=>{c.d(b,{Lk:()=>i,Tl:()=>h,_D:()=>f,xm:()=>g});var d=c(46291);let e=new Set(["api_key","apiKey","api-key","authorization","Authorization","x-api-key","X-Api-Key","x-goog-api-key","access_token","accessToken","refresh_token","refreshToken","password","secret","token"]);function f(a){return null==a?a:"function"==typeof globalThis.structuredClone?globalThis.structuredClone(a):JSON.parse(JSON.stringify(a))}function g(a){if("string"!=typeof a)return a;let b=a.trim();if(!b)return"";try{return JSON.parse(b)}catch{return{_rawText:a}}}function h(a){return null==a?null:function a(b){if(!b||"object"!=typeof b)return b;if(Array.isArray(b))return b.map(a);let c={};for(let[d,f]of Object.entries(b))e.has(d)?c[d]="[REDACTED]":"string"==typeof f&&f.startsWith("Bearer ")?c[d]="Bearer [REDACTED]":"object"==typeof f&&null!==f?c[d]=a(f):c[d]=f;return c}(function a(b){if("string"==typeof b)return(0,d.or)(b).text;if(Array.isArray(b))return b.map(a);if(!b||"object"!=typeof b)return b;let c={};for(let[d,e]of Object.entries(b))c[d]=a(e);return c}(g(a)))}function i(a){if("string"!=typeof a||0===a.trim().length)return null;try{return JSON.parse(a)}catch{return{_rawText:a}}}},20561:(a,b,c)=>{function d(a){return!!a&&"object"==typeof a&&!Array.isArray(a)}function e(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}function f(a){let b=a.trim(),c=b.indexOf("/");if(c<=0)return null;let d=b.slice(0,c).trim();return d.length>0?d:null}function g(a,b){let c=a.trim();if(c.includes("/"))return c;let d=e(b);return d?`${d}/${c}`:c}function h(a){let b=a.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");return b.length>0?b:"step"}function i(a,b,c,d){return[h(b||"combo"),"combo-ref"===a?"ref":"model",String(c+1),h(d)].join("-").slice(0,200)}function j(a,b,c){return!b&&((function(a){let b=new Set;if(!a)return b;if(!Array.isArray(a)&&"function"==typeof a[Symbol.iterator]&&!(d(a)&&Array.isArray(a.combos))){for(let c of a){let a=e(c);a&&b.add(a)}return b}let c=d(a)&&Array.isArray(a.combos)?a.combos:[];for(let d of Array.isArray(a)?a:c){let a="string"==typeof d?e(d):e(d?.name);a&&b.add(a)}return b})(c.allCombos).has(a)||a===e(c.comboName))}function k(a){if("string"==typeof a)return e(a);if(!d(a)||"combo-ref"===a.kind)return null;let b=e(a.model);if(!b)return null;let c=e(a.providerId)||e(a.provider)||f(b);return g(b,c)}function l(a){return"string"==typeof a?f(a):d(a)&&"combo-ref"!==a.kind?e(a.providerId)||e(a.provider)||f(e(a.model)||""):null}function m(a,b={}){var c;let h,k=e(b.comboName),l="number"==typeof b.index?b.index:0;if("string"==typeof a){let c=e(a);if(!c)return null;if(j(c,null,b))return{id:i("combo-ref",k,l,c),kind:"combo-ref",comboName:c,weight:0};let d=f(c);return{id:i("model",k,l,c),kind:"model",model:c,...d?{providerId:d}:{},weight:0}}if(!d(a))return null;let n=e(a.id),o=Number.isFinite(h="number"==typeof(c=a.weight)?c:"string"==typeof c&&c.trim().length>0?Number(c):0)?Math.max(0,Math.min(100,h)):0,p=e(a.label);if("combo-ref"===a.kind){let b=e(a.comboName);return b?{id:n||i("combo-ref",k,l,b),kind:"combo-ref",comboName:b,weight:o,...p?{label:p}:{}}:null}let q=e(a.model);if(!q)return null;let r="model"===a.kind,s=e(a.providerId)||e(a.provider)||f(q);if(!r&&j(q,s,b))return{id:n||i("combo-ref",k,l,q),kind:"combo-ref",comboName:q,weight:o,...p?{label:p}:{}};let t=g(q,s),u=null===a.connectionId?null:e(a.connectionId)||void 0,v=Array.isArray(a.tags)?a.tags.map(a=>e(a)).filter(a=>!!a):void 0;return{id:n||i("model",k,l,u?`${t}:${u}`:t),kind:"model",model:t,...s?{providerId:s}:{},...void 0!==u?{connectionId:u}:{},weight:o,...p?{label:p}:{},...v&&v.length>0?{tags:v}:{}}}function n(a,b={}){let c=e(a.name);return{...a,version:2,models:function(a,b={}){return(Array.isArray(a)?a:[]).map((a,c)=>m(a,{...b,index:c})).filter(a=>null!==a)}(a.models,{comboName:c,allCombos:b.allCombos})}}c.d(b,{Bq:()=>l,Dx:()=>k,Sw:()=>m,zA:()=>n})},45415:(a,b,c)=>{c.r(b),c.d(b,{DATA_DIR:()=>H,DB_BACKUPS_DIR:()=>K,SQLITE_FILE:()=>I,cleanNulls:()=>S,closeDbInstance:()=>ah,getDbInstance:()=>ag,isBuildPhase:()=>G,isCloud:()=>F,objToSnake:()=>Q,resetDbInstance:()=>ai,rowToCamel:()=>R,runManagedDbHealthCheck:()=>af,toCamelCase:()=>P,toSnakeCase:()=>O});var d=c(87550),e=c.n(d),f=c(33873),g=c.n(f),h=c(29021),i=c.n(h),j=c(11256),k=c(1932);let l=function(){let a=process.env.OMNIROUTE_MIGRATIONS_DIR;if("string"==typeof a&&a.trim().length>0)return g().resolve(a);try{return g().join(g().dirname((0,k.fileURLToPath)("file:///home/runner/work/OmniRoute/OmniRoute/src/lib/db/migrationRunner.ts")),"migrations")}catch{}let b="file:///home/runner/work/OmniRoute/OmniRoute/src/lib/db/migrationRunner.ts";if("string"==typeof b&&b.startsWith("file://"))return g().join(g().dirname((0,k.fileURLToPath)(b)),"migrations");throw Error("[Migration] Could not resolve migrations directory. Set OMNIROUTE_MIGRATIONS_DIR.")}(),m=[{fromVersion:"022",fromName:"call_logs_summary_storage",toVersion:"025",toName:"call_logs_summary_storage"},{fromVersion:"028",fromName:"provider_connection_max_concurrent",toVersion:"029",toName:"provider_connection_max_concurrent"}],n=[{version:"028",tableName:"batches",description:"batches table"},{version:"024",tableName:"sync_tokens",description:"sync_tokens table"},{version:"022",tableName:"memory_fts",description:"memory_fts virtual table"},{version:"019",tableName:"context_handoffs",description:"context_handoffs table"},{version:"017",tableName:"version_manager",description:"version_manager table"},{version:"016",tableName:"skill_executions",description:"skill_executions table"},{version:"015",tableName:"memories",description:"memories table"},{version:"013",tableName:"quota_snapshots",description:"quota_snapshots table"},{version:"011",tableName:"webhooks",description:"webhooks table"},{version:"010",tableName:"model_combo_mappings",description:"model_combo_mappings table"},{version:"008",tableName:"registered_keys",description:"registered_keys table"},{version:"006",tableName:"request_detail_logs",description:"request_detail_logs table"},{version:"004",tableName:"proxy_registry",description:"proxy_registry table"},{version:"002",tableName:"mcp_tool_audit",description:"mcp_tool_audit table"}],o=["provider_connections","combos","call_logs"];function p(a,b){let c=a.prepare("SELECT name FROM sqlite_master WHERE type IN ('table', 'view') AND name = ?").get(b);return!!c?.name}function q(a,b,c,d){a.prepare(`PRAGMA table_info(${b})`).all().some(a=>a.name===c)||a.exec(d)}var r=c(20561);function s(a){return!!a&&"object"==typeof a&&!Array.isArray(a)}function t(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}function u(a,b){let c=a.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?").get(b);return c?.name===b}function v(a,b){let c=a.prepare("SELECT 1 AS ok FROM provider_connections WHERE id = ? LIMIT 1").get(b);return c?.ok===1}function w(a,b){return`[db-health:${b}] ${a}`}function x(a){if(!u(a,"quota_snapshots"))return[];let b=new Set;for(let d of a.prepare("SELECT id, provider, connection_id, created_at FROM quota_snapshots").all()){var c;let e=t(d.connection_id),f=!!e&&!v(a,e),g=!("string"==typeof(c=d.created_at)&&0!==c.trim().length&&!Number.isNaN(Date.parse(c)));(f||g)&&"number"==typeof d.id&&b.add(d.id)}return Array.from(b)}function y(a,b){if(!u(a,b))return 0;let c=a.prepare(`SELECT COUNT(*) AS count
1
+ "use strict";exports.id=45415,exports.ids=[45415],exports.modules={11256:(a,b,c)=>{c.d(b,{_3:()=>l,sm:()=>k,ys:()=>m});var d=c(33873),e=c.n(d),f=c(21820),g=c.n(f);let h="omniroute";function i(){try{return g().homedir()}catch{let a;return"string"==typeof(a=process.env.HOME||process.env.USERPROFILE)&&a.trim().length>0?e().resolve(a):g().tmpdir()}}function j(a){if("string"!=typeof a)return null;let b=a.trim();return b?e().resolve(b):null}function k(){return e().join(i(),`.${h}`)}function l({isCloud:a=!1}={}){if(a)return"/tmp";let b=j(process.env.DATA_DIR);if(b)return b;let c=i();if("win32"===process.platform){let a=process.env.APPDATA||e().join(c,"AppData","Roaming");return e().join(a,h)}let d=j(process.env.XDG_CONFIG_HOME);return d?e().join(d,h):k()}function m(a,b){if(!a||!b)return!1;let c=e().resolve(a),d=e().resolve(b);return"win32"===process.platform?c.toLowerCase()===d.toLowerCase():c===d}},12135:(a,b,c)=>{c.d(b,{Bn:()=>n,DL:()=>l,JQ:()=>q,LY:()=>o,TX:()=>i,Tw:()=>s,U$:()=>k,Zi:()=>j,ax:()=>r,jo:()=>p,tY:()=>m,x0:()=>h,xL:()=>g});var d=c(33873);let e=c.n(d)().join(process.cwd(),"logs","application","app.log");function f(a,b){if(!a)return b;let c=Number.parseInt(a,10);return Number.isInteger(c)&&c>0?c:b}function g(){return"false"!==process.env.APP_LOG_TO_FILE}function h(){return process.env.APP_LOG_FILE_PATH||e}function i(){var a=process.env.APP_LOG_MAX_FILE_SIZE;if(!a)return 0x3200000;let b=a.match(/^(\d+)\s*(k|m|g|kb|mb|gb)?$/i);if(!b)return 0x3200000;let c=parseInt(b[1],10);switch((b[2]||"").toLowerCase()){case"k":case"kb":return 1024*c;case"m":case"mb":return 1024*c*1024;case"g":case"gb":return 1024*c*1048576;default:return c}}function j(){return f(process.env.APP_LOG_RETENTION_DAYS,7)}function k(){return f(process.env.CALL_LOG_RETENTION_DAYS,7)}function l(){return f(process.env.APP_LOG_MAX_FILES,20)}function m(){return f(process.env.CALL_LOG_MAX_ENTRIES,1e4)}function n(){return f(process.env.CALL_LOGS_TABLE_MAX_ROWS,1e5)}function o(){return function(a,b){if(!a)return b;let c=a.trim().toLowerCase();return!!["1","true","yes","on"].includes(c)||!["0","false","no","off"].includes(c)&&b}(process.env.CALL_LOG_PIPELINE_CAPTURE_STREAM_CHUNKS,!0)}function p(){return 1024*f(process.env.CALL_LOG_PIPELINE_MAX_SIZE_KB,512)}function q(){return f(process.env.PROXY_LOGS_TABLE_MAX_ROWS,1e5)}function r(a){return process.env.APP_LOG_LEVEL||a}function s(a){return process.env.APP_LOG_FORMAT||a}},14067:(a,b,c)=>{c.d(b,{Lk:()=>i,Tl:()=>h,_D:()=>f,xm:()=>g});var d=c(46291);let e=new Set(["api_key","apiKey","api-key","authorization","Authorization","x-api-key","X-Api-Key","x-goog-api-key","access_token","accessToken","refresh_token","refreshToken","password","secret","token"]);function f(a){return null==a?a:"function"==typeof globalThis.structuredClone?globalThis.structuredClone(a):JSON.parse(JSON.stringify(a))}function g(a){if("string"!=typeof a)return a;let b=a.trim();if(!b)return"";try{return JSON.parse(b)}catch{return{_rawText:a}}}function h(a){return null==a?null:function a(b){if(!b||"object"!=typeof b)return b;if(Array.isArray(b))return b.map(a);let c={};for(let[d,f]of Object.entries(b))e.has(d)?c[d]="[REDACTED]":"string"==typeof f&&f.startsWith("Bearer ")?c[d]="Bearer [REDACTED]":"object"==typeof f&&null!==f?c[d]=a(f):c[d]=f;return c}(function a(b){if("string"==typeof b)return(0,d.or)(b).text;if(Array.isArray(b))return b.map(a);if(!b||"object"!=typeof b)return b;let c={};for(let[d,e]of Object.entries(b))c[d]=a(e);return c}(g(a)))}function i(a){if("string"!=typeof a||0===a.trim().length)return null;try{return JSON.parse(a)}catch{return{_rawText:a}}}},20561:(a,b,c)=>{function d(a){return!!a&&"object"==typeof a&&!Array.isArray(a)}function e(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}function f(a){let b=a.trim(),c=b.indexOf("/");if(c<=0)return null;let d=b.slice(0,c).trim();return d.length>0?d:null}function g(a,b){let c=a.trim();if(c.includes("/"))return c;let d=e(b);return d?`${d}/${c}`:c}function h(a){let b=a.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");return b.length>0?b:"step"}function i(a,b,c,d){return[h(b||"combo"),"combo-ref"===a?"ref":"model",String(c+1),h(d)].join("-").slice(0,200)}function j(a,b,c){return!b&&((function(a){let b=new Set;if(!a)return b;if(!Array.isArray(a)&&"function"==typeof a[Symbol.iterator]&&!(d(a)&&Array.isArray(a.combos))){for(let c of a){let a=e(c);a&&b.add(a)}return b}let c=d(a)&&Array.isArray(a.combos)?a.combos:[];for(let d of Array.isArray(a)?a:c){let a="string"==typeof d?e(d):e(d?.name);a&&b.add(a)}return b})(c.allCombos).has(a)||a===e(c.comboName))}function k(a){if("string"==typeof a)return e(a);if(!d(a)||"combo-ref"===a.kind)return null;let b=e(a.model);if(!b)return null;let c=e(a.providerId)||e(a.provider)||f(b);return g(b,c)}function l(a){return"string"==typeof a?f(a):d(a)&&"combo-ref"!==a.kind?e(a.providerId)||e(a.provider)||f(e(a.model)||""):null}function m(a,b={}){var c;let h,k=e(b.comboName),l="number"==typeof b.index?b.index:0;if("string"==typeof a){let c=e(a);if(!c)return null;if(j(c,null,b))return{id:i("combo-ref",k,l,c),kind:"combo-ref",comboName:c,weight:0};let d=f(c);return{id:i("model",k,l,c),kind:"model",model:c,...d?{providerId:d}:{},weight:0}}if(!d(a))return null;let n=e(a.id),o=Number.isFinite(h="number"==typeof(c=a.weight)?c:"string"==typeof c&&c.trim().length>0?Number(c):0)?Math.max(0,Math.min(100,h)):0,p=e(a.label);if("combo-ref"===a.kind){let b=e(a.comboName);return b?{id:n||i("combo-ref",k,l,b),kind:"combo-ref",comboName:b,weight:o,...p?{label:p}:{}}:null}let q=e(a.model);if(!q)return null;let r="model"===a.kind,s=e(a.providerId)||e(a.provider)||f(q);if(!r&&j(q,s,b))return{id:n||i("combo-ref",k,l,q),kind:"combo-ref",comboName:q,weight:o,...p?{label:p}:{}};let t=g(q,s),u=null===a.connectionId?null:e(a.connectionId)||void 0,v=Array.isArray(a.tags)?a.tags.map(a=>e(a)).filter(a=>!!a):void 0;return{id:n||i("model",k,l,u?`${t}:${u}`:t),kind:"model",model:t,...s?{providerId:s}:{},...void 0!==u?{connectionId:u}:{},weight:o,...p?{label:p}:{},...v&&v.length>0?{tags:v}:{}}}function n(a,b={}){let c=e(a.name);return{...a,version:2,models:function(a,b={}){return(Array.isArray(a)?a:[]).map((a,c)=>m(a,{...b,index:c})).filter(a=>null!==a)}(a.models,{comboName:c,allCombos:b.allCombos})}}c.d(b,{Bq:()=>l,Dx:()=>k,Sw:()=>m,zA:()=>n})},45415:(a,b,c)=>{c.r(b),c.d(b,{DATA_DIR:()=>H,DB_BACKUPS_DIR:()=>K,SQLITE_FILE:()=>I,cleanNulls:()=>S,closeDbInstance:()=>ah,getDbInstance:()=>ag,isBuildPhase:()=>G,isCloud:()=>F,objToSnake:()=>Q,resetDbInstance:()=>ai,rowToCamel:()=>R,runManagedDbHealthCheck:()=>af,toCamelCase:()=>P,toSnakeCase:()=>O});var d=c(87550),e=c.n(d),f=c(33873),g=c.n(f),h=c(29021),i=c.n(h),j=c(11256),k=c(1932);let l=function(){let a=process.env.OMNIROUTE_MIGRATIONS_DIR;if("string"==typeof a&&a.trim().length>0)return g().resolve(a);try{return g().join(g().dirname((0,k.fileURLToPath)("file:///home/runner/work/OmniRoute/OmniRoute/src/lib/db/migrationRunner.ts")),"migrations")}catch{}let b="file:///home/runner/work/OmniRoute/OmniRoute/src/lib/db/migrationRunner.ts";if("string"==typeof b&&b.startsWith("file://"))try{let a=decodeURIComponent(b.replace(/^file:\/\/\//,"/").replace(/^file:\/\//,""));return g().join(g().dirname(g().resolve(a)),"migrations")}catch{}let c=g().join(process.cwd(),"src","lib","db","migrations");if(i().existsSync(c))return c;let d=g().join(process.cwd(),"app","src","lib","db","migrations");if(i().existsSync(d))return d;throw Error("[Migration] Could not resolve migrations directory. Set OMNIROUTE_MIGRATIONS_DIR.")}(),m=[{fromVersion:"022",fromName:"call_logs_summary_storage",toVersion:"025",toName:"call_logs_summary_storage"},{fromVersion:"028",fromName:"provider_connection_max_concurrent",toVersion:"029",toName:"provider_connection_max_concurrent"}],n=[{version:"028",tableName:"batches",description:"batches table"},{version:"024",tableName:"sync_tokens",description:"sync_tokens table"},{version:"022",tableName:"memory_fts",description:"memory_fts virtual table"},{version:"019",tableName:"context_handoffs",description:"context_handoffs table"},{version:"017",tableName:"version_manager",description:"version_manager table"},{version:"016",tableName:"skill_executions",description:"skill_executions table"},{version:"015",tableName:"memories",description:"memories table"},{version:"013",tableName:"quota_snapshots",description:"quota_snapshots table"},{version:"011",tableName:"webhooks",description:"webhooks table"},{version:"010",tableName:"model_combo_mappings",description:"model_combo_mappings table"},{version:"008",tableName:"registered_keys",description:"registered_keys table"},{version:"006",tableName:"request_detail_logs",description:"request_detail_logs table"},{version:"004",tableName:"proxy_registry",description:"proxy_registry table"},{version:"002",tableName:"mcp_tool_audit",description:"mcp_tool_audit table"}],o=["provider_connections","combos","call_logs"];function p(a,b){let c=a.prepare("SELECT name FROM sqlite_master WHERE type IN ('table', 'view') AND name = ?").get(b);return!!c?.name}function q(a,b,c,d){a.prepare(`PRAGMA table_info(${b})`).all().some(a=>a.name===c)||a.exec(d)}var r=c(20561);function s(a){return!!a&&"object"==typeof a&&!Array.isArray(a)}function t(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}function u(a,b){let c=a.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?").get(b);return c?.name===b}function v(a,b){let c=a.prepare("SELECT 1 AS ok FROM provider_connections WHERE id = ? LIMIT 1").get(b);return c?.ok===1}function w(a,b){return`[db-health:${b}] ${a}`}function x(a){if(!u(a,"quota_snapshots"))return[];let b=new Set;for(let d of a.prepare("SELECT id, provider, connection_id, created_at FROM quota_snapshots").all()){var c;let e=t(d.connection_id),f=!!e&&!v(a,e),g=!("string"==typeof(c=d.created_at)&&0!==c.trim().length&&!Number.isNaN(Date.parse(c)));(f||g)&&"number"==typeof d.id&&b.add(d.id)}return Array.from(b)}function y(a,b){if(!u(a,b))return 0;let c=a.prepare(`SELECT COUNT(*) AS count
2
2
  FROM ${b}
3
3
  WHERE api_key_id NOT IN (SELECT id FROM api_keys)`).get();return c?.count||0}function z(a,b){return u(a,b)?a.prepare(`DELETE FROM ${b} WHERE api_key_id NOT IN (SELECT id FROM api_keys)`).run().changes:0}function A(a,b,c){if(!u(a,b))return 0;let d=a.prepare(`SELECT ${c} FROM ${b}`).all(),e=0;for(let a of d){let b=a[c];if(null!=b||"options"!==c){if("string"!=typeof b){e+=1;continue}try{JSON.parse(b)}catch{e+=1}}}return e}function B(a,b,c){if(!u(a,b))return 0;let d=a.prepare(`SELECT rowid, ${c} FROM ${b}`).all(),e=a.prepare(`DELETE FROM ${b} WHERE rowid = ?`),f=a.prepare("UPDATE domain_circuit_breakers SET options = NULL WHERE rowid = ?"),g=0;for(let a of d){let d=a[c];if(null!=d||"domain_circuit_breakers"!==b){if("string"!=typeof d){if("domain_circuit_breakers"===b){g+=f.run(a.rowid).changes;continue}e.run(a.rowid),g+=1;continue}try{JSON.parse(d)}catch{if("domain_circuit_breakers"===b){g+=f.run(a.rowid).changes;continue}e.run(a.rowid),g+=1}}}return g}function C(a,b={}){let c=!0===b.autoRepair,d=b.expectedSchemaVersion||"1",e=new Date().toISOString(),f=[],g=0,h=!1,i=!1,j=()=>{c&&!i&&"function"==typeof b.createBackupBeforeRepair&&(i=!0,h=b.createBackupBeforeRepair())},k=a.pragma("integrity_check");if(k[0]?.integrity_check!=="ok"&&f.push({type:"integrity_check_failed",table:"sqlite",description:"SQLite integrity_check returned a non-ok status.",count:1}),u(a,"combos")){let b=a.prepare("SELECT id, name, data, sort_order, created_at, updated_at FROM combos ORDER BY name COLLATE NOCASE ASC").all(),d=function(a,b,c,d){if(0===b.length)return{issueCount:0,repairedCount:0};let e=new Set(b.map(a=>a.name)),f=0,g=0,h=a.prepare("UPDATE combos SET data = ?, updated_at = ? WHERE id = ?");for(let j of b){var i;let b=function(a){try{let b=JSON.parse(a);return s(b)?b:null}catch{return null}}(j.data);if(!b){if(f+=1,d.autoRepair){let a={id:j.id,name:j.name,version:2,strategy:"priority",models:[],config:{},isActive:!1,isHidden:!1,sortOrder:"number"==typeof j.sort_order?j.sort_order:0,createdAt:j.created_at||c,updatedAt:c,repairNote:w("Combo payload was rebuilt after invalid JSON was detected.",c)};h.run(JSON.stringify(a),c,j.id),g+=1}continue}let k=Array.isArray(i=b.models)?i:[];if(0===k.length)continue;let l=[],m=0,n=0,o=0;for(let[b,c]of k.entries()){if(!s(c)){if("string"==typeof c){let a=(0,r.Sw)(c,{comboName:j.name,index:b,allCombos:e});if(a?.kind==="combo-ref"){if(a.comboName===j.name||!e.has(a.comboName)){m+=1;continue}l.push(a),o+=1;continue}}l.push(c);continue}if("combo-ref"===c.kind){let a=t(c.comboName);if(!a||a===j.name||!e.has(a)){m+=1;continue}l.push(c);continue}let d=t(c.connectionId);if(d&&!v(a,d)){let a={...c};delete a.connectionId,l.push(a),n+=1;continue}l.push(c)}if(0===m&&0===n&&0===o||(f+=m+n+o,!d.autoRepair))continue;let p={...b,models:l,updatedAt:c,repairNote:w([m>0?`${m} broken combo step(s) removed.`:null,n>0?`${n} missing connection pin(s) cleared.`:null,o>0?`${o} legacy combo ref step(s) canonicalized.`:null].filter(Boolean).join(" "),c),...0===l.length?{isActive:!1}:{}};h.run(JSON.stringify(p),c,j.id),g+=m+n+o}return{issueCount:f,repairedCount:g}}(a,b,e,{autoRepair:c});d.issueCount>0&&(f.push({type:"broken_reference",table:"combos",description:"Combos contained broken combo references, legacy combo refs, invalid JSON, or pinned connections that no longer exist.",count:d.issueCount}),c&&(j(),g+=d.repairedCount))}let l=x(a).length;l>0&&(f.push({type:"stale_snapshot",table:"quota_snapshots",description:"Quota snapshots referenced missing connections or contained invalid timestamps.",count:l}),c&&(j(),g+=function(a){if(!u(a,"quota_snapshots"))return 0;let b=x(a);if(0===b.length)return 0;let c=a.prepare("DELETE FROM quota_snapshots WHERE id = ?"),d=0;for(let a of b)d+=c.run(a).changes;return d}(a)));let m=y(a,"domain_budgets");m>0&&(f.push({type:"broken_reference",table:"domain_budgets",description:"Domain budgets referenced API keys that no longer exist.",count:m}),c&&(j(),g+=z(a,"domain_budgets")));let n=y(a,"domain_cost_history");n>0&&(f.push({type:"broken_reference",table:"domain_cost_history",description:"Domain cost history referenced API keys that no longer exist.",count:n}),c&&(j(),g+=z(a,"domain_cost_history")));let o=A(a,"domain_fallback_chains","chain");o>0&&(f.push({type:"invalid_state",table:"domain_fallback_chains",description:"Fallback chain rows contained invalid JSON payloads.",count:o}),c&&(j(),g+=B(a,"domain_fallback_chains","chain")));let p=A(a,"domain_lockout_state","attempts");p>0&&(f.push({type:"invalid_state",table:"domain_lockout_state",description:"Lockout state rows contained invalid JSON payloads.",count:p}),c&&(j(),g+=B(a,"domain_lockout_state","attempts")));let q=A(a,"domain_circuit_breakers","options");q>0&&(f.push({type:"invalid_state",table:"domain_circuit_breakers",description:"Circuit breaker option payloads were invalid JSON.",count:q}),c&&(j(),g+=B(a,"domain_circuit_breakers","options")));let D=function(a,b){if(!u(a,"db_meta"))return 0;let c=a.prepare("SELECT value FROM db_meta WHERE key = 'schema_version'").get();return+(("string"==typeof c?.value?c.value:null)!==b)}(a,d);D>0&&(f.push({type:"invalid_state",table:"db_meta",description:`db_meta.schema_version did not match expected version ${d}.`,count:D}),c)&&(j(),g+=u(a,"db_meta")?a.prepare("INSERT OR REPLACE INTO db_meta (key, value) VALUES ('schema_version', ?)").run(d).changes:0);return{isHealthy:0===f.length,issues:f,repairedCount:g,backupCreated:h,autoRepair:c,checkedAt:e}}var D=c(14067),E=c(93907);let F="object"==typeof globalThis.caches&&null!==globalThis.caches,G="phase-production-build"===process.env.NEXT_PHASE,H=(0,j._3)({isCloud:F});F||(0,j.sm)();let I=F?null:g().join(H,"storage.sqlite"),J=F?null:g().join(H,"db.json"),K=F?null:g().join(H,"db_backups"),L=new Set(["syncedAvailableModels","providerLimitsCache","lkgp"]),M=[{table:"key_value",maxRows:1e4,readRows:a=>(a.prepare("SELECT namespace, key, value FROM key_value").all()??[]).filter(a=>"string"!=typeof a.namespace||!L.has(a.namespace))},{table:"provider_connections",maxRows:5e3},{table:"provider_nodes",maxRows:5e3},{table:"combos",maxRows:5e3},{table:"api_keys",maxRows:5e3},{table:"proxy_registry",maxRows:5e3},{table:"proxy_assignments",maxRows:1e4},{table:"model_combo_mappings",maxRows:5e3},{table:"sync_tokens",maxRows:5e3},{table:"registered_keys",maxRows:1e4},{table:"provider_key_limits",maxRows:1e4},{table:"account_key_limits",maxRows:1e4},{table:"upstream_proxy_config",maxRows:5e3},{table:"webhooks",maxRows:5e3}];if(!F&&!i().existsSync(H))try{i().mkdirSync(H,{recursive:!0})}catch(b){let a=b instanceof Error?b.message:String(b);console.warn(`[DB] Cannot create data directory '${H}': ${a}
4
4
  [DB] Set the DATA_DIR environment variable to a writable path, e.g.:
@@ -0,0 +1 @@
1
+ "use strict";exports.id=55672,exports.ids=[55672],exports.modules={6689:(a,b,c)=>{c.d(b,{AN:()=>h,D:()=>f,h$:()=>g});let d=new Map,e=new Map;function f(a){let b=[...a];for(let a=b.length-1;a>0;a--){let c=Math.floor(Math.random()*(a+1)),d=b[a];b[a]=b[c],b[c]=d}return b}async function g(a,b){let c;if(0===b.length)return"";if(1===b.length)return b[0];let g=e.get(a)??Promise.resolve();e.set(a,new Promise(a=>{c=a}));try{await g;let c=[...b].sort().join(","),e=d.get(a);if(e&&e.idsKey===c&&e.index<e.order.length){let b=e.order[e.index];return d.set(a,{...e,index:e.index+1}),b}let h=e&&e.idsKey===c&&e.order.length>0?e.order[e.order.length-1]:void 0,i=f(b);if(void 0!==h&&i[0]===h&&i.length>1){let a=1+Math.floor(Math.random()*(i.length-1)),b=i[0];i[0]=i[a],i[a]=b}return d.set(a,{order:i,index:1,idsKey:c}),i[0]}finally{c?.()}}function h(a,b){if(0===b.length)return"";if(1===b.length)return b[0];let c=[...b].sort().join(","),e=d.get(a);if(e&&e.idsKey===c&&e.index<e.order.length){let b=e.order[e.index];return d.set(a,{...e,index:e.index+1}),b}let g=e&&e.idsKey===c&&e.order.length>0?e.order[e.order.length-1]:void 0,h=f(b);if(void 0!==g&&h[0]===g&&h.length>1){let a=1+Math.floor(Math.random()*(h.length-1)),b=h[0];h[0]=h[a],h[a]=b}return d.set(a,{order:h,index:1,idsKey:c}),h[0]}},44963:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{AF:()=>k,of:()=>m,u9:()=>j});var e=c(33364),f=c(69829),g=a([e,f]);[e,f]=g.then?(await g)():g;let m=process.env.CLOUD_URL||"",n=Number(process.env.CLOUD_SYNC_TIMEOUT_MS||12e3);function h(a){return a&&"object"==typeof a&&!Array.isArray(a)?a:{}}function i(a){if("string"==typeof a||"number"==typeof a||a instanceof Date){let b=new Date(a).getTime();return Number.isFinite(b)?b:0}return 0}async function j(a,b={},c=n){let d=new AbortController,e=setTimeout(()=>d.abort(),c);try{return await fetch(a,{...b,signal:d.signal})}finally{clearTimeout(e)}}async function k(a,b=null){let c;if(!m)return{error:"NEXT_PUBLIC_CLOUD_URL is not configured"};let{version:d,bundle:e}=await (0,f.k0)(),g=(0,f.FB)(e);try{c=await j(`${m}/sync/${a}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...g,version:d})})}catch(a){return{error:a?.name==="AbortError"?"Cloud sync timeout":"Cloud sync request failed"}}if(!c.ok){let a=await c.text(),b=a.length>200?a.slice(0,200)+"…":a;return console.log(`Cloud sync failed (${c.status}):`,b),{error:"Cloud sync failed"}}let h=await c.json();h.data&&h.data.providers&&await l(h.data.providers);let i={success:!0,message:"Synced successfully",changes:h.changes,version:d};return b&&(i.createdKey=b),i}async function l(a){let b=h(a);for(let a of(await (0,e.getProviderConnections)())){var c;let d=h(a),f=(c=d.id,"string"==typeof c&&c.trim().length>0?c:null);if(!f)continue;let g=h(b[f]);if(0===Object.keys(g).length)continue;let j=i(g.updatedAt),k=i(d.updatedAt);if(j>k){let a={accessToken:g.accessToken,refreshToken:g.refreshToken,expiresAt:g.expiresAt,expiresIn:g.expiresIn,providerSpecificData:g.providerSpecificData||d.providerSpecificData,testStatus:g.status||"active",lastError:g.lastError,lastErrorAt:g.lastErrorAt,errorCode:g.errorCode,rateLimitedUntil:g.rateLimitedUntil,updatedAt:g.updatedAt};await (0,e.rjy)(f,a)}}}d()}catch(a){d(a)}})},47293:(a,b,c)=>{c.d(b,{A:()=>f});let d=new Uint8Array(16);var e=c(50122);let f=function(a,b,c){return b||a||!crypto.randomUUID?function(a,b,c){let f=(a=a||{}).random??a.rng?.()??crypto.getRandomValues(d);if(f.length<16)throw Error("Random bytes length must be >= 16");if(f[6]=15&f[6]|64,f[8]=63&f[8]|128,b){if((c=c||0)<0||c+16>b.length)throw RangeError(`UUID byte range ${c}:${c+15} is out of buffer bounds`);for(let a=0;a<16;++a)b[c+a]=f[a];return b}return(0,e.k)(f)}(a,b,c):crypto.randomUUID()}},50122:(a,b,c)=>{c.d(b,{k:()=>e});let d=[];for(let a=0;a<256;++a)d.push((a+256).toString(16).slice(1));function e(a,b=0){return(d[a[b+0]]+d[a[b+1]]+d[a[b+2]]+d[a[b+3]]+"-"+d[a[b+4]]+d[a[b+5]]+"-"+d[a[b+6]]+d[a[b+7]]+"-"+d[a[b+8]]+d[a[b+9]]+"-"+d[a[b+10]]+d[a[b+11]]+d[a[b+12]]+d[a[b+13]]+d[a[b+14]]+d[a[b+15]]).toLowerCase()}},63904:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{x:()=>h});var e=c(9415),f=c(72671),g=a([e]);async function h(a){if(!await (0,e.ux)()||await (0,e.Iz)(a))return null;let b=a.headers.get("authorization"),c="string"==typeof b&&b.trim().toLowerCase().startsWith("bearer ");return(0,f.W)({status:c?403:401,message:c?"Invalid management token":"Authentication required",type:"invalid_request"})}e=(g.then?(await g)():g)[0],d()}catch(a){d(a)}})},69829:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{FB:()=>m,k0:()=>l});var e=c(55511),f=c(33364),g=a([f]);function h(a){return a&&"object"==typeof a&&!Array.isArray(a)?a:{}}function i(a,b){return[...a].sort((a,c)=>{for(let d of b){let b=a[d],e=c[d];if("number"==typeof b||"number"==typeof e){let a="number"==typeof b?b:Number.MAX_SAFE_INTEGER,c="number"==typeof e?e:Number.MAX_SAFE_INTEGER;if(a!==c)return a-c;continue}let f="string"==typeof b?String(b):"",g="string"==typeof e?String(e):"",h=f.localeCompare(g,void 0,{numeric:!0});if(0!==h)return h}return 0})}function j(a,b){return Object.fromEntries(b.filter(b=>void 0!==a[b]).map(b=>[b,a[b]]))}async function k(){let[a,b,c,d,e,g]=await Promise.all([(0,f.getSettings)(),(0,f.getProviderConnections)(),(0,f.FhY)(),(0,f.OMz)(),(0,f.getCombos)(),(0,f.PXR)()]);return{settings:function(a){let{password:b,requireLogin:c,cloudEnabled:d,...e}=h(a);return e}(a),providerConnections:i(b.map(a=>{let b;return b=h(a),j(b,["id","provider","authType","name","displayName","email","priority","globalPriority","defaultModel","isActive","accessToken","refreshToken","expiresAt","expiresIn","tokenType","scope","idToken","projectId","apiKey","providerSpecificData","group"])}),["provider","name","id"]),providerNodes:i(c.map(a=>{let b;return b=h(a),j(b,["id","type","name","prefix","apiType","baseUrl","chatPath","modelsPath"])}),["type","name","id"]),modelAliases:h(d),combos:i(e.map(a=>(function(a){let{createdAt:b,updatedAt:c,...d}=h(a);return d})(a)),["sortOrder","name","id"]),apiKeys:i(g.map(a=>{let b;return b=h(a),j(b,["id","name","key","machineId","allowedModels","allowedConnections","noLog","autoResolve","isActive","accessSchedule","maxRequestsPerDay","maxRequestsPerMinute","maxSessions"])}),["name","id"])}}async function l(){let a=await k();return{version:(0,e.createHash)("sha256").update(JSON.stringify(function a(b){return Array.isArray(b)?b.map(b=>a(b)):b&&"object"==typeof b?Object.fromEntries(Object.keys(b).sort((a,b)=>a.localeCompare(b)).map(c=>[c,a(b[c])])):b}(a))).digest("hex"),bundle:a}}function m(a){return{providers:a.providerConnections,providerNodes:a.providerNodes,modelAliases:a.modelAliases,combos:a.combos,apiKeys:a.apiKeys,settings:a.settings}}f=(g.then?(await g)():g)[0],d()}catch(a){d(a)}})},72671:(a,b,c)=>{c.d(b,{Q:()=>f,W:()=>e});var d=c(55511);function e(a){let b=(0,d.randomUUID)(),c=a.type||(a.status>=500?"server_error":404===a.status?"not_found":409===a.status?"conflict":"invalid_request");return Response.json({error:{message:a.message,type:c,details:a.details},requestId:b},{status:a.status})}function f(a,b="Unexpected server error"){return e({status:Number(a?.status)||500,message:"string"==typeof a?.message?a.message:b,type:a?.type,details:a?.details})}},86657:(a,b,c)=>{c.d(b,{X:()=>h});var d=c(24166);function e(a){return!!a&&"object"==typeof a&&!Array.isArray(a)}function f(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}function g(a){return{success:!1,error:{message:"Invalid composite tiers",details:a}}}function h(a){if(!e(a.config))return{success:!0};let b=a.config.compositeTiers;if(null==b)return{success:!0};if(!e(b))return g([{field:"config.compositeTiers",message:"compositeTiers must be an object"}]);let c=f(b.defaultTier),h=e(b.tiers)?b.tiers:null,i=[];if(c||i.push({field:"config.compositeTiers.defaultTier",message:"defaultTier is required"}),!h||0===Object.keys(h).length)return i.push({field:"config.compositeTiers.tiers",message:"tiers must define at least one tier"}),g(i);let j=new Set((0,d.En)(a.models,{comboName:f(a.name)}).map(a=>f(a.id)).filter(a=>!!a)),k=new Map,l=new Map;for(let[a,b]of Object.entries(h)){let c=f(a),d=`config.compositeTiers.tiers.${a}`;if(!c){i.push({field:d,message:"tier name must be a non-empty string"});continue}if(!e(b)){i.push({field:d,message:"tier config must be an object"});continue}let g=f(b.stepId),h=f(b.fallbackTier);if(!g){i.push({field:`${d}.stepId`,message:"stepId is required"});continue}j.has(g)||i.push({field:`${d}.stepId`,message:`stepId "${g}" does not exist in combo.models`});let m=l.get(g);m&&m!==c?i.push({field:`${d}.stepId`,message:`stepId "${g}" is already assigned to tier "${m}"`}):l.set(g,c),h&&h===c&&i.push({field:`${d}.fallbackTier`,message:"fallbackTier cannot reference the same tier"}),k.set(c,{stepId:g,fallbackTier:h})}for(let[a,b]of(c&&!k.has(c)&&i.push({field:"config.compositeTiers.defaultTier",message:`defaultTier "${c}" does not exist in tiers`}),k.entries()))b.fallbackTier&&!k.has(b.fallbackTier)&&i.push({field:`config.compositeTiers.tiers.${a}.fallbackTier`,message:`fallbackTier "${b.fallbackTier}" does not exist in tiers`});let m=new Map;for(let a of k.keys())!function a(b,c){let d=m.get(b);if("visited"===d)return;if("visiting"===d)return void i.push({field:`config.compositeTiers.tiers.${b}.fallbackTier`,message:`fallbackTier cycle detected: ${[...c,b].join(" -> ")}`});m.set(b,"visiting");let e=k.get(b)?.fallbackTier;e&&k.has(e)&&a(e,[...c,b]),m.set(b,"visited")}(a,[]);return i.length>0?g(i):{success:!0}}},90357:(a,b,c)=>{c.d(b,{Xj:()=>f});var d=c(79646),e=c(29021);async function f(a=null){let b=a||process.env.MACHINE_ID_SALT||"endpoint-proxy-salt";try{let a=function(){try{if("win32"!==process.platform)throw Error("Not Windows");let a=process.env.SystemRoot||process.env.windir||"C:\\Windows",b=`${a}\\System32\\REG.exe`;if((0,e.existsSync)(b)){let a=(0,d.execFileSync)(b,["QUERY","HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography","/v","MachineGuid"],{encoding:"utf8",timeout:5e3}),c=a.split("REG_SZ")[1]?.replace(/\r+|\n+|\s+/gi,"")?.toLowerCase();if(c&&c.length>8)return c}}catch{}try{if("darwin"!==process.platform)throw Error("Not macOS");let a=(0,d.execSync)("ioreg -rd1 -c IOPlatformExpertDevice",{encoding:"utf8",timeout:5e3});if(a.includes("IOPlatformUUID")){let b=a.split("IOPlatformUUID")[1]?.split("\n")[0]?.replace(/=|\s+|"/gi,"")?.toLowerCase();if(b&&b.length>8)return b}}catch{}try{for(let a of["/etc/machine-id","/var/lib/dbus/machine-id"])try{let b=(0,e.readFileSync)(a,"utf8").trim().toLowerCase();if(b.length>8)return b}catch{}}catch{}try{let a=(0,d.execSync)("hostname",{encoding:"utf8",timeout:5e3}).trim().toLowerCase();if(a)return a}catch{}try{return c(21820).hostname().toLowerCase()}catch{}return"unknown-machine"}();return(await Promise.resolve().then(c.t.bind(c,55511,23))).createHash("sha256").update(a+b).digest("hex").substring(0,16)}catch(a){console.log("Error getting machine ID:",a);try{return(await Promise.resolve().then(c.t.bind(c,55511,23))).randomUUID()}catch{return"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)})}}}}};