omniroute 1.3.1 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (658) hide show
  1. package/app/.next/BUILD_ID +1 -1
  2. package/app/.next/app-path-routes-manifest.json +28 -27
  3. package/app/.next/build-manifest.json +2 -2
  4. package/app/.next/prerender-manifest.json +27 -3
  5. package/app/.next/routes-manifest.json +6 -0
  6. package/app/.next/server/app/(dashboard)/dashboard/analytics/page.js +1 -1
  7. package/app/.next/server/app/(dashboard)/dashboard/analytics/page.js.nft.json +1 -1
  8. package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  9. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page.js +2 -0
  10. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page.js.nft.json +1 -0
  11. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -0
  12. package/app/.next/server/app/(dashboard)/dashboard/audit-log/page.js +1 -1
  13. package/app/.next/server/app/(dashboard)/dashboard/audit-log/page.js.nft.json +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/audit-log/page_client-reference-manifest.js +1 -1
  15. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
  16. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  17. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  18. package/app/.next/server/app/(dashboard)/dashboard/combos/page.js +1 -1
  19. package/app/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  20. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  21. package/app/.next/server/app/(dashboard)/dashboard/costs/page.js +1 -1
  22. package/app/.next/server/app/(dashboard)/dashboard/costs/page.js.nft.json +1 -1
  23. package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
  24. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
  25. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  26. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  27. package/app/.next/server/app/(dashboard)/dashboard/health/page.js +1 -1
  28. package/app/.next/server/app/(dashboard)/dashboard/health/page.js.nft.json +1 -1
  29. package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
  30. package/app/.next/server/app/(dashboard)/dashboard/limits/page.js +1 -1
  31. package/app/.next/server/app/(dashboard)/dashboard/limits/page.js.nft.json +1 -1
  32. package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
  33. package/app/.next/server/app/(dashboard)/dashboard/logs/page.js +1 -1
  34. package/app/.next/server/app/(dashboard)/dashboard/logs/page.js.nft.json +1 -1
  35. package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
  36. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page.js +1 -1
  37. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page.js.nft.json +1 -1
  38. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
  39. package/app/.next/server/app/(dashboard)/dashboard/page.js +1 -1
  40. package/app/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  41. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  42. package/app/.next/server/app/(dashboard)/dashboard/profile/page.js +1 -1
  43. package/app/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  44. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  45. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +1 -1
  46. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  47. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  48. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
  49. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  50. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  51. package/app/.next/server/app/(dashboard)/dashboard/providers/page.js +1 -1
  52. package/app/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  53. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  54. package/app/.next/server/app/(dashboard)/dashboard/settings/page.js +1 -1
  55. package/app/.next/server/app/(dashboard)/dashboard/settings/page.js.nft.json +1 -1
  56. package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
  57. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page.js +1 -1
  58. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page.js.nft.json +1 -1
  59. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  60. package/app/.next/server/app/(dashboard)/dashboard/translator/page.js +1 -1
  61. package/app/.next/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  62. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  63. package/app/.next/server/app/(dashboard)/dashboard/usage/page.js +1 -1
  64. package/app/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  65. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  66. package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  67. package/app/.next/server/app/_global-error.html +2 -2
  68. package/app/.next/server/app/_global-error.rsc +1 -1
  69. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  70. package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  71. package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  72. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  73. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  74. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  75. package/app/.next/server/app/_not-found/page.js +1 -1
  76. package/app/.next/server/app/_not-found/page.js.nft.json +1 -1
  77. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  78. package/app/.next/server/app/_not-found.html +1 -1
  79. package/app/.next/server/app/_not-found.rsc +3 -3
  80. package/app/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  81. package/app/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  82. package/app/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  83. package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  84. package/app/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  85. package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  86. package/app/.next/server/app/api/auth/login/route.js +1 -1
  87. package/app/.next/server/app/api/auth/login/route.js.nft.json +1 -1
  88. package/app/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  89. package/app/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  90. package/app/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  91. package/app/.next/server/app/api/cache/route_client-reference-manifest.js +1 -1
  92. package/app/.next/server/app/api/cache/stats/route_client-reference-manifest.js +1 -1
  93. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  94. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  95. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -1
  96. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js +2 -2
  97. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -1
  98. package/app/.next/server/app/api/cli-tools/backups/route.js +1 -1
  99. package/app/.next/server/app/api/cli-tools/backups/route_client-reference-manifest.js +1 -1
  100. package/app/.next/server/app/api/cli-tools/claude-settings/route.js +1 -1
  101. package/app/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -1
  102. package/app/.next/server/app/api/cli-tools/cline-settings/route.js +2 -2
  103. package/app/.next/server/app/api/cli-tools/cline-settings/route_client-reference-manifest.js +1 -1
  104. package/app/.next/server/app/api/cli-tools/codex-profiles/route.js +2 -2
  105. package/app/.next/server/app/api/cli-tools/codex-profiles/route_client-reference-manifest.js +1 -1
  106. package/app/.next/server/app/api/cli-tools/codex-settings/route.js +2 -2
  107. package/app/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -1
  108. package/app/.next/server/app/api/cli-tools/droid-settings/route.js +2 -2
  109. package/app/.next/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -1
  110. package/app/.next/server/app/api/cli-tools/guide-settings/[toolId]/route_client-reference-manifest.js +1 -1
  111. package/app/.next/server/app/api/cli-tools/kilo-settings/route.js +1 -1
  112. package/app/.next/server/app/api/cli-tools/kilo-settings/route_client-reference-manifest.js +1 -1
  113. package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js +1 -1
  114. package/app/.next/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -1
  115. package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route.js +2 -2
  116. package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route_client-reference-manifest.js +1 -1
  117. package/app/.next/server/app/api/cli-tools/status/route.js +1 -1
  118. package/app/.next/server/app/api/cli-tools/status/route_client-reference-manifest.js +1 -1
  119. package/app/.next/server/app/api/cloud/auth/route.js +1 -1
  120. package/app/.next/server/app/api/cloud/auth/route.js.nft.json +1 -1
  121. package/app/.next/server/app/api/cloud/auth/route_client-reference-manifest.js +1 -1
  122. package/app/.next/server/app/api/cloud/credentials/update/route.js +1 -1
  123. package/app/.next/server/app/api/cloud/credentials/update/route.js.nft.json +1 -1
  124. package/app/.next/server/app/api/cloud/credentials/update/route_client-reference-manifest.js +1 -1
  125. package/app/.next/server/app/api/cloud/model/resolve/route.js +1 -1
  126. package/app/.next/server/app/api/cloud/model/resolve/route.js.nft.json +1 -1
  127. package/app/.next/server/app/api/cloud/model/resolve/route_client-reference-manifest.js +1 -1
  128. package/app/.next/server/app/api/cloud/models/alias/route.js +1 -1
  129. package/app/.next/server/app/api/cloud/models/alias/route.js.nft.json +1 -1
  130. package/app/.next/server/app/api/cloud/models/alias/route_client-reference-manifest.js +1 -1
  131. package/app/.next/server/app/api/combos/[id]/route.js +1 -1
  132. package/app/.next/server/app/api/combos/[id]/route.js.nft.json +1 -1
  133. package/app/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -1
  134. package/app/.next/server/app/api/combos/metrics/route_client-reference-manifest.js +1 -1
  135. package/app/.next/server/app/api/combos/route.js +1 -1
  136. package/app/.next/server/app/api/combos/route.js.nft.json +1 -1
  137. package/app/.next/server/app/api/combos/route_client-reference-manifest.js +1 -1
  138. package/app/.next/server/app/api/combos/test/route.js +1 -1
  139. package/app/.next/server/app/api/combos/test/route.js.nft.json +1 -1
  140. package/app/.next/server/app/api/combos/test/route_client-reference-manifest.js +1 -1
  141. package/app/.next/server/app/api/compliance/audit-log/route_client-reference-manifest.js +1 -1
  142. package/app/.next/server/app/api/db-backups/export/route_client-reference-manifest.js +1 -1
  143. package/app/.next/server/app/api/db-backups/exportAll/route_client-reference-manifest.js +1 -1
  144. package/app/.next/server/app/api/db-backups/import/route.js +1 -1
  145. package/app/.next/server/app/api/db-backups/import/route.js.nft.json +1 -1
  146. package/app/.next/server/app/api/db-backups/import/route_client-reference-manifest.js +1 -1
  147. package/app/.next/server/app/api/db-backups/route.js +1 -1
  148. package/app/.next/server/app/api/db-backups/route.js.nft.json +1 -1
  149. package/app/.next/server/app/api/db-backups/route_client-reference-manifest.js +1 -1
  150. package/app/.next/server/app/api/evals/[suiteId]/route_client-reference-manifest.js +1 -1
  151. package/app/.next/server/app/api/evals/route_client-reference-manifest.js +1 -1
  152. package/app/.next/server/app/api/fallback/chains/route_client-reference-manifest.js +1 -1
  153. package/app/.next/server/app/api/init/route.js +1 -1
  154. package/app/.next/server/app/api/init/route.js.nft.json +1 -1
  155. package/app/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  156. package/app/.next/server/app/api/keys/[id]/route.js +1 -1
  157. package/app/.next/server/app/api/keys/[id]/route.js.nft.json +1 -1
  158. package/app/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -1
  159. package/app/.next/server/app/api/keys/route.js +1 -1
  160. package/app/.next/server/app/api/keys/route.js.nft.json +1 -1
  161. package/app/.next/server/app/api/keys/route_client-reference-manifest.js +1 -1
  162. package/app/.next/server/app/api/logs/console/route_client-reference-manifest.js +1 -1
  163. package/app/.next/server/app/api/models/alias/route.js +1 -1
  164. package/app/.next/server/app/api/models/alias/route.js.nft.json +1 -1
  165. package/app/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -1
  166. package/app/.next/server/app/api/models/availability/route_client-reference-manifest.js +1 -1
  167. package/app/.next/server/app/api/models/catalog/route.js +2 -2
  168. package/app/.next/server/app/api/models/catalog/route.js.nft.json +1 -1
  169. package/app/.next/server/app/api/models/catalog/route_client-reference-manifest.js +1 -1
  170. package/app/.next/server/app/api/models/route.js +2 -2
  171. package/app/.next/server/app/api/models/route.js.nft.json +1 -1
  172. package/app/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  173. package/app/.next/server/app/api/monitoring/health/route.js +2 -2
  174. package/app/.next/server/app/api/monitoring/health/route.js.nft.json +1 -1
  175. package/app/.next/server/app/api/monitoring/health/route_client-reference-manifest.js +1 -1
  176. package/app/.next/server/app/api/oauth/[provider]/[action]/route.js +2 -2
  177. package/app/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  178. package/app/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -1
  179. package/app/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -1
  180. package/app/.next/server/app/api/oauth/cursor/import/route.js +1 -1
  181. package/app/.next/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  182. package/app/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -1
  183. package/app/.next/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -1
  184. package/app/.next/server/app/api/oauth/kiro/import/route.js +1 -1
  185. package/app/.next/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  186. package/app/.next/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -1
  187. package/app/.next/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -1
  188. package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  189. package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  190. package/app/.next/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -1
  191. package/app/.next/server/app/api/policies/route_client-reference-manifest.js +1 -1
  192. package/app/.next/server/app/api/pricing/defaults/route_client-reference-manifest.js +1 -1
  193. package/app/.next/server/app/api/pricing/models/route.js +1 -1
  194. package/app/.next/server/app/api/pricing/models/route.js.nft.json +1 -1
  195. package/app/.next/server/app/api/pricing/models/route_client-reference-manifest.js +1 -1
  196. package/app/.next/server/app/api/pricing/route.js +1 -1
  197. package/app/.next/server/app/api/pricing/route.js.nft.json +1 -1
  198. package/app/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -1
  199. package/app/.next/server/app/api/provider-metrics/route_client-reference-manifest.js +1 -1
  200. package/app/.next/server/app/api/provider-models/route.js +1 -1
  201. package/app/.next/server/app/api/provider-models/route.js.nft.json +1 -1
  202. package/app/.next/server/app/api/provider-models/route_client-reference-manifest.js +1 -1
  203. package/app/.next/server/app/api/provider-nodes/[id]/route.js +1 -1
  204. package/app/.next/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  205. package/app/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -1
  206. package/app/.next/server/app/api/provider-nodes/route.js +2 -2
  207. package/app/.next/server/app/api/provider-nodes/route.js.nft.json +1 -1
  208. package/app/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -1
  209. package/app/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -1
  210. package/app/.next/server/app/api/providers/[id]/models/route.js +2 -2
  211. package/app/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  212. package/app/.next/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -1
  213. package/app/.next/server/app/api/providers/[id]/route.js +1 -1
  214. package/app/.next/server/app/api/providers/[id]/route.js.nft.json +1 -1
  215. package/app/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -1
  216. package/app/.next/server/app/api/providers/[id]/test/route.js +1 -1
  217. package/app/.next/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  218. package/app/.next/server/app/api/providers/[id]/test/route_client-reference-manifest.js +1 -1
  219. package/app/.next/server/app/api/providers/client/route.js +1 -1
  220. package/app/.next/server/app/api/providers/client/route.js.nft.json +1 -1
  221. package/app/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -1
  222. package/app/.next/server/app/api/providers/route.js +2 -2
  223. package/app/.next/server/app/api/providers/route.js.nft.json +1 -1
  224. package/app/.next/server/app/api/providers/route_client-reference-manifest.js +1 -1
  225. package/app/.next/server/app/api/providers/test-batch/route.js +1 -1
  226. package/app/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  227. package/app/.next/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -1
  228. package/app/.next/server/app/api/providers/validate/route.js +1 -1
  229. package/app/.next/server/app/api/providers/validate/route.js.nft.json +1 -1
  230. package/app/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -1
  231. package/app/.next/server/app/api/rate-limit/route_client-reference-manifest.js +1 -1
  232. package/app/.next/server/app/api/rate-limits/route.js +1 -1
  233. package/app/.next/server/app/api/rate-limits/route.js.nft.json +1 -1
  234. package/app/.next/server/app/api/rate-limits/route_client-reference-manifest.js +1 -1
  235. package/app/.next/server/app/api/resilience/reset/route_client-reference-manifest.js +1 -1
  236. package/app/.next/server/app/api/resilience/route.js +1 -1
  237. package/app/.next/server/app/api/resilience/route.js.nft.json +1 -1
  238. package/app/.next/server/app/api/resilience/route_client-reference-manifest.js +1 -1
  239. package/app/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  240. package/app/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
  241. package/app/.next/server/app/api/settings/combo-defaults/route.js +1 -1
  242. package/app/.next/server/app/api/settings/combo-defaults/route.js.nft.json +1 -1
  243. package/app/.next/server/app/api/settings/combo-defaults/route_client-reference-manifest.js +1 -1
  244. package/app/.next/server/app/api/settings/ip-filter/route_client-reference-manifest.js +1 -1
  245. package/app/.next/server/app/api/settings/proxy/route.js +1 -1
  246. package/app/.next/server/app/api/settings/proxy/route.js.nft.json +1 -1
  247. package/app/.next/server/app/api/settings/proxy/route_client-reference-manifest.js +1 -1
  248. package/app/.next/server/app/api/settings/proxy/test/route_client-reference-manifest.js +1 -1
  249. package/app/.next/server/app/api/settings/require-login/route.js +1 -1
  250. package/app/.next/server/app/api/settings/require-login/route.js.nft.json +1 -1
  251. package/app/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -1
  252. package/app/.next/server/app/api/settings/route.js +1 -1
  253. package/app/.next/server/app/api/settings/route.js.nft.json +1 -1
  254. package/app/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  255. package/app/.next/server/app/api/settings/system-prompt/route.js +1 -1
  256. package/app/.next/server/app/api/settings/system-prompt/route.js.nft.json +1 -1
  257. package/app/.next/server/app/api/settings/system-prompt/route_client-reference-manifest.js +1 -1
  258. package/app/.next/server/app/api/settings/thinking-budget/route.js +1 -1
  259. package/app/.next/server/app/api/settings/thinking-budget/route.js.nft.json +1 -1
  260. package/app/.next/server/app/api/settings/thinking-budget/route_client-reference-manifest.js +1 -1
  261. package/app/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  262. package/app/.next/server/app/api/storage/health/route_client-reference-manifest.js +1 -1
  263. package/app/.next/server/app/api/sync/cloud/route.js +1 -1
  264. package/app/.next/server/app/api/sync/cloud/route.js.nft.json +1 -1
  265. package/app/.next/server/app/api/sync/cloud/route_client-reference-manifest.js +1 -1
  266. package/app/.next/server/app/api/sync/initialize/route.js +1 -1
  267. package/app/.next/server/app/api/sync/initialize/route.js.nft.json +1 -1
  268. package/app/.next/server/app/api/sync/initialize/route_client-reference-manifest.js +1 -1
  269. package/app/.next/server/app/api/tags/route_client-reference-manifest.js +1 -1
  270. package/app/.next/server/app/api/telemetry/summary/route_client-reference-manifest.js +1 -1
  271. package/app/.next/server/app/api/token-health/route.js +1 -1
  272. package/app/.next/server/app/api/token-health/route.js.nft.json +1 -1
  273. package/app/.next/server/app/api/token-health/route_client-reference-manifest.js +1 -1
  274. package/app/.next/server/app/api/translator/detect/route_client-reference-manifest.js +1 -1
  275. package/app/.next/server/app/api/translator/history/route_client-reference-manifest.js +1 -1
  276. package/app/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -1
  277. package/app/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -1
  278. package/app/.next/server/app/api/translator/send/route.js +1 -1
  279. package/app/.next/server/app/api/translator/send/route.js.nft.json +1 -1
  280. package/app/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -1
  281. package/app/.next/server/app/api/translator/translate/route.js +1 -1
  282. package/app/.next/server/app/api/translator/translate/route.js.nft.json +1 -1
  283. package/app/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -1
  284. package/app/.next/server/app/api/usage/[connectionId]/route.js +1 -1
  285. package/app/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  286. package/app/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -1
  287. package/app/.next/server/app/api/usage/analytics/route.js +1 -1
  288. package/app/.next/server/app/api/usage/analytics/route.js.nft.json +1 -1
  289. package/app/.next/server/app/api/usage/analytics/route_client-reference-manifest.js +1 -1
  290. package/app/.next/server/app/api/usage/budget/route_client-reference-manifest.js +1 -1
  291. package/app/.next/server/app/api/usage/call-logs/[id]/route.js.nft.json +1 -1
  292. package/app/.next/server/app/api/usage/call-logs/[id]/route_client-reference-manifest.js +1 -1
  293. package/app/.next/server/app/api/usage/call-logs/route.js.nft.json +1 -1
  294. package/app/.next/server/app/api/usage/call-logs/route_client-reference-manifest.js +1 -1
  295. package/app/.next/server/app/api/usage/history/route.js.nft.json +1 -1
  296. package/app/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -1
  297. package/app/.next/server/app/api/usage/logs/route.js.nft.json +1 -1
  298. package/app/.next/server/app/api/usage/logs/route_client-reference-manifest.js +1 -1
  299. package/app/.next/server/app/api/usage/proxy-logs/route_client-reference-manifest.js +1 -1
  300. package/app/.next/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  301. package/app/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -1
  302. package/app/.next/server/app/api/v1/api/chat/route.js +1 -1
  303. package/app/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  304. package/app/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -1
  305. package/app/.next/server/app/api/v1/audio/speech/route.js +1 -1
  306. package/app/.next/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  307. package/app/.next/server/app/api/v1/audio/speech/route_client-reference-manifest.js +1 -1
  308. package/app/.next/server/app/api/v1/audio/transcriptions/route.js +1 -1
  309. package/app/.next/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  310. package/app/.next/server/app/api/v1/audio/transcriptions/route_client-reference-manifest.js +1 -1
  311. package/app/.next/server/app/api/v1/chat/completions/route.js +1 -1
  312. package/app/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  313. package/app/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -1
  314. package/app/.next/server/app/api/v1/embeddings/route.js +1 -1
  315. package/app/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  316. package/app/.next/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -1
  317. package/app/.next/server/app/api/v1/images/generations/route.js +1 -1
  318. package/app/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  319. package/app/.next/server/app/api/v1/images/generations/route_client-reference-manifest.js +1 -1
  320. package/app/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -1
  321. package/app/.next/server/app/api/v1/messages/route.js +1 -1
  322. package/app/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
  323. package/app/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -1
  324. package/app/.next/server/app/api/v1/models/route.js +2 -2
  325. package/app/.next/server/app/api/v1/models/route.js.nft.json +1 -1
  326. package/app/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -1
  327. package/app/.next/server/app/api/v1/moderations/route.js +1 -1
  328. package/app/.next/server/app/api/v1/moderations/route.js.nft.json +1 -1
  329. package/app/.next/server/app/api/v1/moderations/route_client-reference-manifest.js +1 -1
  330. package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route.js +1 -1
  331. package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route.js.nft.json +1 -1
  332. package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route_client-reference-manifest.js +1 -1
  333. package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route.js +1 -1
  334. package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route.js.nft.json +1 -1
  335. package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route_client-reference-manifest.js +1 -1
  336. package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route.js +1 -1
  337. package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route.js.nft.json +1 -1
  338. package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route_client-reference-manifest.js +1 -1
  339. package/app/.next/server/app/api/v1/rerank/route.js +1 -1
  340. package/app/.next/server/app/api/v1/rerank/route.js.nft.json +1 -1
  341. package/app/.next/server/app/api/v1/rerank/route_client-reference-manifest.js +1 -1
  342. package/app/.next/server/app/api/v1/responses/route.js +1 -1
  343. package/app/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
  344. package/app/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -1
  345. package/app/.next/server/app/api/v1/route_client-reference-manifest.js +1 -1
  346. package/app/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
  347. package/app/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  348. package/app/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -1
  349. package/app/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -1
  350. package/app/.next/server/app/callback/page.js +1 -1
  351. package/app/.next/server/app/callback/page.js.nft.json +1 -1
  352. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  353. package/app/.next/server/app/callback.html +1 -1
  354. package/app/.next/server/app/callback.rsc +3 -3
  355. package/app/.next/server/app/callback.segments/_full.segment.rsc +3 -3
  356. package/app/.next/server/app/callback.segments/_head.segment.rsc +1 -1
  357. package/app/.next/server/app/callback.segments/_index.segment.rsc +3 -3
  358. package/app/.next/server/app/callback.segments/_tree.segment.rsc +2 -2
  359. package/app/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  360. package/app/.next/server/app/callback.segments/callback.segment.rsc +1 -1
  361. package/app/.next/server/app/dashboard/analytics.html +2 -2
  362. package/app/.next/server/app/dashboard/analytics.rsc +5 -5
  363. package/app/.next/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard/analytics/__PAGE__.segment.rsc +2 -2
  364. package/app/.next/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard/analytics.segment.rsc +1 -1
  365. package/app/.next/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  366. package/app/.next/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  367. package/app/.next/server/app/dashboard/analytics.segments/_full.segment.rsc +5 -5
  368. package/app/.next/server/app/dashboard/analytics.segments/_head.segment.rsc +1 -1
  369. package/app/.next/server/app/dashboard/analytics.segments/_index.segment.rsc +3 -3
  370. package/app/.next/server/app/dashboard/analytics.segments/_tree.segment.rsc +2 -2
  371. package/app/.next/server/app/dashboard/api-manager.html +1 -0
  372. package/app/.next/server/app/dashboard/api-manager.meta +17 -0
  373. package/app/.next/server/app/dashboard/api-manager.rsc +22 -0
  374. package/app/.next/server/app/dashboard/api-manager.segments/!KGRhc2hib2FyZCk/dashboard/api-manager/__PAGE__.segment.rsc +6 -0
  375. package/app/.next/server/app/dashboard/api-manager.segments/!KGRhc2hib2FyZCk/dashboard/api-manager.segment.rsc +4 -0
  376. package/app/.next/server/app/dashboard/api-manager.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +4 -0
  377. package/app/.next/server/app/dashboard/api-manager.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -0
  378. package/app/.next/server/app/dashboard/api-manager.segments/_full.segment.rsc +22 -0
  379. package/app/.next/server/app/dashboard/api-manager.segments/_head.segment.rsc +6 -0
  380. package/app/.next/server/app/dashboard/api-manager.segments/_index.segment.rsc +10 -0
  381. package/app/.next/server/app/dashboard/api-manager.segments/_tree.segment.rsc +5 -0
  382. package/app/.next/server/app/dashboard/audit-log.html +1 -1
  383. package/app/.next/server/app/dashboard/audit-log.rsc +4 -4
  384. package/app/.next/server/app/dashboard/audit-log.segments/!KGRhc2hib2FyZCk/dashboard/audit-log/__PAGE__.segment.rsc +1 -1
  385. package/app/.next/server/app/dashboard/audit-log.segments/!KGRhc2hib2FyZCk/dashboard/audit-log.segment.rsc +1 -1
  386. package/app/.next/server/app/dashboard/audit-log.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  387. package/app/.next/server/app/dashboard/audit-log.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  388. package/app/.next/server/app/dashboard/audit-log.segments/_full.segment.rsc +4 -4
  389. package/app/.next/server/app/dashboard/audit-log.segments/_head.segment.rsc +1 -1
  390. package/app/.next/server/app/dashboard/audit-log.segments/_index.segment.rsc +3 -3
  391. package/app/.next/server/app/dashboard/audit-log.segments/_tree.segment.rsc +2 -2
  392. package/app/.next/server/app/dashboard/cli-tools.html +1 -1
  393. package/app/.next/server/app/dashboard/cli-tools.rsc +5 -5
  394. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  395. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  396. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  397. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  398. package/app/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
  399. package/app/.next/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  400. package/app/.next/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
  401. package/app/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
  402. package/app/.next/server/app/dashboard/combos.html +1 -1
  403. package/app/.next/server/app/dashboard/combos.rsc +5 -5
  404. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  405. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  406. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  407. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  408. package/app/.next/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
  409. package/app/.next/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  410. package/app/.next/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
  411. package/app/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
  412. package/app/.next/server/app/dashboard/costs.html +1 -1
  413. package/app/.next/server/app/dashboard/costs.rsc +5 -5
  414. package/app/.next/server/app/dashboard/costs.segments/!KGRhc2hib2FyZCk/dashboard/costs/__PAGE__.segment.rsc +2 -2
  415. package/app/.next/server/app/dashboard/costs.segments/!KGRhc2hib2FyZCk/dashboard/costs.segment.rsc +1 -1
  416. package/app/.next/server/app/dashboard/costs.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  417. package/app/.next/server/app/dashboard/costs.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  418. package/app/.next/server/app/dashboard/costs.segments/_full.segment.rsc +5 -5
  419. package/app/.next/server/app/dashboard/costs.segments/_head.segment.rsc +1 -1
  420. package/app/.next/server/app/dashboard/costs.segments/_index.segment.rsc +3 -3
  421. package/app/.next/server/app/dashboard/costs.segments/_tree.segment.rsc +2 -2
  422. package/app/.next/server/app/dashboard/endpoint.html +1 -1
  423. package/app/.next/server/app/dashboard/endpoint.rsc +5 -5
  424. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  425. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  426. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  427. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  428. package/app/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
  429. package/app/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  430. package/app/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
  431. package/app/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
  432. package/app/.next/server/app/dashboard/health.html +1 -1
  433. package/app/.next/server/app/dashboard/health.rsc +5 -5
  434. package/app/.next/server/app/dashboard/health.segments/!KGRhc2hib2FyZCk/dashboard/health/__PAGE__.segment.rsc +2 -2
  435. package/app/.next/server/app/dashboard/health.segments/!KGRhc2hib2FyZCk/dashboard/health.segment.rsc +1 -1
  436. package/app/.next/server/app/dashboard/health.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  437. package/app/.next/server/app/dashboard/health.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  438. package/app/.next/server/app/dashboard/health.segments/_full.segment.rsc +5 -5
  439. package/app/.next/server/app/dashboard/health.segments/_head.segment.rsc +1 -1
  440. package/app/.next/server/app/dashboard/health.segments/_index.segment.rsc +3 -3
  441. package/app/.next/server/app/dashboard/health.segments/_tree.segment.rsc +2 -2
  442. package/app/.next/server/app/dashboard/limits.html +2 -2
  443. package/app/.next/server/app/dashboard/limits.rsc +5 -5
  444. package/app/.next/server/app/dashboard/limits.segments/!KGRhc2hib2FyZCk/dashboard/limits/__PAGE__.segment.rsc +2 -2
  445. package/app/.next/server/app/dashboard/limits.segments/!KGRhc2hib2FyZCk/dashboard/limits.segment.rsc +1 -1
  446. package/app/.next/server/app/dashboard/limits.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  447. package/app/.next/server/app/dashboard/limits.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  448. package/app/.next/server/app/dashboard/limits.segments/_full.segment.rsc +5 -5
  449. package/app/.next/server/app/dashboard/limits.segments/_head.segment.rsc +1 -1
  450. package/app/.next/server/app/dashboard/limits.segments/_index.segment.rsc +3 -3
  451. package/app/.next/server/app/dashboard/limits.segments/_tree.segment.rsc +2 -2
  452. package/app/.next/server/app/dashboard/logs.html +1 -1
  453. package/app/.next/server/app/dashboard/logs.rsc +5 -5
  454. package/app/.next/server/app/dashboard/logs.segments/!KGRhc2hib2FyZCk/dashboard/logs/__PAGE__.segment.rsc +2 -2
  455. package/app/.next/server/app/dashboard/logs.segments/!KGRhc2hib2FyZCk/dashboard/logs.segment.rsc +1 -1
  456. package/app/.next/server/app/dashboard/logs.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  457. package/app/.next/server/app/dashboard/logs.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  458. package/app/.next/server/app/dashboard/logs.segments/_full.segment.rsc +5 -5
  459. package/app/.next/server/app/dashboard/logs.segments/_head.segment.rsc +1 -1
  460. package/app/.next/server/app/dashboard/logs.segments/_index.segment.rsc +3 -3
  461. package/app/.next/server/app/dashboard/logs.segments/_tree.segment.rsc +2 -2
  462. package/app/.next/server/app/dashboard/onboarding.html +1 -1
  463. package/app/.next/server/app/dashboard/onboarding.rsc +4 -4
  464. package/app/.next/server/app/dashboard/onboarding.segments/!KGRhc2hib2FyZCk/dashboard/onboarding/__PAGE__.segment.rsc +1 -1
  465. package/app/.next/server/app/dashboard/onboarding.segments/!KGRhc2hib2FyZCk/dashboard/onboarding.segment.rsc +1 -1
  466. package/app/.next/server/app/dashboard/onboarding.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  467. package/app/.next/server/app/dashboard/onboarding.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  468. package/app/.next/server/app/dashboard/onboarding.segments/_full.segment.rsc +4 -4
  469. package/app/.next/server/app/dashboard/onboarding.segments/_head.segment.rsc +1 -1
  470. package/app/.next/server/app/dashboard/onboarding.segments/_index.segment.rsc +3 -3
  471. package/app/.next/server/app/dashboard/onboarding.segments/_tree.segment.rsc +2 -2
  472. package/app/.next/server/app/dashboard/profile.html +1 -1
  473. package/app/.next/server/app/dashboard/profile.rsc +4 -4
  474. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +1 -1
  475. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  476. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  477. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  478. package/app/.next/server/app/dashboard/profile.segments/_full.segment.rsc +4 -4
  479. package/app/.next/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  480. package/app/.next/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
  481. package/app/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
  482. package/app/.next/server/app/dashboard/providers/new.html +2 -2
  483. package/app/.next/server/app/dashboard/providers/new.rsc +5 -5
  484. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  485. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  486. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  487. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  488. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  489. package/app/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
  490. package/app/.next/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  491. package/app/.next/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
  492. package/app/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
  493. package/app/.next/server/app/dashboard/providers.html +2 -2
  494. package/app/.next/server/app/dashboard/providers.rsc +5 -5
  495. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  496. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  497. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  498. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  499. package/app/.next/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
  500. package/app/.next/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  501. package/app/.next/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
  502. package/app/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
  503. package/app/.next/server/app/dashboard/settings/pricing.html +2 -2
  504. package/app/.next/server/app/dashboard/settings/pricing.rsc +4 -4
  505. package/app/.next/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  506. package/app/.next/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard/settings/pricing.segment.rsc +1 -1
  507. package/app/.next/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard/settings.segment.rsc +1 -1
  508. package/app/.next/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  509. package/app/.next/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  510. package/app/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +4 -4
  511. package/app/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  512. package/app/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
  513. package/app/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  514. package/app/.next/server/app/dashboard/settings.html +1 -1
  515. package/app/.next/server/app/dashboard/settings.rsc +5 -5
  516. package/app/.next/server/app/dashboard/settings.segments/!KGRhc2hib2FyZCk/dashboard/settings/__PAGE__.segment.rsc +2 -2
  517. package/app/.next/server/app/dashboard/settings.segments/!KGRhc2hib2FyZCk/dashboard/settings.segment.rsc +1 -1
  518. package/app/.next/server/app/dashboard/settings.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  519. package/app/.next/server/app/dashboard/settings.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  520. package/app/.next/server/app/dashboard/settings.segments/_full.segment.rsc +5 -5
  521. package/app/.next/server/app/dashboard/settings.segments/_head.segment.rsc +1 -1
  522. package/app/.next/server/app/dashboard/settings.segments/_index.segment.rsc +3 -3
  523. package/app/.next/server/app/dashboard/settings.segments/_tree.segment.rsc +2 -2
  524. package/app/.next/server/app/dashboard/translator.html +2 -2
  525. package/app/.next/server/app/dashboard/translator.rsc +5 -5
  526. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  527. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  528. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  529. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  530. package/app/.next/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
  531. package/app/.next/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  532. package/app/.next/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
  533. package/app/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
  534. package/app/.next/server/app/dashboard/usage.html +1 -1
  535. package/app/.next/server/app/dashboard/usage.rsc +5 -5
  536. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  537. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  538. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  539. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  540. package/app/.next/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
  541. package/app/.next/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  542. package/app/.next/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
  543. package/app/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
  544. package/app/.next/server/app/docs/page.js +1 -1
  545. package/app/.next/server/app/docs/page.js.nft.json +1 -1
  546. package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  547. package/app/.next/server/app/docs.html +1 -1
  548. package/app/.next/server/app/docs.rsc +3 -3
  549. package/app/.next/server/app/docs.segments/_full.segment.rsc +3 -3
  550. package/app/.next/server/app/docs.segments/_head.segment.rsc +1 -1
  551. package/app/.next/server/app/docs.segments/_index.segment.rsc +3 -3
  552. package/app/.next/server/app/docs.segments/_tree.segment.rsc +2 -2
  553. package/app/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +1 -1
  554. package/app/.next/server/app/docs.segments/docs.segment.rsc +1 -1
  555. package/app/.next/server/app/forbidden/page.js +1 -1
  556. package/app/.next/server/app/forbidden/page.js.nft.json +1 -1
  557. package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
  558. package/app/.next/server/app/forbidden.html +1 -1
  559. package/app/.next/server/app/forbidden.rsc +3 -3
  560. package/app/.next/server/app/forbidden.segments/_full.segment.rsc +3 -3
  561. package/app/.next/server/app/forbidden.segments/_head.segment.rsc +1 -1
  562. package/app/.next/server/app/forbidden.segments/_index.segment.rsc +3 -3
  563. package/app/.next/server/app/forbidden.segments/_tree.segment.rsc +2 -2
  564. package/app/.next/server/app/forbidden.segments/forbidden/__PAGE__.segment.rsc +1 -1
  565. package/app/.next/server/app/forbidden.segments/forbidden.segment.rsc +1 -1
  566. package/app/.next/server/app/forgot-password/page.js +1 -1
  567. package/app/.next/server/app/forgot-password/page.js.nft.json +1 -1
  568. package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
  569. package/app/.next/server/app/forgot-password.html +1 -1
  570. package/app/.next/server/app/forgot-password.rsc +4 -4
  571. package/app/.next/server/app/forgot-password.segments/_full.segment.rsc +4 -4
  572. package/app/.next/server/app/forgot-password.segments/_head.segment.rsc +1 -1
  573. package/app/.next/server/app/forgot-password.segments/_index.segment.rsc +3 -3
  574. package/app/.next/server/app/forgot-password.segments/_tree.segment.rsc +2 -2
  575. package/app/.next/server/app/forgot-password.segments/forgot-password/__PAGE__.segment.rsc +2 -2
  576. package/app/.next/server/app/forgot-password.segments/forgot-password.segment.rsc +1 -1
  577. package/app/.next/server/app/index.html +1 -1
  578. package/app/.next/server/app/index.rsc +3 -3
  579. package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  580. package/app/.next/server/app/index.segments/_full.segment.rsc +3 -3
  581. package/app/.next/server/app/index.segments/_head.segment.rsc +1 -1
  582. package/app/.next/server/app/index.segments/_index.segment.rsc +3 -3
  583. package/app/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  584. package/app/.next/server/app/landing/page.js +1 -1
  585. package/app/.next/server/app/landing/page.js.nft.json +1 -1
  586. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  587. package/app/.next/server/app/landing.html +1 -1
  588. package/app/.next/server/app/landing.rsc +3 -3
  589. package/app/.next/server/app/landing.segments/_full.segment.rsc +3 -3
  590. package/app/.next/server/app/landing.segments/_head.segment.rsc +1 -1
  591. package/app/.next/server/app/landing.segments/_index.segment.rsc +3 -3
  592. package/app/.next/server/app/landing.segments/_tree.segment.rsc +2 -2
  593. package/app/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  594. package/app/.next/server/app/landing.segments/landing.segment.rsc +1 -1
  595. package/app/.next/server/app/login/page.js +1 -1
  596. package/app/.next/server/app/login/page.js.nft.json +1 -1
  597. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  598. package/app/.next/server/app/login.html +1 -1
  599. package/app/.next/server/app/login.rsc +4 -4
  600. package/app/.next/server/app/login.segments/_full.segment.rsc +4 -4
  601. package/app/.next/server/app/login.segments/_head.segment.rsc +1 -1
  602. package/app/.next/server/app/login.segments/_index.segment.rsc +3 -3
  603. package/app/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  604. package/app/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  605. package/app/.next/server/app/login.segments/login.segment.rsc +1 -1
  606. package/app/.next/server/app/page.js +1 -1
  607. package/app/.next/server/app/page.js.nft.json +1 -1
  608. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  609. package/app/.next/server/app/privacy/page.js +1 -1
  610. package/app/.next/server/app/privacy/page.js.nft.json +1 -1
  611. package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
  612. package/app/.next/server/app/privacy.html +1 -1
  613. package/app/.next/server/app/privacy.rsc +3 -3
  614. package/app/.next/server/app/privacy.segments/_full.segment.rsc +3 -3
  615. package/app/.next/server/app/privacy.segments/_head.segment.rsc +1 -1
  616. package/app/.next/server/app/privacy.segments/_index.segment.rsc +3 -3
  617. package/app/.next/server/app/privacy.segments/_tree.segment.rsc +2 -2
  618. package/app/.next/server/app/privacy.segments/privacy/__PAGE__.segment.rsc +1 -1
  619. package/app/.next/server/app/privacy.segments/privacy.segment.rsc +1 -1
  620. package/app/.next/server/app/terms/page.js +1 -1
  621. package/app/.next/server/app/terms/page.js.nft.json +1 -1
  622. package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
  623. package/app/.next/server/app/terms.html +1 -1
  624. package/app/.next/server/app/terms.rsc +3 -3
  625. package/app/.next/server/app/terms.segments/_full.segment.rsc +3 -3
  626. package/app/.next/server/app/terms.segments/_head.segment.rsc +1 -1
  627. package/app/.next/server/app/terms.segments/_index.segment.rsc +3 -3
  628. package/app/.next/server/app/terms.segments/_tree.segment.rsc +2 -2
  629. package/app/.next/server/app/terms.segments/terms/__PAGE__.segment.rsc +1 -1
  630. package/app/.next/server/app/terms.segments/terms.segment.rsc +1 -1
  631. package/app/.next/server/app-paths-manifest.json +28 -27
  632. package/app/.next/server/chunks/1308.js +1 -1
  633. package/app/.next/server/chunks/2760.js +1 -1
  634. package/app/.next/server/chunks/2767.js +2 -2
  635. package/app/.next/server/chunks/2901.js +45 -0
  636. package/app/.next/server/chunks/7109.js +1 -1
  637. package/app/.next/server/chunks/7230.js +2 -2
  638. package/app/.next/server/chunks/7669.js +1 -1
  639. package/app/.next/server/chunks/9824.js +1 -1
  640. package/app/.next/server/chunks/9979.js +1 -1
  641. package/app/.next/server/middleware.js +2 -2
  642. package/app/.next/server/pages/404.html +1 -1
  643. package/app/.next/server/pages/500.html +2 -2
  644. package/app/.next/server/server-reference-manifest.js +1 -1
  645. package/app/.next/server/server-reference-manifest.json +1 -1
  646. package/app/.next/static/WRTeBVvV6ImLSSNVK7bkD/_buildManifest.js +1 -0
  647. package/app/.next/static/chunks/{5846-a01a13a3a62b8b3f.js → 5846-bab1c9fea8378c9b.js} +1 -1
  648. package/app/.next/static/chunks/{993-59818b0aeadd7208.js → 993-0fb5100db47366c5.js} +1 -1
  649. package/app/.next/static/chunks/app/(dashboard)/dashboard/api-manager/page-10e24238da560d00.js +1 -0
  650. package/app/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-90f0a2f2cfc02a76.js +1 -0
  651. package/app/.next/static/css/4729a5763a71a003.css +1 -0
  652. package/app/package.json +1 -1
  653. package/package.json +1 -1
  654. package/app/.next/server/chunks/287.js +0 -45
  655. package/app/.next/static/NcB8iFcN5Ja4YnR6i0HRi/_buildManifest.js +0 -1
  656. package/app/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-dfe91fc1dcbaf85a.js +0 -1
  657. package/app/.next/static/css/67c4b9dbfb14fddd.css +0 -1
  658. /package/app/.next/static/{NcB8iFcN5Ja4YnR6i0HRi → WRTeBVvV6ImLSSNVK7bkD}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- "use strict";exports.id=2760,exports.ids=[2760,4755],exports.modules={19225:(a,b,c)=>{a.exports=c(44870)},21020:(a,b,c)=>{c.d(b,{Pt:()=>k,Tr:()=>l,c1:()=>i,kI:()=>m,vk:()=>j});var d=c(40287),e=c(74163),f=c(83779);let g=Promise.resolve(),h=new Map;async function i(a,b=null){let c,h=g;g=new Promise(a=>{c=a});try{let c;await h;let g=await (0,d.getProviderConnections)({provider:a,isActive:!0});if(f.debug("AUTH",`${a} | total connections: ${g.length}, excludeId: ${b||"none"}`),0===g.length){let b=await (0,d.getProviderConnections)({provider:a});if(f.debug("AUTH",`${a} | all connections (incl inactive): ${b.length}`),b.length>0){let c=(0,e.UY)(b);if(c)return f.warn("AUTH",`${a} | all ${b.length} accounts rate limited (${(0,e.Qo)(c)})`),{allRateLimited:!0,retryAfter:c,retryAfterHuman:(0,e.Qo)(c)};f.warn("AUTH",`${a} | ${b.length} accounts found but none active`),b.forEach(a=>{f.debug("AUTH",` → ${a.id?.slice(0,8)} | isActive=${a.isActive} | rateLimitedUntil=${a.rateLimitedUntil||"none"} | testStatus=${a.testStatus}`)})}return f.warn("AUTH",`No credentials for ${a}`),null}let i=g.filter(a=>!(b&&a.id===b||(0,e.AO)(a.rateLimitedUntil)));if(f.debug("AUTH",`${a} | available: ${i.length}/${g.length}`),g.forEach(a=>{let c=b&&a.id===b,d=(0,e.AO)(a.rateLimitedUntil);(c||d)&&f.debug("AUTH",` → ${a.id?.slice(0,8)} | ${c?"excluded":""} ${d?`rateLimited until ${a.rateLimitedUntil}`:""}`)}),0===i.length){let b=(0,e.UY)(g);if(b){let c=g.filter(a=>a.rateLimitedUntil&&new Date(a.rateLimitedUntil).getTime()>Date.now()).sort((a,b)=>new Date(a.rateLimitedUntil).getTime()-new Date(b.rateLimitedUntil).getTime())[0];return f.warn("AUTH",`${a} | all ${g.length} active accounts rate limited (${(0,e.Qo)(b)}) | lastErrorCode=${c?.errorCode}, lastError=${c?.lastError?.slice(0,50)}`),{allRateLimited:!0,retryAfter:b,retryAfterHuman:(0,e.Qo)(b),lastError:c?.lastError||null,lastErrorCode:c?.errorCode||null}}return f.warn("AUTH",`${a} | all ${g.length} accounts unavailable`),null}let j=await (0,d.mt)(),k=j.fallbackStrategy||"fill-first";if("round-robin"===k){let a=j.stickyRoundRobinLimit||3,b=[...i].sort((a,b)=>a.lastUsedAt||b.lastUsedAt?a.lastUsedAt?b.lastUsedAt?new Date(b.lastUsedAt).getTime()-new Date(a.lastUsedAt).getTime():-1:1:(a.priority||999)-(b.priority||999))[0],e=b?.consecutiveUseCount||0;b&&b.lastUsedAt&&e<a?(c=b,await (0,d.rj)(c.id,{lastUsedAt:new Date().toISOString(),consecutiveUseCount:(c.consecutiveUseCount||0)+1})):(c=[...i].sort((a,b)=>a.lastUsedAt||b.lastUsedAt?a.lastUsedAt?b.lastUsedAt?new Date(a.lastUsedAt).getTime()-new Date(b.lastUsedAt).getTime():1:-1:(a.priority||999)-(b.priority||999))[0],await (0,d.rj)(c.id,{lastUsedAt:new Date().toISOString(),consecutiveUseCount:1}))}else if("p2c"===k)if(i.length<=2)c=i[0];else{let a=Math.floor(Math.random()*i.length),b=Math.floor(Math.random()*(i.length-1));b>=a&&b++;let d=i[a],e=i[b],f=(d.consecutiveUseCount||0)+10*!!d.lastError,g=(e.consecutiveUseCount||0)+10*!!e.lastError;c=f<=g?d:e}else if("random"===k){let a=Math.floor(Math.random()*i.length);c=i[a]}else c="least-used"===k?[...i].sort((a,b)=>a.lastUsedAt||b.lastUsedAt?a.lastUsedAt?b.lastUsedAt?new Date(a.lastUsedAt).getTime()-new Date(b.lastUsedAt).getTime():1:-1:(a.priority||999)-(b.priority||999))[0]:"cost-optimized"===k?[...i].sort((a,b)=>(a.priority||999)-(b.priority||999))[0]:i[0];return{apiKey:c.apiKey,accessToken:c.accessToken,refreshToken:c.refreshToken,expiresAt:c.tokenExpiresAt||c.expiresAt||null,projectId:c.projectId,copilotToken:c.providerSpecificData?.copilotToken,providerSpecificData:c.providerSpecificData,connectionId:c.id,testStatus:c.testStatus,lastError:c.lastError,rateLimitedUntil:c.rateLimitedUntil}}finally{c&&c()}}async function j(a,b,c,g=null,i=null){let k,l=h.get(a)||Promise.resolve();h.set(a,new Promise(a=>{k=a}));try{await l;let h=(await (0,d.getProviderConnections)({provider:g})).find(b=>b.id===a),j=h?.backoffLevel||0;if(h?.rateLimitedUntil&&new Date(h.rateLimitedUntil).getTime()>Date.now())return f.info("AUTH",`${a.slice(0,8)} already marked unavailable (until ${h.rateLimitedUntil}), skipping duplicate mark`),{shouldFallback:!0,cooldownMs:new Date(h.rateLimitedUntil).getTime()-Date.now()};let{shouldFallback:k,cooldownMs:m,newBackoffLevel:n,reason:o}=(0,e.hk)(b,c,j,i,g);if(!k)return{shouldFallback:!1,cooldownMs:0};let p=(0,e.vp)(m),q="string"==typeof c?c.slice(0,100):"Provider error";return await (0,d.rj)(a,{rateLimitedUntil:p,testStatus:"unavailable",lastError:q,errorCode:b,lastErrorAt:new Date().toISOString(),backoffLevel:n??j}),g&&i&&m>0&&(0,e.R7)(g,a,i,o||"unknown",m),g&&b&&q&&console.error(`❌ ${g} [${b}]: ${q}`),{shouldFallback:!0,cooldownMs:m}}finally{k&&k(),h.delete(a)}}async function k(a,b){("unavailable"===b.testStatus||b.lastError||b.rateLimitedUntil)&&(await (0,d.rj)(a,{testStatus:"active",lastError:null,lastErrorAt:null,rateLimitedUntil:null,backoffLevel:0}),f.info("AUTH",`Account ${a.slice(0,8)} error cleared`))}function l(a){let b=a.headers.get("Authorization");return b?.startsWith("Bearer ")?b.slice(7):null}async function m(a){return!!a&&await (0,d.ek)(a)}},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()}},83779:(a,b,c)=>{c.r(b),c.d(b,{debug:()=>l,error:()=>o,info:()=>m,maskKey:()=>j,request:()=>p,response:()=>q,stream:()=>r,warn:()=>n});var d=c(74552),e=c.n(d),f=c(33873),g=c(29021);function h(){let a="false"!==process.env.LOG_TO_FILE,b=process.env.LOG_FILE_PATH||(0,f.join)(process.cwd(),"logs/application/app.log");return{logToFile:a,logFilePath:b,maxFileSize:function(a){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}}(process.env.LOG_MAX_FILE_SIZE),retentionDays:parseInt(process.env.LOG_RETENTION_DAYS||String(7),10)}}let i={level:process.env.LOG_LEVEL||"info",base:{service:"omniroute"},timestamp:e().stdTimeFunctions.isoTime,formatters:{level:a=>({level:a})}};function j(a){return!a||a.length<8?"***":`${a.slice(0,4)}...${a.slice(-4)}`}let k=(function(){let a=h(),b=i.level||"info";if(a.logToFile)try{let d=h();if(d.logToFile){var c;let a;c=d.logFilePath,a=(0,f.dirname)(c),(0,g.existsSync)(a)||(0,g.mkdirSync)(a,{recursive:!0}),function(a,b){try{if(!(0,g.existsSync)(a)||(0,g.statSync)(a).size<b)return;let c=(0,f.dirname)(a),d=(0,f.extname)(a),e=(0,f.basename)(a,d),h=new Date,i=`${h.getFullYear()}-${String(h.getMonth()+1).padStart(2,"0")}-${String(h.getDate()).padStart(2,"0")}_${String(h.getHours()).padStart(2,"0")}${String(h.getMinutes()).padStart(2,"0")}${String(h.getSeconds()).padStart(2,"0")}`,j=(0,f.join)(c,`${e}.${i}${d}`);(0,g.renameSync)(a,j)}catch{}}(d.logFilePath,d.maxFileSize),function(a,b){try{let c=(0,f.dirname)(a);if(!(0,g.existsSync)(c))return;let d=(0,f.extname)(a),e=(0,f.basename)(a,d),h=(0,g.readdirSync)(c),i=Date.now()-24*b*36e5;for(let b of h)if(b.startsWith(e+".")&&b.endsWith(d)&&b!==(0,f.basename)(a)){let a=(0,f.join)(c,b);try{(0,g.statSync)(a).mtimeMs<i&&(0,g.unlinkSync)(a)}catch{}}}catch{}}(d.logFilePath,d.retentionDays)}let j=(0,f.resolve)(a.logFilePath);return e()({...i,transport:{targets:[{target:"pino/file",options:{destination:1},level:b},{target:"pino/file",options:{destination:j,mkdir:!0},level:b}]}})}catch{console.warn("[logger] Failed to set up file transport, falling back to console only")}return e()(i)})().child({module:"sse"});function l(a,b,c){k.debug({tag:a,...s(c)},b)}function m(a,b,c){k.info({tag:a,...s(c)},b)}function n(a,b,c){k.warn({tag:a,...s(c)},b)}function o(a,b,c){k.error({tag:a,...s(c)},b)}function p(a,b,c){k.info({tag:"HTTP",method:a,path:b,...s(c)},`📥 ${a} ${b}`)}function q(a,b,c){k[a<400?"info":"error"]({tag:"HTTP",status:a,duration:b,...s(c)},`📤 ${a} (${b}ms)`)}function r(a,b){k.debug({tag:"STREAM",event:a,...s(b)},`🌊 ${a}`)}function s(a){return a?"string"==typeof a?{detail:a}:"object"==typeof a?a:{detail:String(a)}:{}}},92280:(a,b,c)=>{Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(28208),e=c(47617),f=c(62018);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},92556:(a,b,c)=>{c.d(b,{$N:()=>e,J5:()=>d});let d=process.env.CORS_ORIGIN||"*",e={"Access-Control-Allow-Origin":d,"Access-Control-Allow-Methods":"GET, POST, PUT, DELETE, OPTIONS","Access-Control-Allow-Headers":"Content-Type, Authorization, x-api-key, anthropic-version"}},94755:(a,b,c)=>{c.d(b,{A:()=>i});var d=c(77598);let e={randomUUID:d.randomUUID},f=new Uint8Array(256),g=f.length;var h=c(50122);let i=function(a,b,c){if(e.randomUUID&&!b&&!a)return e.randomUUID();var i=a,j=c;let k=(i=i||{}).random??i.rng?.()??(g>f.length-16&&((0,d.randomFillSync)(f),g=0),f.slice(g,g+=16));if(k.length<16)throw Error("Random bytes length must be >= 16");if(k[6]=15&k[6]|64,k[8]=63&k[8]|128,b){if((j=j||0)<0||j+16>b.length)throw RangeError(`UUID byte range ${j}:${j+15} is out of buffer bounds`);for(let a=0;a<16;++a)b[j+a]=k[a];return b}return(0,h.k)(k)}}};
1
+ "use strict";exports.id=2760,exports.ids=[2760,4755],exports.modules={19225:(a,b,c)=>{a.exports=c(44870)},21020:(a,b,c)=>{c.d(b,{Pt:()=>k,Tr:()=>l,c1:()=>i,kI:()=>m,vk:()=>j});var d=c(22901),e=c(74163),f=c(83779);let g=Promise.resolve(),h=new Map;async function i(a,b=null){let c,h=g;g=new Promise(a=>{c=a});try{let c;await h;let g=await (0,d.getProviderConnections)({provider:a,isActive:!0});if(f.debug("AUTH",`${a} | total connections: ${g.length}, excludeId: ${b||"none"}`),0===g.length){let b=await (0,d.getProviderConnections)({provider:a});if(f.debug("AUTH",`${a} | all connections (incl inactive): ${b.length}`),b.length>0){let c=(0,e.UY)(b);if(c)return f.warn("AUTH",`${a} | all ${b.length} accounts rate limited (${(0,e.Qo)(c)})`),{allRateLimited:!0,retryAfter:c,retryAfterHuman:(0,e.Qo)(c)};f.warn("AUTH",`${a} | ${b.length} accounts found but none active`),b.forEach(a=>{f.debug("AUTH",` → ${a.id?.slice(0,8)} | isActive=${a.isActive} | rateLimitedUntil=${a.rateLimitedUntil||"none"} | testStatus=${a.testStatus}`)})}return f.warn("AUTH",`No credentials for ${a}`),null}let i=g.filter(a=>!(b&&a.id===b||(0,e.AO)(a.rateLimitedUntil)));if(f.debug("AUTH",`${a} | available: ${i.length}/${g.length}`),g.forEach(a=>{let c=b&&a.id===b,d=(0,e.AO)(a.rateLimitedUntil);(c||d)&&f.debug("AUTH",` → ${a.id?.slice(0,8)} | ${c?"excluded":""} ${d?`rateLimited until ${a.rateLimitedUntil}`:""}`)}),0===i.length){let b=(0,e.UY)(g);if(b){let c=g.filter(a=>a.rateLimitedUntil&&new Date(a.rateLimitedUntil).getTime()>Date.now()).sort((a,b)=>new Date(a.rateLimitedUntil).getTime()-new Date(b.rateLimitedUntil).getTime())[0];return f.warn("AUTH",`${a} | all ${g.length} active accounts rate limited (${(0,e.Qo)(b)}) | lastErrorCode=${c?.errorCode}, lastError=${c?.lastError?.slice(0,50)}`),{allRateLimited:!0,retryAfter:b,retryAfterHuman:(0,e.Qo)(b),lastError:c?.lastError||null,lastErrorCode:c?.errorCode||null}}return f.warn("AUTH",`${a} | all ${g.length} accounts unavailable`),null}let j=await (0,d.V7)(),k=j.fallbackStrategy||"fill-first";if("round-robin"===k){let a=j.stickyRoundRobinLimit||3,b=[...i].sort((a,b)=>a.lastUsedAt||b.lastUsedAt?a.lastUsedAt?b.lastUsedAt?new Date(b.lastUsedAt).getTime()-new Date(a.lastUsedAt).getTime():-1:1:(a.priority||999)-(b.priority||999))[0],e=b?.consecutiveUseCount||0;b&&b.lastUsedAt&&e<a?(c=b,await (0,d.rj)(c.id,{lastUsedAt:new Date().toISOString(),consecutiveUseCount:(c.consecutiveUseCount||0)+1})):(c=[...i].sort((a,b)=>a.lastUsedAt||b.lastUsedAt?a.lastUsedAt?b.lastUsedAt?new Date(a.lastUsedAt).getTime()-new Date(b.lastUsedAt).getTime():1:-1:(a.priority||999)-(b.priority||999))[0],await (0,d.rj)(c.id,{lastUsedAt:new Date().toISOString(),consecutiveUseCount:1}))}else if("p2c"===k)if(i.length<=2)c=i[0];else{let a=Math.floor(Math.random()*i.length),b=Math.floor(Math.random()*(i.length-1));b>=a&&b++;let d=i[a],e=i[b],f=(d.consecutiveUseCount||0)+10*!!d.lastError,g=(e.consecutiveUseCount||0)+10*!!e.lastError;c=f<=g?d:e}else if("random"===k){let a=Math.floor(Math.random()*i.length);c=i[a]}else c="least-used"===k?[...i].sort((a,b)=>a.lastUsedAt||b.lastUsedAt?a.lastUsedAt?b.lastUsedAt?new Date(a.lastUsedAt).getTime()-new Date(b.lastUsedAt).getTime():1:-1:(a.priority||999)-(b.priority||999))[0]:"cost-optimized"===k?[...i].sort((a,b)=>(a.priority||999)-(b.priority||999))[0]:i[0];return{apiKey:c.apiKey,accessToken:c.accessToken,refreshToken:c.refreshToken,expiresAt:c.tokenExpiresAt||c.expiresAt||null,projectId:c.projectId,copilotToken:c.providerSpecificData?.copilotToken,providerSpecificData:c.providerSpecificData,connectionId:c.id,testStatus:c.testStatus,lastError:c.lastError,rateLimitedUntil:c.rateLimitedUntil}}finally{c&&c()}}async function j(a,b,c,g=null,i=null){let k,l=h.get(a)||Promise.resolve();h.set(a,new Promise(a=>{k=a}));try{await l;let h=(await (0,d.getProviderConnections)({provider:g})).find(b=>b.id===a),j=h?.backoffLevel||0;if(h?.rateLimitedUntil&&new Date(h.rateLimitedUntil).getTime()>Date.now())return f.info("AUTH",`${a.slice(0,8)} already marked unavailable (until ${h.rateLimitedUntil}), skipping duplicate mark`),{shouldFallback:!0,cooldownMs:new Date(h.rateLimitedUntil).getTime()-Date.now()};let{shouldFallback:k,cooldownMs:m,newBackoffLevel:n,reason:o}=(0,e.hk)(b,c,j,i,g);if(!k)return{shouldFallback:!1,cooldownMs:0};let p=(0,e.vp)(m),q="string"==typeof c?c.slice(0,100):"Provider error";return await (0,d.rj)(a,{rateLimitedUntil:p,testStatus:"unavailable",lastError:q,errorCode:b,lastErrorAt:new Date().toISOString(),backoffLevel:n??j}),g&&i&&m>0&&(0,e.R7)(g,a,i,o||"unknown",m),g&&b&&q&&console.error(`❌ ${g} [${b}]: ${q}`),{shouldFallback:!0,cooldownMs:m}}finally{k&&k(),h.delete(a)}}async function k(a,b){("unavailable"===b.testStatus||b.lastError||b.rateLimitedUntil)&&(await (0,d.rj)(a,{testStatus:"active",lastError:null,lastErrorAt:null,rateLimitedUntil:null,backoffLevel:0}),f.info("AUTH",`Account ${a.slice(0,8)} error cleared`))}function l(a){let b=a.headers.get("Authorization");return b?.startsWith("Bearer ")?b.slice(7):null}async function m(a){return!!a&&await (0,d.ek)(a)}},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()}},83779:(a,b,c)=>{c.r(b),c.d(b,{debug:()=>l,error:()=>o,info:()=>m,maskKey:()=>j,request:()=>p,response:()=>q,stream:()=>r,warn:()=>n});var d=c(74552),e=c.n(d),f=c(33873),g=c(29021);function h(){let a="false"!==process.env.LOG_TO_FILE,b=process.env.LOG_FILE_PATH||(0,f.join)(process.cwd(),"logs/application/app.log");return{logToFile:a,logFilePath:b,maxFileSize:function(a){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}}(process.env.LOG_MAX_FILE_SIZE),retentionDays:parseInt(process.env.LOG_RETENTION_DAYS||String(7),10)}}let i={level:process.env.LOG_LEVEL||"info",base:{service:"omniroute"},timestamp:e().stdTimeFunctions.isoTime,formatters:{level:a=>({level:a})}};function j(a){return!a||a.length<8?"***":`${a.slice(0,4)}...${a.slice(-4)}`}let k=(function(){let a=h(),b=i.level||"info";if(a.logToFile)try{let d=h();if(d.logToFile){var c;let a;c=d.logFilePath,a=(0,f.dirname)(c),(0,g.existsSync)(a)||(0,g.mkdirSync)(a,{recursive:!0}),function(a,b){try{if(!(0,g.existsSync)(a)||(0,g.statSync)(a).size<b)return;let c=(0,f.dirname)(a),d=(0,f.extname)(a),e=(0,f.basename)(a,d),h=new Date,i=`${h.getFullYear()}-${String(h.getMonth()+1).padStart(2,"0")}-${String(h.getDate()).padStart(2,"0")}_${String(h.getHours()).padStart(2,"0")}${String(h.getMinutes()).padStart(2,"0")}${String(h.getSeconds()).padStart(2,"0")}`,j=(0,f.join)(c,`${e}.${i}${d}`);(0,g.renameSync)(a,j)}catch{}}(d.logFilePath,d.maxFileSize),function(a,b){try{let c=(0,f.dirname)(a);if(!(0,g.existsSync)(c))return;let d=(0,f.extname)(a),e=(0,f.basename)(a,d),h=(0,g.readdirSync)(c),i=Date.now()-24*b*36e5;for(let b of h)if(b.startsWith(e+".")&&b.endsWith(d)&&b!==(0,f.basename)(a)){let a=(0,f.join)(c,b);try{(0,g.statSync)(a).mtimeMs<i&&(0,g.unlinkSync)(a)}catch{}}}catch{}}(d.logFilePath,d.retentionDays)}let j=(0,f.resolve)(a.logFilePath);return e()({...i,transport:{targets:[{target:"pino/file",options:{destination:1},level:b},{target:"pino/file",options:{destination:j,mkdir:!0},level:b}]}})}catch{console.warn("[logger] Failed to set up file transport, falling back to console only")}return e()(i)})().child({module:"sse"});function l(a,b,c){k.debug({tag:a,...s(c)},b)}function m(a,b,c){k.info({tag:a,...s(c)},b)}function n(a,b,c){k.warn({tag:a,...s(c)},b)}function o(a,b,c){k.error({tag:a,...s(c)},b)}function p(a,b,c){k.info({tag:"HTTP",method:a,path:b,...s(c)},`📥 ${a} ${b}`)}function q(a,b,c){k[a<400?"info":"error"]({tag:"HTTP",status:a,duration:b,...s(c)},`📤 ${a} (${b}ms)`)}function r(a,b){k.debug({tag:"STREAM",event:a,...s(b)},`🌊 ${a}`)}function s(a){return a?"string"==typeof a?{detail:a}:"object"==typeof a?a:{detail:String(a)}:{}}},92280:(a,b,c)=>{Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(28208),e=c(47617),f=c(62018);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},92556:(a,b,c)=>{c.d(b,{$N:()=>e,J5:()=>d});let d=process.env.CORS_ORIGIN||"*",e={"Access-Control-Allow-Origin":d,"Access-Control-Allow-Methods":"GET, POST, PUT, DELETE, OPTIONS","Access-Control-Allow-Headers":"Content-Type, Authorization, x-api-key, anthropic-version"}},94755:(a,b,c)=>{c.d(b,{A:()=>i});var d=c(77598);let e={randomUUID:d.randomUUID},f=new Uint8Array(256),g=f.length;var h=c(50122);let i=function(a,b,c){if(e.randomUUID&&!b&&!a)return e.randomUUID();var i=a,j=c;let k=(i=i||{}).random??i.rng?.()??(g>f.length-16&&((0,d.randomFillSync)(f),g=0),f.slice(g,g+=16));if(k.length<16)throw Error("Random bytes length must be >= 16");if(k[6]=15&k[6]|64,k[8]=63&k[8]|128,b){if((j=j||0)<0||j+16>b.length)throw RangeError(`UUID byte range ${j}:${j+15} is out of buffer bounds`);for(let a=0;a<16;++a)b[j+a]=k[a];return b}return(0,h.k)(k)}}};
@@ -1,5 +1,5 @@
1
- "use strict";exports.id=2767,exports.ids=[2767],exports.modules={1308:(a,b,c)=>{c.d(b,{$E:()=>n,Kr:()=>t,UE:()=>u,YO:()=>p,getAllRateLimitStatus:()=>v,mg:()=>m,rh:()=>l});var d=c(57217),e=c.n(d);c(74163);var f=c(83596),g=c(60293);let h=new Map,i=new Set,j=!1,k={maxConcurrent:10,minTime:0,reservoir:null,reservoirRefreshAmount:null,reservoirRefreshInterval:null};async function l(){if(!j){j=!0;try{let{getProviderConnections:a}=await Promise.resolve().then(c.bind(c,40287)),b=await a(),d=0,j=0;for(let a of b)if(a.rateLimitProtection)i.add(a.id),d++;else if(a.provider&&"apikey"===(0,f.oQ)(a.provider)&&a.isActive){i.add(a.id),j++;let b=`${a.provider}:${a.id}`;h.has(b)||h.set(b,new(e())({maxConcurrent:g.DEFAULT_API_LIMITS.concurrentRequests,minTime:g.DEFAULT_API_LIMITS.minTimeBetweenRequests,reservoir:g.DEFAULT_API_LIMITS.requestsPerMinute,reservoirRefreshAmount:g.DEFAULT_API_LIMITS.requestsPerMinute,reservoirRefreshInterval:6e4,id:b}))}(d>0||j>0)&&console.log(`🛡️ [RATE-LIMIT] Loaded ${d} explicit + ${j} auto-enabled (API key) protection(s)`)}catch(a){console.error("[RATE-LIMIT] Failed to load settings:",a.message)}}}function m(a){i.add(a)}function n(a){for(let[b]of(i.delete(a),h))if(b.includes(a)){let a=h.get(b);a?.disconnect(),h.delete(b)}}function o(a,b,c=null){let d=c?`${a}:${b}:${c}`:`${a}:${b}`;if(!h.has(d)){let a=new(e())({...k,id:d});a.on("queued",()=>{let b=a.counts();b.QUEUED>0&&console.log(`⏳ [RATE-LIMIT] ${d} — ${b.QUEUED} request(s) queued, ${b.RUNNING} running`)}),h.set(d,a)}return h.get(d)}async function p(a,b,c,d){return i.has(b)?o(a,b,null).schedule(d):d()}let q={limit:"x-ratelimit-limit-requests",remaining:"x-ratelimit-remaining-requests",reset:"x-ratelimit-reset-requests",limitTokens:"x-ratelimit-limit-tokens",remainingTokens:"x-ratelimit-remaining-tokens",resetTokens:"x-ratelimit-reset-tokens",retryAfter:"retry-after",overLimit:"x-ratelimit-over-limit"},r={limit:"anthropic-ratelimit-requests-limit",remaining:"anthropic-ratelimit-requests-remaining",reset:"anthropic-ratelimit-requests-reset",limitTokens:"anthropic-ratelimit-input-tokens-limit",remainingTokens:"anthropic-ratelimit-input-tokens-remaining",resetTokens:"anthropic-ratelimit-input-tokens-reset",retryAfter:"retry-after"};function s(a){if(!a)return null;let b=a.match(/^(?:(\d+)h)?(?:(\d+)m(?!s))?(?:(\d+)s)?(?:(\d+)ms)?$/);if(b){let[,a,c,d,e]=b;return(3600*parseInt(a||0)+60*parseInt(c||0)+parseInt(d||0))*1e3+parseInt(e||0)}let c=parseFloat(a);if(!isNaN(c)&&c>0)return c>17e8?Math.max(0,1e3*c-Date.now()):1e3*c;try{let b=new Date(a);if(!isNaN(b.getTime()))return Math.max(0,b.getTime()-Date.now())}catch{}return null}function t(a,b,c,d,e=null){if(!i.has(b)||!c)return;let f=o(a,b,null),g="claude"===a||"anthropic"===a?r:q,h=a=>"function"==typeof c.get?c.get(a):c[a]||null,j=parseInt(h(g.limit)),k=parseInt(h(g.remaining)),l=h(g.reset),m=h(g.retryAfter),n=h(q.overLimit);if(429===d){let c=s(m)||6e4;console.log(`🚫 [RATE-LIMIT] ${a}:${b.slice(0,8)} — 429 received, pausing for ${Math.ceil(c/1e3)}s`),f.updateSettings({reservoir:0,reservoirRefreshAmount:j||60,reservoirRefreshInterval:c});return}if("yes"===n){console.log(`⚠️ [RATE-LIMIT] ${a}:${b.slice(0,8)} — near capacity, slowing down`),f.updateSettings({minTime:200});return}if(!isNaN(j)&&j>0){let c=s(l)||6e4,d={minTime:Math.max(0,Math.floor(6e4/j)-10)};!isNaN(k)&&(k<.1*j?(d.reservoir=k,d.reservoirRefreshAmount=j,d.reservoirRefreshInterval=c,console.log(`⚠️ [RATE-LIMIT] ${a}:${b.slice(0,8)} — ${k}/${j} remaining, throttling`)):k>.5*j&&(d.minTime=0,d.reservoir=null,d.reservoirRefreshAmount=null,d.reservoirRefreshInterval=null)),f.updateSettings(d)}}function u(a,b){let c=`${a}:${b}`,d=h.get(c);if(!d)return{enabled:i.has(b),active:!1,queued:0,running:0};let e=d.counts();return{enabled:i.has(b),active:!0,queued:e.QUEUED||0,running:e.RUNNING||0,executing:e.EXECUTING||0,done:e.DONE||0}}function v(){let a={};for(let[b,c]of h){let d=c.counts();a[b]={queued:d.QUEUED||0,running:d.RUNNING||0,executing:d.EXECUTING||0}}return a}},6327:(a,b,c)=>{function d({onDisconnect:a,log:b,provider:c,model:e}={}){let f=new AbortController,g=Date.now(),h=!1,i=null,j=a=>{let b=Date.now()-g,d=c?.toUpperCase()||"UNKNOWN";console.log(`[${new Date().toLocaleTimeString("en-US",{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"})}] 🌊 [STREAM] ${d} | ${e||"unknown"} | ${b}ms | ${a}`)};return{signal:f.signal,startTime:g,isConnected:()=>!h,handleDisconnect:(b="client_closed")=>{h||(h=!0,j(`disconnect: ${b}`),i=setTimeout(()=>{f.abort()},500),a?.({reason:b,duration:Date.now()-g}))},handleComplete:()=>{!h&&(h=!0,j("complete"),i&&(clearTimeout(i),i=null))},handleError:a=>{(i&&(clearTimeout(i),i=null),"AbortError"===a.name)?j("aborted"):j(`error: ${a.message}`)},abort:()=>f.abort()}}function e(a,b,c){var d;let e,f;return d={readable:a.body.pipeThrough(b),writable:{getWriter:()=>({abort:()=>{}})}},e=d.readable.getReader(),f=d.writable.getWriter(),new ReadableStream({async pull(a){if(!c.isConnected())return void a.close();try{let{done:b,value:d}=await e.read();if(b){c.handleComplete(),a.close();return}a.enqueue(d)}catch(b){c.handleError(b),a.error(b)}},cancel(a){c.handleDisconnect(a||"cancelled"),e.cancel(),f.abort()}})}c.d(b,{Jb:()=>e,jd:()=>d})},8550:(a,b,c)=>{c.d(b,{M:()=>d});function d(a,b){if(!a||"object"!=typeof a)return null;if(a.usage&&"object"==typeof a.usage&&void 0!==a.usage.prompt_tokens)return{prompt_tokens:a.usage.prompt_tokens||0,completion_tokens:a.usage.completion_tokens||0,cached_tokens:a.usage.prompt_tokens_details?.cached_tokens,reasoning_tokens:a.usage.completion_tokens_details?.reasoning_tokens};let c=a.response?.usage||a.usage;return c&&"object"==typeof c&&(void 0!==c.input_tokens||void 0!==c.output_tokens)?{prompt_tokens:c.input_tokens||0,completion_tokens:c.output_tokens||0,cached_tokens:c.cache_read_input_tokens,cache_creation_input_tokens:c.cache_creation_input_tokens,reasoning_tokens:c.reasoning_tokens||c.output_tokens_details?.reasoning_tokens}:a.usage&&"object"==typeof a.usage&&(void 0!==a.usage.input_tokens||void 0!==a.usage.output_tokens)?{prompt_tokens:a.usage.input_tokens||0,completion_tokens:a.usage.output_tokens||0,cache_read_input_tokens:a.usage.cache_read_input_tokens,cache_creation_input_tokens:a.usage.cache_creation_input_tokens}:a.usageMetadata&&"object"==typeof a.usageMetadata?{prompt_tokens:a.usageMetadata.promptTokenCount||0,completion_tokens:a.usageMetadata.candidatesTokenCount||0,reasoning_tokens:a.usageMetadata.thoughtsTokenCount}:null}},9315:(a,b,c)=>{let d;c.d(b,{Cb:()=>l,IL:()=>o,QS:()=>p,RE:()=>n,TZ:()=>q,gR:()=>k,yv:()=>m});var e=c(77598),f=c.n(e),g=c(44594),h=c(42910);let i={hits:0,misses:0,tokensSaved:0};function j(){return d||(d=new g.q({maxSize:parseInt(process.env.SEMANTIC_CACHE_MAX_SIZE||"500",10),defaultTTL:parseInt(process.env.SEMANTIC_CACHE_TTL_MS||"3600000",10)})),d}function k(a,b,c=0,d=1){var e;let g=JSON.stringify({model:a,messages:Array.isArray(e=b)?e.map(a=>({role:a.role||"user",content:"string"==typeof a.content?a.content:JSON.stringify(a.content)})):[],temperature:c,top_p:d});return f().createHash("sha256").update(g).digest("hex")}function l(a){let b=j().get(a);if(b)return i.hits++,i.tokensSaved+=b.tokensSaved||0,b.response;try{let b=(0,h.sm)(),c=b.prepare("SELECT response, tokens_saved FROM semantic_cache WHERE signature = ? AND expires_at > datetime('now')").get(a);if(c){let d=JSON.parse(c.response);return j().set(a,{response:d,tokensSaved:c.tokens_saved}),b.prepare("UPDATE semantic_cache SET hit_count = hit_count + 1 WHERE signature = ?").run(a),i.hits++,i.tokensSaved+=c.tokens_saved||0,d}}catch{}return i.misses++,null}function m(a,b,c,d=0,e=36e5){let g=parseInt(process.env.SEMANTIC_CACHE_TTL_MS||String(e),10);j().set(a,{response:c,tokensSaved:d},g);try{let e=(0,h.sm)(),i=f().randomUUID(),j=a.slice(0,16),k=new Date().toISOString(),l=new Date(Date.now()+g).toISOString();e.prepare(`INSERT OR REPLACE INTO semantic_cache (id, signature, model, prompt_hash, response, tokens_saved, hit_count, created_at, expires_at)
2
- VALUES (?, ?, ?, ?, ?, ?, 0, ?, ?)`).run(i,a,b,j,JSON.stringify(c),d,k,l)}catch{}}function n(){try{return(0,h.sm)().prepare("DELETE FROM semantic_cache WHERE expires_at <= datetime('now')").run().changes}catch{return 0}}function o(){j().clear();try{(0,h.sm)().prepare("DELETE FROM semantic_cache").run()}catch{}i={hits:0,misses:0,tokensSaved:0}}function p(){let a=j().getStats(),b=0;try{let a=(0,h.sm)().prepare("SELECT COUNT(*) as count FROM semantic_cache WHERE expires_at > datetime('now')").get();b=a?.count||0}catch{}let c=i.hits+i.misses;return{memoryEntries:a.size,dbEntries:b,hits:i.hits,misses:i.misses,hitRate:c>0?(i.hits/c*100).toFixed(1):"0.0",tokensSaved:i.tokensSaved}}function q(a,b){return b?.get?.("x-omniroute-no-cache")!=="true"&&!1===a.stream&&(a.temperature??0)===0}},9686:(a,b,c)=>{c.d(b,{eU:()=>i,vN:()=>h});var d=c(83779),e=c(40287),f=c(87068);let g=f.oD;async function h(a,b){try{let c={};b.accessToken&&(c.accessToken=b.accessToken),b.refreshToken&&(c.refreshToken=b.refreshToken),b.expiresIn&&(c.expiresAt=new Date(Date.now()+1e3*b.expiresIn).toISOString(),c.expiresIn=b.expiresIn),b.providerSpecificData&&(c.providerSpecificData=b.providerSpecificData);let f=await (0,e.rj)(a,c);return d.info("TOKEN_REFRESH","Credentials updated in localDb",{connectionId:a,success:!!f}),!!f}catch(b){return d.error("TOKEN_REFRESH","Error updating credentials in localDb",{connectionId:a,error:b.message}),!1}}async function i(a,b){let c={...b};if(c.expiresAt){let b=new Date(c.expiresAt).getTime(),e=Date.now();if(b-e<g){let g;d.info("TOKEN_REFRESH","Token expiring soon, refreshing proactively",{provider:a,expiresIn:Math.round((b-e)/1e3)});let i=await (g=c,(0,f.iD)(a,g,d));i&&i.accessToken&&(await h(c.connectionId,i),c={...c,accessToken:i.accessToken,refreshToken:i.refreshToken||c.refreshToken,expiresAt:i.expiresIn?new Date(Date.now()+1e3*i.expiresIn).toISOString():c.expiresAt})}}if("github"===a&&c.providerSpecificData?.copilotTokenExpiresAt){let b=1e3*c.providerSpecificData.copilotTokenExpiresAt,e=Date.now();if(b-e<g){let g;d.info("TOKEN_REFRESH","Copilot token expiring soon, refreshing proactively",{provider:a,expiresIn:Math.round((b-e)/1e3)});let i=await (g=c.accessToken,(0,f.jR)(g,d));i&&(await h(c.connectionId,{providerSpecificData:{...c.providerSpecificData,copilotToken:i.token,copilotTokenExpiresAt:i.expiresAt}}),c.providerSpecificData={...c.providerSpecificData,copilotToken:i.token,copilotTokenExpiresAt:i.expiresAt})}}return c}},12767:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{P:()=>A});var e=c(21020),f=c(13961),g=c(99939),h=c(32113),i=c(69590),j=c(71861),k=c(17669),l=c(60293),m=c(23969),n=c(76340),o=c(83779),p=c(9686),q=c(40287),r=c(34493),s=c(26510),t=c(77458),u=c(12620),v=c(20864),w=c(44057),x=c(59545),y=c(78790),z=a([i]);async function A(a,b=null){let c,d=(0,x.KZ)(),h=new w.TT(d);try{h.startPhase("parse"),c=await a.json(),h.endPhase()}catch{return o.warn("CHAT","Invalid JSON body"),(0,j.yj)(l.gx.BAD_REQUEST,"Invalid JSON body")}h.startPhase("validate");let i=(0,t.Jh)(c,o);if(i.blocked)return o.warn("SANITIZER","Request blocked due to prompt injection",{detections:i.detections}),(0,j.yj)(l.gx.BAD_REQUEST,"Request rejected: suspicious content detected");i.modified&&i.sanitizedBody&&(c=i.sanitizedBody),h.endPhase(),b||(b={endpoint:new URL(a.url).pathname,body:c,headers:Object.fromEntries(a.headers.entries())});let m=new URL(a.url),n=c.model,p=c.messages?.length||c.input?.length||0,r=c.tools?.length||0,s=c.reasoning_effort||c.reasoning?.effort||null;o.request("POST",`${m.pathname} | ${n} | ${p} msgs${r?` | ${r} tools`:""}${s?` | effort=${s}`:""}`);let u=a.headers.get("Authorization"),z=(0,e.Tr)(a),C=null;if(u&&z){let a=o.maskKey(z);o.debug("AUTH",`API Key: ${a}`);try{C=await (0,q.v9)(z)}catch{C=null}}else o.debug("AUTH","No API key provided (local mode)");if("true"===process.env.REQUIRE_API_KEY){if(!z)return o.warn("AUTH","Missing API key while REQUIRE_API_KEY=true"),(0,j.yj)(l.gx.UNAUTHORIZED,"Missing API key");if(!await (0,e.kI)(z))return o.warn("AUTH","Invalid API key while REQUIRE_API_KEY=true"),(0,j.yj)(l.gx.UNAUTHORIZED,"Invalid API key")}if(!n)return o.warn("CHAT","Missing model"),(0,j.yj)(l.gx.BAD_REQUEST,"Missing model");if(h.startPhase("policy"),C?.id)try{let a=(0,y.Ik)(C.id);if(!a.allowed)return o.warn("BUDGET",`API key ${C.id} exceeded budget: ${a.reason}`),(0,j.yj)(429,a.reason||"Budget limit exceeded")}catch{}h.endPhase(),h.startPhase("resolve");let D=await (0,f.$m)(n);if(D){o.info("CHAT",`Combo "${n}" [${D.strategy||"priority"}] with ${D.models.length} models`);let d=async a=>{let b=(0,g.Xh)(a),c=b.provider;if(!c)return!0;if(!(0,v.fj)(c,b.model||a))return o.debug("AVAILABILITY",`${c}/${b.model} in cooldown, skipping`),!1;let d=await (0,e.c1)(c);return!!d&&!d.allRateLimited},[f,i]=await Promise.all([(0,q.mt)().catch(()=>({})),(0,q.Uv)().catch(()=>[])]);h.endPhase();let j=await (0,k.Pr)({body:c,combo:D,handleSingleModel:(c,d)=>B(c,d,b,a,D.name,C,h),isModelAvailable:d,log:o,settings:f,allCombos:i});return(0,w.N3)(h),j}h.endPhase();let E=await B(c,n,b,a,null,C,h);return(0,w.N3)(h),E}async function B(a,b,c=null,d=null,f=null,g=null,h=null){var i,k;let m=await C(b,a);if(m.error)return m.error;let{provider:n,model:q,sourceFormat:t,targetFormat:w}=m,x=(i=n,k=q,(0,v.fj)(i,k)?(0,u.getCircuitBreaker)(i,{failureThreshold:5,resetTimeout:3e4,onStateChange:(a,b,c)=>o.info("CIRCUIT",`${a}: ${b} → ${c}`)}).canExecute()?null:(o.warn("CIRCUIT",`Circuit breaker OPEN for ${i}, rejecting request`),(0,j.wO)(l.gx.SERVICE_UNAVAILABLE,`Provider ${i} circuit breaker is open`,30)):(o.warn("AVAILABILITY",`${i}/${k} is in cooldown, rejecting request`),(0,j.wO)(l.gx.SERVICE_UNAVAILABLE,`Model ${i}/${k} is temporarily unavailable (cooldown)`,30)));if(x)return x;let z=(0,u.getCircuitBreaker)(n,{failureThreshold:5,resetTimeout:3e4,onStateChange:(a,b,c)=>o.info("CIRCUIT",`${a}: ${b} → ${c}`)}),A=d?.headers?.get("user-agent")||"",F=null,G=null,H=null;for(;;){let b=await (0,e.c1)(n,F);if(!b||b.allRateLimited)return function(a,b,c,d,e,f){if(a?.allRateLimited){let b=e||a.lastError||"Unavailable",g=f||Number(a.lastErrorCode)||l.gx.SERVICE_UNAVAILABLE;return o.warn("CHAT",`[${c}/${d}] ${b} (${a.retryAfterHuman})`),(0,j.wO)(g,`[${c}/${d}] ${b}`,a.retryAfter,a.retryAfterHuman)}return b?(o.warn("CHAT","No more accounts available",{provider:c}),(0,j.yj)(f||l.gx.SERVICE_UNAVAILABLE,e||"All accounts unavailable")):(o.error("AUTH",`No credentials for provider: ${c}`),(0,j.yj)(l.gx.BAD_REQUEST,`No credentials for provider: ${c}`))}(b,F,n,q,G,H);let d=b.connectionId.slice(0,8);o.info("AUTH",`Using ${n} account: ${d}...`);let i=await (0,p.eU)(n,b),k=await E(b.connectionId),m=Date.now();h&&h.startPhase("connect");let{result:u,tlsFingerprintUsed:x}=await D({breaker:z,body:a,provider:n,model:q,refreshedCredentials:i,proxyInfo:k,log:o,clientRawRequest:c,credentials:b,apiKeyInfo:g,userAgent:A,comboName:f});h&&h.endPhase();let B=Date.now()-m;if(function({result:a,proxyInfo:b,proxyLatency:c,provider:d,model:e,sourceFormat:f,targetFormat:g,credentials:h,comboName:i,clientRawRequest:j,tlsFingerprintUsed:k=!1}){try{(0,r.pq)({status:a.success?"success":408===a.status||504===a.status?"timeout":"error",proxy:b?.proxy||null,level:b?.level||"direct",levelId:b?.levelId||null,provider:d,targetUrl:`${d}/${e}`,latencyMs:c,error:a.success?null:a.error||null,connectionId:h.connectionId,comboId:i||null,account:h.connectionId?.slice(0,8)||null,tlsFingerprint:k})}catch{}try{(0,s.MR)({provider:d,model:e,sourceFormat:f,targetFormat:g,status:a.success?"success":"error",statusCode:a.success?200:a.status||500,latency:c,endpoint:j?.endpoint||"/v1/chat/completions",connectionId:h.connectionId||null,comboName:i||null})}catch{}}({result:u,proxyInfo:k,proxyLatency:B,provider:n,model:q,sourceFormat:t,targetFormat:w,credentials:b,comboName:f,clientRawRequest:c,tlsFingerprintUsed:x}),u.success)return function(a,b){if(a?.id)try{let c=b.usage||{},d=((c.prompt_tokens||0)+(c.completion_tokens||0))*1e-6;d>0&&(0,y.n5)(a.id,d)}catch{}}(g,u),h&&h.startPhase("finalize"),h&&h.endPhase(),u.response;(429===u.status||503===u.status)&&((0,v.gC)(n,q,6e4,`HTTP ${u.status}`),o.info("AVAILABILITY",`${n}/${q} marked unavailable for 60s (HTTP ${u.status})`));let{shouldFallback:C}=await (0,e.vk)(b.connectionId,u.status,u.error,n);if(C){o.warn("AUTH",`Account ${d}... unavailable (${u.status}), trying fallback`),F=b.connectionId,G=u.error,H=u.status;continue}return u.response}}async function C(a,b){let c=await (0,f.mA)(a);if(!c.provider){if("ambiguous_model"===c.errorType){let b=c.errorMessage||`Ambiguous model '${a}'. Use provider/model prefix (ex: gh/${a} or cc/${a}).`;return o.warn("CHAT",b,{model:a,candidates:c.candidateAliases||c.candidateProviders||[]}),{error:(0,j.yj)(l.gx.BAD_REQUEST,b)}}return o.warn("CHAT","Invalid model format",{model:a}),{error:(0,j.yj)(l.gx.BAD_REQUEST,"Invalid model format")}}let{provider:d,model:e}=c,g=(0,h.Tz)(b),i=m.PROVIDER_ID_TO_ALIAS[d]||d,k=(0,m.ux)(i,e)||(0,h.jJ)(d);return a!==`${d}/${e}`?o.info("ROUTING",`${a} → ${d}/${e}`):o.info("ROUTING",`Provider: ${d}, Model: ${e}`),{provider:d,model:e,sourceFormat:g,targetFormat:k}}async function D({breaker:a,body:b,provider:c,model:d,refreshedCredentials:f,proxyInfo:g,log:h,clientRawRequest:k,credentials:m,apiKeyInfo:q,userAgent:r,comboName:s}){try{let j=()=>(0,n.jf)(g?.proxy||null,()=>(0,i.w)({body:{...b,model:`${c}/${d}`},modelInfo:{provider:c,model:d},credentials:f,log:h,clientRawRequest:k,connectionId:m.connectionId,apiKeyInfo:q,userAgent:r,comboName:s,onCredentialsRefreshed:async a=>{await (0,p.vN)(m.connectionId,{accessToken:a.accessToken,refreshToken:a.refreshToken,providerSpecificData:a.providerSpecificData,testStatus:"active"})},onRequestSuccess:async()=>{await (0,e.Pt)(m.connectionId,m)}}));if(!g?.proxy&&(0,n.Wk)()){let b=await a.execute(async()=>(0,n.qT)(j));return{result:b.result,tlsFingerprintUsed:b.tlsFingerprintUsed}}return{result:await a.execute(j),tlsFingerprintUsed:!1}}catch(a){if(a instanceof u.ez)return o.warn("CIRCUIT",`${c} circuit open during retry: ${a.message}`),{result:{success:!1,response:(0,j.wO)(l.gx.SERVICE_UNAVAILABLE,`Provider ${c} circuit breaker is open`,Math.ceil(a.retryAfterMs/1e3)),status:l.gx.SERVICE_UNAVAILABLE},tlsFingerprintUsed:!1};throw a}}async function E(a){try{return await (0,q.YD)(a)}catch(a){return o.debug("PROXY",`Failed to resolve proxy: ${a.message}`),null}}i=(z.then?(await z)():z)[0],d()}catch(a){d(a)}})},13961:(a,b,c)=>{c.d(b,{$m:()=>g,mA:()=>f});var d=c(40287),e=c(99939);async function f(a){let b=(0,e.Xh)(a);if(!b.isAlias){if(b.provider===b.providerAlias){let a=(await (0,d.Fh)({type:"openai-compatible"})).find(a=>a.prefix===b.providerAlias);if(a)return{provider:a.id,model:b.model};let c=(await (0,d.Fh)({type:"anthropic-compatible"})).find(a=>a.prefix===b.providerAlias);if(c)return{provider:c.id,model:b.model}}return(0,e.js)(a,null)}return(0,e.js)(a,d.OM)}async function g(a){let b=await (0,d.Dj)(a);return b&&b.models&&b.models.length>0?b:null}},20864:(a,b,c)=>{c.d(b,{DQ:()=>h,GX:()=>j,Wj:()=>i,fj:()=>f,gC:()=>g});let d=new Map;function e(a,b){return`${a}::${b}`}function f(a,b){let c=e(a,b),f=d.get(c);return!f||Date.now()-f.unavailableSince>=f.cooldownMs&&(d.delete(c),!0)}function g(a,b,c=6e4,f){let h=e(a,b);d.set(h,{provider:a,model:b,unavailableSince:Date.now(),cooldownMs:c,reason:f||"unknown"})}function h(a,b){return d.delete(e(a,b))}function i(){let a=Date.now(),b=[];for(let[c,e]of d.entries()){let f=a-e.unavailableSince;if(f>=e.cooldownMs){d.delete(c);continue}b.push({provider:e.provider,model:e.model,reason:e.reason||"unknown",remainingMs:e.cooldownMs-f,unavailableSince:new Date(e.unavailableSince).toISOString()})}return b}function j(){return i(),d.size}},26510:(a,b,c)=>{function d(){return globalThis.__translatorEvents||(globalThis.__translatorEvents=[]),globalThis.__translatorEvents}function e(a){if(!a||"object"!=typeof a)return;let b=d();b.unshift({id:`evt_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,timestamp:new Date().toISOString(),...a}),b.length>200&&(b.length=200)}function f(a=50){let b=Number(a),c=Number.isFinite(b)&&b>0?Math.min(Math.floor(b),200):50,e=d();return{events:e.slice(0,c),total:e.length}}c.d(b,{MR:()=>e,zS:()=>f})},26695:(a,b,c)=>{c.d(b,{lm:()=>g.lm,l2:()=>q,i5:()=>p,v8:()=>j});var d=c(89575),e=c(55120),f=c(27230),g=c(50101);function h(a){if(!a)return null;let b=a.trimStart();if(!b||100!==b.charCodeAt(0))return null;let c=b.slice(5).trim();if("[DONE]"===c)return{done:!0};try{return JSON.parse(c)}catch(a){return c.length>0&&console.log(`[WARN] Failed to parse SSE line (${c.length} chars): ${c.substring(0,200)}...`),null}}function i(a,b){if(b===e.h.OPENAI&&a.choices?.[0]?.delta){let b=a.choices[0].delta;return b.content&&""!==b.content||b.reasoning_content&&""!==b.reasoning_content||b.tool_calls&&b.tool_calls.length>0||a.choices[0].finish_reason||b.role}if(b===e.h.CLAUDE){let b="content_block_delta"===a.type,c=a.delta?.text&&""!==a.delta.text,d=a.delta?.thinking&&""!==a.delta.thinking,e=a.delta?.partial_json&&""!==a.delta.partial_json;return!b||!!c||!!d||!!e}if(b===e.h.GEMINI&&a.candidates?.[0]){let b=a.candidates[0];if(b.finishReason)return!0;let c=b.content?.parts;return!!c&&0!==c.length&&c.some(a=>a.text&&""!==a.text||a.functionCall||a.executableCode)}return!0}function j(a,b){return null==a?"data: null\n\n":a&&a.done?"data: [DONE]\n\n":a&&a.event&&a.data?`event: ${a.event}
1
+ "use strict";exports.id=2767,exports.ids=[2767],exports.modules={1308:(a,b,c)=>{c.d(b,{$E:()=>n,Kr:()=>t,UE:()=>u,YO:()=>p,getAllRateLimitStatus:()=>v,mg:()=>m,rh:()=>l});var d=c(57217),e=c.n(d);c(74163);var f=c(83596),g=c(60293);let h=new Map,i=new Set,j=!1,k={maxConcurrent:10,minTime:0,reservoir:null,reservoirRefreshAmount:null,reservoirRefreshInterval:null};async function l(){if(!j){j=!0;try{let{getProviderConnections:a}=await Promise.resolve().then(c.bind(c,22901)),b=await a(),d=0,j=0;for(let a of b)if(a.rateLimitProtection)i.add(a.id),d++;else if(a.provider&&"apikey"===(0,f.oQ)(a.provider)&&a.isActive){i.add(a.id),j++;let b=`${a.provider}:${a.id}`;h.has(b)||h.set(b,new(e())({maxConcurrent:g.DEFAULT_API_LIMITS.concurrentRequests,minTime:g.DEFAULT_API_LIMITS.minTimeBetweenRequests,reservoir:g.DEFAULT_API_LIMITS.requestsPerMinute,reservoirRefreshAmount:g.DEFAULT_API_LIMITS.requestsPerMinute,reservoirRefreshInterval:6e4,id:b}))}(d>0||j>0)&&console.log(`🛡️ [RATE-LIMIT] Loaded ${d} explicit + ${j} auto-enabled (API key) protection(s)`)}catch(a){console.error("[RATE-LIMIT] Failed to load settings:",a.message)}}}function m(a){i.add(a)}function n(a){for(let[b]of(i.delete(a),h))if(b.includes(a)){let a=h.get(b);a?.disconnect(),h.delete(b)}}function o(a,b,c=null){let d=c?`${a}:${b}:${c}`:`${a}:${b}`;if(!h.has(d)){let a=new(e())({...k,id:d});a.on("queued",()=>{let b=a.counts();b.QUEUED>0&&console.log(`⏳ [RATE-LIMIT] ${d} — ${b.QUEUED} request(s) queued, ${b.RUNNING} running`)}),h.set(d,a)}return h.get(d)}async function p(a,b,c,d){return i.has(b)?o(a,b,null).schedule(d):d()}let q={limit:"x-ratelimit-limit-requests",remaining:"x-ratelimit-remaining-requests",reset:"x-ratelimit-reset-requests",limitTokens:"x-ratelimit-limit-tokens",remainingTokens:"x-ratelimit-remaining-tokens",resetTokens:"x-ratelimit-reset-tokens",retryAfter:"retry-after",overLimit:"x-ratelimit-over-limit"},r={limit:"anthropic-ratelimit-requests-limit",remaining:"anthropic-ratelimit-requests-remaining",reset:"anthropic-ratelimit-requests-reset",limitTokens:"anthropic-ratelimit-input-tokens-limit",remainingTokens:"anthropic-ratelimit-input-tokens-remaining",resetTokens:"anthropic-ratelimit-input-tokens-reset",retryAfter:"retry-after"};function s(a){if(!a)return null;let b=a.match(/^(?:(\d+)h)?(?:(\d+)m(?!s))?(?:(\d+)s)?(?:(\d+)ms)?$/);if(b){let[,a,c,d,e]=b;return(3600*parseInt(a||0)+60*parseInt(c||0)+parseInt(d||0))*1e3+parseInt(e||0)}let c=parseFloat(a);if(!isNaN(c)&&c>0)return c>17e8?Math.max(0,1e3*c-Date.now()):1e3*c;try{let b=new Date(a);if(!isNaN(b.getTime()))return Math.max(0,b.getTime()-Date.now())}catch{}return null}function t(a,b,c,d,e=null){if(!i.has(b)||!c)return;let f=o(a,b,null),g="claude"===a||"anthropic"===a?r:q,h=a=>"function"==typeof c.get?c.get(a):c[a]||null,j=parseInt(h(g.limit)),k=parseInt(h(g.remaining)),l=h(g.reset),m=h(g.retryAfter),n=h(q.overLimit);if(429===d){let c=s(m)||6e4;console.log(`🚫 [RATE-LIMIT] ${a}:${b.slice(0,8)} — 429 received, pausing for ${Math.ceil(c/1e3)}s`),f.updateSettings({reservoir:0,reservoirRefreshAmount:j||60,reservoirRefreshInterval:c});return}if("yes"===n){console.log(`⚠️ [RATE-LIMIT] ${a}:${b.slice(0,8)} — near capacity, slowing down`),f.updateSettings({minTime:200});return}if(!isNaN(j)&&j>0){let c=s(l)||6e4,d={minTime:Math.max(0,Math.floor(6e4/j)-10)};!isNaN(k)&&(k<.1*j?(d.reservoir=k,d.reservoirRefreshAmount=j,d.reservoirRefreshInterval=c,console.log(`⚠️ [RATE-LIMIT] ${a}:${b.slice(0,8)} — ${k}/${j} remaining, throttling`)):k>.5*j&&(d.minTime=0,d.reservoir=null,d.reservoirRefreshAmount=null,d.reservoirRefreshInterval=null)),f.updateSettings(d)}}function u(a,b){let c=`${a}:${b}`,d=h.get(c);if(!d)return{enabled:i.has(b),active:!1,queued:0,running:0};let e=d.counts();return{enabled:i.has(b),active:!0,queued:e.QUEUED||0,running:e.RUNNING||0,executing:e.EXECUTING||0,done:e.DONE||0}}function v(){let a={};for(let[b,c]of h){let d=c.counts();a[b]={queued:d.QUEUED||0,running:d.RUNNING||0,executing:d.EXECUTING||0}}return a}},6327:(a,b,c)=>{function d({onDisconnect:a,log:b,provider:c,model:e}={}){let f=new AbortController,g=Date.now(),h=!1,i=null,j=a=>{let b=Date.now()-g,d=c?.toUpperCase()||"UNKNOWN";console.log(`[${new Date().toLocaleTimeString("en-US",{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"})}] 🌊 [STREAM] ${d} | ${e||"unknown"} | ${b}ms | ${a}`)};return{signal:f.signal,startTime:g,isConnected:()=>!h,handleDisconnect:(b="client_closed")=>{h||(h=!0,j(`disconnect: ${b}`),i=setTimeout(()=>{f.abort()},500),a?.({reason:b,duration:Date.now()-g}))},handleComplete:()=>{!h&&(h=!0,j("complete"),i&&(clearTimeout(i),i=null))},handleError:a=>{(i&&(clearTimeout(i),i=null),"AbortError"===a.name)?j("aborted"):j(`error: ${a.message}`)},abort:()=>f.abort()}}function e(a,b,c){var d;let e,f;return d={readable:a.body.pipeThrough(b),writable:{getWriter:()=>({abort:()=>{}})}},e=d.readable.getReader(),f=d.writable.getWriter(),new ReadableStream({async pull(a){if(!c.isConnected())return void a.close();try{let{done:b,value:d}=await e.read();if(b){c.handleComplete(),a.close();return}a.enqueue(d)}catch(b){c.handleError(b),a.error(b)}},cancel(a){c.handleDisconnect(a||"cancelled"),e.cancel(),f.abort()}})}c.d(b,{Jb:()=>e,jd:()=>d})},8550:(a,b,c)=>{c.d(b,{M:()=>d});function d(a,b){if(!a||"object"!=typeof a)return null;if(a.usage&&"object"==typeof a.usage&&void 0!==a.usage.prompt_tokens)return{prompt_tokens:a.usage.prompt_tokens||0,completion_tokens:a.usage.completion_tokens||0,cached_tokens:a.usage.prompt_tokens_details?.cached_tokens,reasoning_tokens:a.usage.completion_tokens_details?.reasoning_tokens};let c=a.response?.usage||a.usage;return c&&"object"==typeof c&&(void 0!==c.input_tokens||void 0!==c.output_tokens)?{prompt_tokens:c.input_tokens||0,completion_tokens:c.output_tokens||0,cached_tokens:c.cache_read_input_tokens,cache_creation_input_tokens:c.cache_creation_input_tokens,reasoning_tokens:c.reasoning_tokens||c.output_tokens_details?.reasoning_tokens}:a.usage&&"object"==typeof a.usage&&(void 0!==a.usage.input_tokens||void 0!==a.usage.output_tokens)?{prompt_tokens:a.usage.input_tokens||0,completion_tokens:a.usage.output_tokens||0,cache_read_input_tokens:a.usage.cache_read_input_tokens,cache_creation_input_tokens:a.usage.cache_creation_input_tokens}:a.usageMetadata&&"object"==typeof a.usageMetadata?{prompt_tokens:a.usageMetadata.promptTokenCount||0,completion_tokens:a.usageMetadata.candidatesTokenCount||0,reasoning_tokens:a.usageMetadata.thoughtsTokenCount}:null}},9315:(a,b,c)=>{let d;c.d(b,{Cb:()=>l,IL:()=>o,QS:()=>p,RE:()=>n,TZ:()=>q,gR:()=>k,yv:()=>m});var e=c(77598),f=c.n(e),g=c(44594),h=c(42910);let i={hits:0,misses:0,tokensSaved:0};function j(){return d||(d=new g.q({maxSize:parseInt(process.env.SEMANTIC_CACHE_MAX_SIZE||"500",10),defaultTTL:parseInt(process.env.SEMANTIC_CACHE_TTL_MS||"3600000",10)})),d}function k(a,b,c=0,d=1){var e;let g=JSON.stringify({model:a,messages:Array.isArray(e=b)?e.map(a=>({role:a.role||"user",content:"string"==typeof a.content?a.content:JSON.stringify(a.content)})):[],temperature:c,top_p:d});return f().createHash("sha256").update(g).digest("hex")}function l(a){let b=j().get(a);if(b)return i.hits++,i.tokensSaved+=b.tokensSaved||0,b.response;try{let b=(0,h.sm)(),c=b.prepare("SELECT response, tokens_saved FROM semantic_cache WHERE signature = ? AND expires_at > datetime('now')").get(a);if(c){let d=JSON.parse(c.response);return j().set(a,{response:d,tokensSaved:c.tokens_saved}),b.prepare("UPDATE semantic_cache SET hit_count = hit_count + 1 WHERE signature = ?").run(a),i.hits++,i.tokensSaved+=c.tokens_saved||0,d}}catch{}return i.misses++,null}function m(a,b,c,d=0,e=36e5){let g=parseInt(process.env.SEMANTIC_CACHE_TTL_MS||String(e),10);j().set(a,{response:c,tokensSaved:d},g);try{let e=(0,h.sm)(),i=f().randomUUID(),j=a.slice(0,16),k=new Date().toISOString(),l=new Date(Date.now()+g).toISOString();e.prepare(`INSERT OR REPLACE INTO semantic_cache (id, signature, model, prompt_hash, response, tokens_saved, hit_count, created_at, expires_at)
2
+ VALUES (?, ?, ?, ?, ?, ?, 0, ?, ?)`).run(i,a,b,j,JSON.stringify(c),d,k,l)}catch{}}function n(){try{return(0,h.sm)().prepare("DELETE FROM semantic_cache WHERE expires_at <= datetime('now')").run().changes}catch{return 0}}function o(){j().clear();try{(0,h.sm)().prepare("DELETE FROM semantic_cache").run()}catch{}i={hits:0,misses:0,tokensSaved:0}}function p(){let a=j().getStats(),b=0;try{let a=(0,h.sm)().prepare("SELECT COUNT(*) as count FROM semantic_cache WHERE expires_at > datetime('now')").get();b=a?.count||0}catch{}let c=i.hits+i.misses;return{memoryEntries:a.size,dbEntries:b,hits:i.hits,misses:i.misses,hitRate:c>0?(i.hits/c*100).toFixed(1):"0.0",tokensSaved:i.tokensSaved}}function q(a,b){return b?.get?.("x-omniroute-no-cache")!=="true"&&!1===a.stream&&(a.temperature??0)===0}},9686:(a,b,c)=>{c.d(b,{eU:()=>i,vN:()=>h});var d=c(83779),e=c(22901),f=c(87068);let g=f.oD;async function h(a,b){try{let c={};b.accessToken&&(c.accessToken=b.accessToken),b.refreshToken&&(c.refreshToken=b.refreshToken),b.expiresIn&&(c.expiresAt=new Date(Date.now()+1e3*b.expiresIn).toISOString(),c.expiresIn=b.expiresIn),b.providerSpecificData&&(c.providerSpecificData=b.providerSpecificData);let f=await (0,e.rj)(a,c);return d.info("TOKEN_REFRESH","Credentials updated in localDb",{connectionId:a,success:!!f}),!!f}catch(b){return d.error("TOKEN_REFRESH","Error updating credentials in localDb",{connectionId:a,error:b.message}),!1}}async function i(a,b){let c={...b};if(c.expiresAt){let b=new Date(c.expiresAt).getTime(),e=Date.now();if(b-e<g){let g;d.info("TOKEN_REFRESH","Token expiring soon, refreshing proactively",{provider:a,expiresIn:Math.round((b-e)/1e3)});let i=await (g=c,(0,f.iD)(a,g,d));i&&i.accessToken&&(await h(c.connectionId,i),c={...c,accessToken:i.accessToken,refreshToken:i.refreshToken||c.refreshToken,expiresAt:i.expiresIn?new Date(Date.now()+1e3*i.expiresIn).toISOString():c.expiresAt})}}if("github"===a&&c.providerSpecificData?.copilotTokenExpiresAt){let b=1e3*c.providerSpecificData.copilotTokenExpiresAt,e=Date.now();if(b-e<g){let g;d.info("TOKEN_REFRESH","Copilot token expiring soon, refreshing proactively",{provider:a,expiresIn:Math.round((b-e)/1e3)});let i=await (g=c.accessToken,(0,f.jR)(g,d));i&&(await h(c.connectionId,{providerSpecificData:{...c.providerSpecificData,copilotToken:i.token,copilotTokenExpiresAt:i.expiresAt}}),c.providerSpecificData={...c.providerSpecificData,copilotToken:i.token,copilotTokenExpiresAt:i.expiresAt})}}return c}},12767:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{P:()=>A});var e=c(21020),f=c(13961),g=c(99939),h=c(32113),i=c(69590),j=c(71861),k=c(17669),l=c(60293),m=c(23969),n=c(76340),o=c(83779),p=c(9686),q=c(22901),r=c(34493),s=c(26510),t=c(77458),u=c(12620),v=c(20864),w=c(44057),x=c(59545),y=c(78790),z=a([i]);async function A(a,b=null){let c,d=(0,x.KZ)(),h=new w.TT(d);try{h.startPhase("parse"),c=await a.json(),h.endPhase()}catch{return o.warn("CHAT","Invalid JSON body"),(0,j.yj)(l.gx.BAD_REQUEST,"Invalid JSON body")}h.startPhase("validate");let i=(0,t.Jh)(c,o);if(i.blocked)return o.warn("SANITIZER","Request blocked due to prompt injection",{detections:i.detections}),(0,j.yj)(l.gx.BAD_REQUEST,"Request rejected: suspicious content detected");i.modified&&i.sanitizedBody&&(c=i.sanitizedBody),h.endPhase(),b||(b={endpoint:new URL(a.url).pathname,body:c,headers:Object.fromEntries(a.headers.entries())});let m=new URL(a.url),n=c.model,p=c.messages?.length||c.input?.length||0,r=c.tools?.length||0,s=c.reasoning_effort||c.reasoning?.effort||null;o.request("POST",`${m.pathname} | ${n} | ${p} msgs${r?` | ${r} tools`:""}${s?` | effort=${s}`:""}`);let u=a.headers.get("Authorization"),z=(0,e.Tr)(a),C=null;if(u&&z){let a=o.maskKey(z);o.debug("AUTH",`API Key: ${a}`);try{C=await (0,q.v9)(z)}catch{C=null}}else o.debug("AUTH","No API key provided (local mode)");if("true"===process.env.REQUIRE_API_KEY){if(!z)return o.warn("AUTH","Missing API key while REQUIRE_API_KEY=true"),(0,j.yj)(l.gx.UNAUTHORIZED,"Missing API key");if(!await (0,e.kI)(z))return o.warn("AUTH","Invalid API key while REQUIRE_API_KEY=true"),(0,j.yj)(l.gx.UNAUTHORIZED,"Invalid API key")}if(!n)return o.warn("CHAT","Missing model"),(0,j.yj)(l.gx.BAD_REQUEST,"Missing model");if(h.startPhase("policy"),C?.id)try{let a=(0,y.Ik)(C.id);if(!a.allowed)return o.warn("BUDGET",`API key ${C.id} exceeded budget: ${a.reason}`),(0,j.yj)(429,a.reason||"Budget limit exceeded")}catch{}h.endPhase(),h.startPhase("resolve");let D=await (0,f.$m)(n);if(D){o.info("CHAT",`Combo "${n}" [${D.strategy||"priority"}] with ${D.models.length} models`);let d=async a=>{let b=(0,g.Xh)(a),c=b.provider;if(!c)return!0;if(!(0,v.fj)(c,b.model||a))return o.debug("AVAILABILITY",`${c}/${b.model} in cooldown, skipping`),!1;let d=await (0,e.c1)(c);return!!d&&!d.allRateLimited},[f,i]=await Promise.all([(0,q.V7)().catch(()=>({})),(0,q.Uv)().catch(()=>[])]);h.endPhase();let j=await (0,k.Pr)({body:c,combo:D,handleSingleModel:(c,d)=>B(c,d,b,a,D.name,C,h),isModelAvailable:d,log:o,settings:f,allCombos:i});return(0,w.N3)(h),j}h.endPhase();let E=await B(c,n,b,a,null,C,h);return(0,w.N3)(h),E}async function B(a,b,c=null,d=null,f=null,g=null,h=null){var i,k;let m=await C(b,a);if(m.error)return m.error;let{provider:n,model:q,sourceFormat:t,targetFormat:w}=m,x=(i=n,k=q,(0,v.fj)(i,k)?(0,u.getCircuitBreaker)(i,{failureThreshold:5,resetTimeout:3e4,onStateChange:(a,b,c)=>o.info("CIRCUIT",`${a}: ${b} → ${c}`)}).canExecute()?null:(o.warn("CIRCUIT",`Circuit breaker OPEN for ${i}, rejecting request`),(0,j.wO)(l.gx.SERVICE_UNAVAILABLE,`Provider ${i} circuit breaker is open`,30)):(o.warn("AVAILABILITY",`${i}/${k} is in cooldown, rejecting request`),(0,j.wO)(l.gx.SERVICE_UNAVAILABLE,`Model ${i}/${k} is temporarily unavailable (cooldown)`,30)));if(x)return x;let z=(0,u.getCircuitBreaker)(n,{failureThreshold:5,resetTimeout:3e4,onStateChange:(a,b,c)=>o.info("CIRCUIT",`${a}: ${b} → ${c}`)}),A=d?.headers?.get("user-agent")||"",F=null,G=null,H=null;for(;;){let b=await (0,e.c1)(n,F);if(!b||b.allRateLimited)return function(a,b,c,d,e,f){if(a?.allRateLimited){let b=e||a.lastError||"Unavailable",g=f||Number(a.lastErrorCode)||l.gx.SERVICE_UNAVAILABLE;return o.warn("CHAT",`[${c}/${d}] ${b} (${a.retryAfterHuman})`),(0,j.wO)(g,`[${c}/${d}] ${b}`,a.retryAfter,a.retryAfterHuman)}return b?(o.warn("CHAT","No more accounts available",{provider:c}),(0,j.yj)(f||l.gx.SERVICE_UNAVAILABLE,e||"All accounts unavailable")):(o.error("AUTH",`No credentials for provider: ${c}`),(0,j.yj)(l.gx.BAD_REQUEST,`No credentials for provider: ${c}`))}(b,F,n,q,G,H);let d=b.connectionId.slice(0,8);o.info("AUTH",`Using ${n} account: ${d}...`);let i=await (0,p.eU)(n,b),k=await E(b.connectionId),m=Date.now();h&&h.startPhase("connect");let{result:u,tlsFingerprintUsed:x}=await D({breaker:z,body:a,provider:n,model:q,refreshedCredentials:i,proxyInfo:k,log:o,clientRawRequest:c,credentials:b,apiKeyInfo:g,userAgent:A,comboName:f});h&&h.endPhase();let B=Date.now()-m;if(function({result:a,proxyInfo:b,proxyLatency:c,provider:d,model:e,sourceFormat:f,targetFormat:g,credentials:h,comboName:i,clientRawRequest:j,tlsFingerprintUsed:k=!1}){try{(0,r.pq)({status:a.success?"success":408===a.status||504===a.status?"timeout":"error",proxy:b?.proxy||null,level:b?.level||"direct",levelId:b?.levelId||null,provider:d,targetUrl:`${d}/${e}`,latencyMs:c,error:a.success?null:a.error||null,connectionId:h.connectionId,comboId:i||null,account:h.connectionId?.slice(0,8)||null,tlsFingerprint:k})}catch{}try{(0,s.MR)({provider:d,model:e,sourceFormat:f,targetFormat:g,status:a.success?"success":"error",statusCode:a.success?200:a.status||500,latency:c,endpoint:j?.endpoint||"/v1/chat/completions",connectionId:h.connectionId||null,comboName:i||null})}catch{}}({result:u,proxyInfo:k,proxyLatency:B,provider:n,model:q,sourceFormat:t,targetFormat:w,credentials:b,comboName:f,clientRawRequest:c,tlsFingerprintUsed:x}),u.success)return function(a,b){if(a?.id)try{let c=b.usage||{},d=((c.prompt_tokens||0)+(c.completion_tokens||0))*1e-6;d>0&&(0,y.n5)(a.id,d)}catch{}}(g,u),h&&h.startPhase("finalize"),h&&h.endPhase(),u.response;(429===u.status||503===u.status)&&((0,v.gC)(n,q,6e4,`HTTP ${u.status}`),o.info("AVAILABILITY",`${n}/${q} marked unavailable for 60s (HTTP ${u.status})`));let{shouldFallback:C}=await (0,e.vk)(b.connectionId,u.status,u.error,n);if(C){o.warn("AUTH",`Account ${d}... unavailable (${u.status}), trying fallback`),F=b.connectionId,G=u.error,H=u.status;continue}return u.response}}async function C(a,b){let c=await (0,f.mA)(a);if(!c.provider){if("ambiguous_model"===c.errorType){let b=c.errorMessage||`Ambiguous model '${a}'. Use provider/model prefix (ex: gh/${a} or cc/${a}).`;return o.warn("CHAT",b,{model:a,candidates:c.candidateAliases||c.candidateProviders||[]}),{error:(0,j.yj)(l.gx.BAD_REQUEST,b)}}return o.warn("CHAT","Invalid model format",{model:a}),{error:(0,j.yj)(l.gx.BAD_REQUEST,"Invalid model format")}}let{provider:d,model:e}=c,g=(0,h.Tz)(b),i=m.PROVIDER_ID_TO_ALIAS[d]||d,k=(0,m.ux)(i,e)||(0,h.jJ)(d);return a!==`${d}/${e}`?o.info("ROUTING",`${a} → ${d}/${e}`):o.info("ROUTING",`Provider: ${d}, Model: ${e}`),{provider:d,model:e,sourceFormat:g,targetFormat:k}}async function D({breaker:a,body:b,provider:c,model:d,refreshedCredentials:f,proxyInfo:g,log:h,clientRawRequest:k,credentials:m,apiKeyInfo:q,userAgent:r,comboName:s}){try{let j=()=>(0,n.jf)(g?.proxy||null,()=>(0,i.w)({body:{...b,model:`${c}/${d}`},modelInfo:{provider:c,model:d},credentials:f,log:h,clientRawRequest:k,connectionId:m.connectionId,apiKeyInfo:q,userAgent:r,comboName:s,onCredentialsRefreshed:async a=>{await (0,p.vN)(m.connectionId,{accessToken:a.accessToken,refreshToken:a.refreshToken,providerSpecificData:a.providerSpecificData,testStatus:"active"})},onRequestSuccess:async()=>{await (0,e.Pt)(m.connectionId,m)}}));if(!g?.proxy&&(0,n.Wk)()){let b=await a.execute(async()=>(0,n.qT)(j));return{result:b.result,tlsFingerprintUsed:b.tlsFingerprintUsed}}return{result:await a.execute(j),tlsFingerprintUsed:!1}}catch(a){if(a instanceof u.ez)return o.warn("CIRCUIT",`${c} circuit open during retry: ${a.message}`),{result:{success:!1,response:(0,j.wO)(l.gx.SERVICE_UNAVAILABLE,`Provider ${c} circuit breaker is open`,Math.ceil(a.retryAfterMs/1e3)),status:l.gx.SERVICE_UNAVAILABLE},tlsFingerprintUsed:!1};throw a}}async function E(a){try{return await (0,q.YD)(a)}catch(a){return o.debug("PROXY",`Failed to resolve proxy: ${a.message}`),null}}i=(z.then?(await z)():z)[0],d()}catch(a){d(a)}})},13961:(a,b,c)=>{c.d(b,{$m:()=>g,mA:()=>f});var d=c(22901),e=c(99939);async function f(a){let b=(0,e.Xh)(a);if(!b.isAlias){if(b.provider===b.providerAlias){let a=(await (0,d.Fh)({type:"openai-compatible"})).find(a=>a.prefix===b.providerAlias);if(a)return{provider:a.id,model:b.model};let c=(await (0,d.Fh)({type:"anthropic-compatible"})).find(a=>a.prefix===b.providerAlias);if(c)return{provider:c.id,model:b.model}}return(0,e.js)(a,null)}return(0,e.js)(a,d.OM)}async function g(a){let b=await (0,d.Dj)(a);return b&&b.models&&b.models.length>0?b:null}},20864:(a,b,c)=>{c.d(b,{DQ:()=>h,GX:()=>j,Wj:()=>i,fj:()=>f,gC:()=>g});let d=new Map;function e(a,b){return`${a}::${b}`}function f(a,b){let c=e(a,b),f=d.get(c);return!f||Date.now()-f.unavailableSince>=f.cooldownMs&&(d.delete(c),!0)}function g(a,b,c=6e4,f){let h=e(a,b);d.set(h,{provider:a,model:b,unavailableSince:Date.now(),cooldownMs:c,reason:f||"unknown"})}function h(a,b){return d.delete(e(a,b))}function i(){let a=Date.now(),b=[];for(let[c,e]of d.entries()){let f=a-e.unavailableSince;if(f>=e.cooldownMs){d.delete(c);continue}b.push({provider:e.provider,model:e.model,reason:e.reason||"unknown",remainingMs:e.cooldownMs-f,unavailableSince:new Date(e.unavailableSince).toISOString()})}return b}function j(){return i(),d.size}},26510:(a,b,c)=>{function d(){return globalThis.__translatorEvents||(globalThis.__translatorEvents=[]),globalThis.__translatorEvents}function e(a){if(!a||"object"!=typeof a)return;let b=d();b.unshift({id:`evt_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,timestamp:new Date().toISOString(),...a}),b.length>200&&(b.length=200)}function f(a=50){let b=Number(a),c=Number.isFinite(b)&&b>0?Math.min(Math.floor(b),200):50,e=d();return{events:e.slice(0,c),total:e.length}}c.d(b,{MR:()=>e,zS:()=>f})},26695:(a,b,c)=>{c.d(b,{lm:()=>g.lm,l2:()=>q,i5:()=>p,v8:()=>j});var d=c(89575),e=c(55120),f=c(27230),g=c(50101);function h(a){if(!a)return null;let b=a.trimStart();if(!b||100!==b.charCodeAt(0))return null;let c=b.slice(5).trim();if("[DONE]"===c)return{done:!0};try{return JSON.parse(c)}catch(a){return c.length>0&&console.log(`[WARN] Failed to parse SSE line (${c.length} chars): ${c.substring(0,200)}...`),null}}function i(a,b){if(b===e.h.OPENAI&&a.choices?.[0]?.delta){let b=a.choices[0].delta;return b.content&&""!==b.content||b.reasoning_content&&""!==b.reasoning_content||b.tool_calls&&b.tool_calls.length>0||a.choices[0].finish_reason||b.role}if(b===e.h.CLAUDE){let b="content_block_delta"===a.type,c=a.delta?.text&&""!==a.delta.text,d=a.delta?.thinking&&""!==a.delta.thinking,e=a.delta?.partial_json&&""!==a.delta.partial_json;return!b||!!c||!!d||!!e}if(b===e.h.GEMINI&&a.candidates?.[0]){let b=a.candidates[0];if(b.finishReason)return!0;let c=b.content?.parts;return!!c&&0!==c.length&&c.some(a=>a.text&&""!==a.text||a.functionCall||a.executableCode)}return!0}function j(a,b){return null==a?"data: null\n\n":a&&a.done?"data: [DONE]\n\n":a&&a.event&&a.data?`event: ${a.event}
3
3
  data: ${JSON.stringify(a.data)}
4
4
 
5
5
  `:(a=function(a){if(a?.usage&&"object"==typeof a.usage&&null===a.usage.perf_metrics){let{perf_metrics:b,...c}=a.usage;return{...a,usage:c}}return a}(a),b===e.h.CLAUDE&&a&&a.type)?`event: ${a.type}
@@ -0,0 +1,45 @@
1
+ "use strict";exports.id=2901,exports.ids=[2901],exports.modules={9679:(a,b,c)=>{c.d(b,{HL:()=>v,KJ:()=>l,PM:()=>x,PS:()=>k,VT:()=>n,Xx:()=>h,YD:()=>w,isCloudEnabled:()=>i,mt:()=>g,o4:()=>t,r4:()=>j,ru:()=>s,yF:()=>m});var d=c(42910),e=c(39948),f=c(23969);async function g(){let a=(0,d.sm)(),b=a.prepare("SELECT key, value FROM key_value WHERE namespace = 'settings'").all(),c={cloudEnabled:!1,stickyRoundRobinLimit:3,requireLogin:!0};for(let a of b)c[a.key]=JSON.parse(a.value);return!c.setupComplete&&process.env.INITIAL_PASSWORD&&(c.setupComplete=!0,c.requireLogin=!0,a.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('settings', 'setupComplete', 'true')").run(),a.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('settings', 'requireLogin', 'true')").run()),c}async function h(a){let b=(0,d.sm)(),c=b.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('settings', ?, ?)");return b.transaction(()=>{for(let[b,d]of Object.entries(a))c.run(b,JSON.stringify(d))})(),(0,e.lR)("pre-write"),g()}async function i(){return!0===(await g()).cloudEnabled}async function j(){let a=(0,d.sm)().prepare("SELECT key, value FROM key_value WHERE namespace = 'pricing'").all(),b={};for(let c of a)b[c.key]=JSON.parse(c.value);let{getDefaultPricing:e}=await c.e(3699).then(c.bind(c,53699)),f=e(),g={};for(let[a,c]of Object.entries(f))if(g[a]={...c},b[a])for(let[c,d]of Object.entries(b[a]))g[a][c]=g[a][c]?{...g[a][c],...d}:d;for(let[a,c]of Object.entries(b))if(g[a])for(let[b,d]of Object.entries(c))g[a][b]||(g[a][b]=d);else g[a]={...c};return g}async function k(a,b){let d=await j();if(d[a]?.[b])return d[a][b];let{PROVIDER_ID_TO_ALIAS:e}=await Promise.resolve().then(c.bind(c,23969)),f=e[a];if(f&&d[f])return d[f][b]||null;let g=a?.replace(/-cn$/,"");return g&&g!==a&&d[g]&&d[g][b]||null}async function l(a){let b=(0,d.sm)(),c=b.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('pricing', ?, ?)"),f=b.prepare("SELECT key, value FROM key_value WHERE namespace = 'pricing'").all(),g={};for(let a of f)g[a.key]=JSON.parse(a.value);b.transaction(()=>{for(let[b,d]of Object.entries(a))c.run(b,JSON.stringify({...g[b]||{},...d}))})(),(0,e.lR)("pre-write");let h={};for(let a of b.prepare("SELECT key, value FROM key_value WHERE namespace = 'pricing'").all())h[a.key]=JSON.parse(a.value);return h}async function m(a,b){let c=(0,d.sm)();if(b){let d=c.prepare("SELECT value FROM key_value WHERE namespace = 'pricing' AND key = ?").get(a);if(d){let e=JSON.parse(d.value);delete e[b],0===Object.keys(e).length?c.prepare("DELETE FROM key_value WHERE namespace = 'pricing' AND key = ?").run(a):c.prepare("UPDATE key_value SET value = ? WHERE namespace = 'pricing' AND key = ?").run(JSON.stringify(e),a)}}else c.prepare("DELETE FROM key_value WHERE namespace = 'pricing' AND key = ?").run(a);(0,e.lR)("pre-write");let f=c.prepare("SELECT key, value FROM key_value WHERE namespace = 'pricing'").all(),g={};for(let a of f)g[a.key]=JSON.parse(a.value);return g}async function n(){return(0,d.sm)().prepare("DELETE FROM key_value WHERE namespace = 'pricing'").run(),(0,e.lR)("pre-write"),{}}let o={global:null,providers:{},combos:{},keys:{}},p=Object.entries(f.PROVIDER_ID_TO_ALIAS).reduce((a,[b,c])=>(c&&(a[c]=b),a[b]=b,a),{});function q(a){return"string"!=typeof a?a:p[a]||a}function r(a){if(!a)return null;if("object"==typeof a&&a.type)return a;if("string"!=typeof a)return null;try{let b=new URL(a);return{type:b.protocol.replace(":","").replace("//","")||"http",host:b.hostname,port:b.port||("socks5:"===b.protocol?"1080":"8080"),username:b.username||"",password:b.password||""}}catch{let b=a.split(":");return{type:"http",host:b[0]||a,port:b[1]||"8080",username:"",password:""}}}async function s(){let a=(0,d.sm)(),b=a.prepare("SELECT key, value FROM key_value WHERE namespace = 'proxyConfig'").all(),c={...o};for(let a of b)c[a.key]=JSON.parse(a.value);let e=!1;if(c.global&&"string"==typeof c.global&&(c.global=r(c.global),e=!0),c.providers)for(let[a,b]of Object.entries(c.providers))"string"==typeof b&&(c.providers[a]=r(b),e=!0);if(e){let b=a.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('proxyConfig', ?, ?)");void 0!==c.global&&b.run("global",JSON.stringify(c.global)),c.providers&&b.run("providers",JSON.stringify(c.providers))}return c}async function t(a,b){let c=await s();if("global"===a)return c.global||null;let d=c[a+"s"]||c[a]||{};return(b?d[b]:null)||null}async function u(a,b,c){let f=(0,d.sm)(),g=await s();if("global"===a)g.global=c||null,f.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('proxyConfig', 'global', ?)").run(JSON.stringify(g.global));else{let d=a+"s";g[d]||(g[d]={}),c?g[d][b]=c:delete g[d][b],f.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('proxyConfig', ?, ?)").run(d,JSON.stringify(g[d]))}return(0,e.lR)("pre-write"),g}async function v(a,b){return u(a,b,null)}async function w(a){let b=await s();if(a&&b.keys?.[a])return{proxy:b.keys[a],level:"key",levelId:a};let c=(0,d.sm)(),e=c.prepare("SELECT provider FROM provider_connections WHERE id = ?").get(a);if(e){if(b.combos&&Object.keys(b.combos).length>0){for(let a of c.prepare("SELECT id, data FROM combos").all())if(b.combos[a.id])try{if((JSON.parse(a.data).models||[]).some(a=>(function(a){if(a&&"string"==typeof a.provider)return q(a.provider);let b="string"==typeof a?a:"string"==typeof a?.model?a.model:null;if(!b)return null;let[c]=b.split("/",1);return c?q(c):null})(a)===e.provider))return{proxy:b.combos[a.id],level:"combo",levelId:a.id}}catch{}}if(b.providers?.[e.provider])return{proxy:b.providers[e.provider],level:"provider",levelId:e.provider}}return b.global?{proxy:b.global,level:"global",levelId:null}:{proxy:null,level:"direct",levelId:null}}async function x(a){if(void 0!==a.level)return u(a.level,a.id||null,a.proxy);let b=(0,d.sm)(),c=await s(),f=b.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('proxyConfig', ?, ?)");return b.transaction(()=>{for(let b of(void 0!==a.global&&(c.global=a.global||null,f.run("global",JSON.stringify(c.global))),["providers","combos","keys"]))if(a[b]){for(let[d,e]of(c[b]={...c[b]||{},...a[b]},Object.entries(c[b])))e||delete c[b][d];f.run(b,JSON.stringify(c[b]))}})(),(0,e.lR)("pre-write"),c}},22901:(a,b,c)=>{c.d(b,{S8:()=>L,lR:()=>f.lR,bI:()=>y,Iq:()=>T.Iq,jd:()=>Q,iE:()=>s,i0:()=>B,Lh:()=>T.Lh,CG:()=>S,fv:()=>G,fK:()=>v,op:()=>w,Pc:()=>D,HL:()=>U.HL,NL:()=>K,yg:()=>T.yg,v9:()=>T.v9,PX:()=>T.PX,L:()=>O,Dj:()=>P,Uv:()=>N,uv:()=>J,c:()=>H,OM:()=>E,r4:()=>U.r4,getPricingForModel:()=>U.PS,Mc:()=>r,getProviderConnections:()=>q,Qu:()=>A,Fh:()=>z,ru:()=>U.ru,o4:()=>U.o4,V7:()=>U.mt,Nx:()=>U.isCloudEnabled,eF:()=>f.eF,BD:()=>M,VT:()=>U.VT,yF:()=>U.yF,YD:()=>U.YD,Dp:()=>f.Dp,L9:()=>I,o5:()=>F,PM:()=>U.PM,Jg:()=>T.Jg,oG:()=>R,KJ:()=>U.KJ,rj:()=>u,ho:()=>C,Xx:()=>U.Xx,ek:()=>T.ek});var d=c(94755),e=c(42910),f=c(39948),g=c(55511);let h="aes-256-gcm",i="enc:v1:",j=null;function k(){if(null!==j)return j;let a=process.env.STORAGE_ENCRYPTION_KEY;return a?j=(0,g.scryptSync)(a,"omniroute-field-encryption-v1",32):null}function l(){return!!process.env.STORAGE_ENCRYPTION_KEY}function m(a){if(!a||"string"!=typeof a)return a;let b=k();if(!b||a.startsWith(i))return a;let c=(0,g.randomBytes)(16),d=(0,g.createCipheriv)(h,b,c),e=d.update(a,"utf8","hex");e+=d.final("hex");let f=d.getAuthTag().toString("hex");return`${i}${c.toString("hex")}:${e}:${f}`}function n(a){if(!a||"string"!=typeof a||!a.startsWith(i))return a;let b=k();if(!b)return console.warn("[Encryption] Found encrypted data but STORAGE_ENCRYPTION_KEY is not set. Cannot decrypt."),a;let c=a.slice(i.length).split(":");if(3!==c.length)return console.error("[Encryption] Malformed encrypted value"),a;let[d,e,f]=c;try{let a=Buffer.from(d,"hex"),c=Buffer.from(f,"hex"),i=(0,g.createDecipheriv)(h,b,a);i.setAuthTag(c);let j=i.update(e,"hex","utf8");return j+=i.final("utf8")}catch(b){return console.error("[Encryption] Decryption failed:",b instanceof Error?b.message:String(b)),a}}function o(a){return l()&&(a.apiKey&&(a.apiKey=m(a.apiKey)),a.accessToken&&(a.accessToken=m(a.accessToken)),a.refreshToken&&(a.refreshToken=m(a.refreshToken)),a.idToken&&(a.idToken=m(a.idToken))),a}function p(a){return a&&l()?{...a,apiKey:n(a.apiKey),accessToken:n(a.accessToken),refreshToken:n(a.refreshToken),idToken:n(a.idToken)}:a}async function q(a={}){let b=(0,e.sm)(),c="SELECT * FROM provider_connections",d=[],f={};return a.provider&&(d.push("provider = @provider"),f.provider=a.provider),void 0!==a.isActive&&(d.push("is_active = @isActive"),f.isActive=+!!a.isActive),d.length>0&&(c+=" WHERE "+d.join(" AND ")),c+=" ORDER BY priority ASC, updated_at DESC",b.prepare(c).all(f).map(a=>p((0,e.G6)((0,e.kB)(a))))}async function r(a){let b=(0,e.sm)().prepare("SELECT * FROM provider_connections WHERE id = ?").get(a);return b?p((0,e.G6)((0,e.kB)(b))):null}async function s(a){var b,c;let g=(0,e.sm)(),h=new Date().toISOString(),i=null;if("oauth"===a.authType&&a.email){let b=a.providerSpecificData?.workspaceId;i="codex"===a.provider&&b?g.prepare("SELECT * FROM provider_connections WHERE provider = ? AND auth_type = 'oauth' AND json_extract(provider_specific_data, '$.workspaceId') = ?").get(a.provider,b):g.prepare("SELECT * FROM provider_connections WHERE provider = ? AND auth_type = 'oauth' AND email = ?").get(a.provider,a.email)}else"apikey"===a.authType&&a.name&&(i=g.prepare("SELECT * FROM provider_connections WHERE provider = ? AND auth_type = 'apikey' AND name = ?").get(a.provider,a.name));if(i){let b={...(0,e.kB)(i),...a,updatedAt:h};return t(g,i.id,b),(0,f.lR)("pre-write"),(0,e.G6)(b)}let j=a.name||null;if(!j&&"oauth"===a.authType)if(a.email)j=a.email;else{let b=g.prepare("SELECT COUNT(*) as cnt FROM provider_connections WHERE provider = ?").get(a.provider)?.cnt||0;j=`Account ${b+1}`}let k=a.priority;if(!k){let b=g.prepare("SELECT MAX(priority) as maxP FROM provider_connections WHERE provider = ?").get(a.provider);k=(b?.maxP||0)+1}let l={id:(0,d.A)(),provider:a.provider,authType:a.authType||"oauth",name:j,priority:k,isActive:void 0===a.isActive||a.isActive,createdAt:h,updatedAt:h};for(let b of["displayName","email","globalPriority","defaultModel","accessToken","refreshToken","expiresAt","tokenType","scope","idToken","projectId","apiKey","testStatus","lastTested","lastError","lastErrorAt","lastErrorType","lastErrorSource","rateLimitedUntil","expiresIn","errorCode","consecutiveUseCount","rateLimitProtection"])void 0!==a[b]&&null!==a[b]&&(l[b]=a[b]);return a.providerSpecificData&&Object.keys(a.providerSpecificData).length>0&&(l.providerSpecificData=a.providerSpecificData),b=g,c=o({...l}),b.prepare(`
2
+ INSERT INTO provider_connections (
3
+ id, provider, auth_type, name, email, priority, is_active,
4
+ access_token, refresh_token, expires_at, token_expires_at,
5
+ scope, project_id, test_status, error_code, last_error,
6
+ last_error_at, last_error_type, last_error_source, backoff_level,
7
+ rate_limited_until, health_check_interval, last_health_check_at,
8
+ last_tested, api_key, id_token, provider_specific_data,
9
+ expires_in, display_name, global_priority, default_model,
10
+ token_type, consecutive_use_count, rate_limit_protection, created_at, updated_at
11
+ ) VALUES (
12
+ @id, @provider, @authType, @name, @email, @priority, @isActive,
13
+ @accessToken, @refreshToken, @expiresAt, @tokenExpiresAt,
14
+ @scope, @projectId, @testStatus, @errorCode, @lastError,
15
+ @lastErrorAt, @lastErrorType, @lastErrorSource, @backoffLevel,
16
+ @rateLimitedUntil, @healthCheckInterval, @lastHealthCheckAt,
17
+ @lastTested, @apiKey, @idToken, @providerSpecificData,
18
+ @expiresIn, @displayName, @globalPriority, @defaultModel,
19
+ @tokenType, @consecutiveUseCount, @rateLimitProtection, @createdAt, @updatedAt
20
+ )
21
+ `).run({id:c.id,provider:c.provider,authType:c.authType||null,name:c.name||null,email:c.email||null,priority:c.priority||0,isActive:+(!1!==c.isActive),accessToken:c.accessToken||null,refreshToken:c.refreshToken||null,expiresAt:c.expiresAt||null,tokenExpiresAt:c.tokenExpiresAt||null,scope:c.scope||null,projectId:c.projectId||null,testStatus:c.testStatus||null,errorCode:c.errorCode||null,lastError:c.lastError||null,lastErrorAt:c.lastErrorAt||null,lastErrorType:c.lastErrorType||null,lastErrorSource:c.lastErrorSource||null,backoffLevel:c.backoffLevel||0,rateLimitedUntil:c.rateLimitedUntil||null,healthCheckInterval:c.healthCheckInterval||null,lastHealthCheckAt:c.lastHealthCheckAt||null,lastTested:c.lastTested||null,apiKey:c.apiKey||null,idToken:c.idToken||null,providerSpecificData:c.providerSpecificData?JSON.stringify(c.providerSpecificData):null,expiresIn:c.expiresIn||null,displayName:c.displayName||null,globalPriority:c.globalPriority||null,defaultModel:c.defaultModel||null,tokenType:c.tokenType||null,consecutiveUseCount:c.consecutiveUseCount||0,rateLimitProtection:+(!0===c.rateLimitProtection||1===c.rateLimitProtection),createdAt:c.createdAt,updatedAt:c.updatedAt}),x(g,a.provider),(0,f.lR)("pre-write"),(0,e.G6)(l)}function t(a,b,c){let d=c.updatedAt||new Date().toISOString();a.prepare(`
22
+ UPDATE provider_connections SET
23
+ provider = @provider, auth_type = @authType, name = @name, email = @email,
24
+ priority = @priority, is_active = @isActive, access_token = @accessToken,
25
+ refresh_token = @refreshToken, expires_at = @expiresAt, token_expires_at = @tokenExpiresAt,
26
+ scope = @scope, project_id = @projectId, test_status = @testStatus, error_code = @errorCode,
27
+ last_error = @lastError, last_error_at = @lastErrorAt, last_error_type = @lastErrorType,
28
+ last_error_source = @lastErrorSource, backoff_level = @backoffLevel,
29
+ rate_limited_until = @rateLimitedUntil, health_check_interval = @healthCheckInterval,
30
+ last_health_check_at = @lastHealthCheckAt, last_tested = @lastTested, api_key = @apiKey,
31
+ id_token = @idToken, provider_specific_data = @providerSpecificData,
32
+ expires_in = @expiresIn, display_name = @displayName, global_priority = @globalPriority,
33
+ default_model = @defaultModel, token_type = @tokenType,
34
+ consecutive_use_count = @consecutiveUseCount,
35
+ rate_limit_protection = @rateLimitProtection,
36
+ updated_at = @updatedAt
37
+ WHERE id = @id
38
+ `).run({id:b,provider:c.provider,authType:c.authType||null,name:c.name||null,email:c.email||null,priority:c.priority||0,isActive:+(!1!==c.isActive),accessToken:c.accessToken||null,refreshToken:c.refreshToken||null,expiresAt:c.expiresAt||null,tokenExpiresAt:c.tokenExpiresAt||null,scope:c.scope||null,projectId:c.projectId||null,testStatus:c.testStatus||null,errorCode:c.errorCode||null,lastError:c.lastError||null,lastErrorAt:c.lastErrorAt||null,lastErrorType:c.lastErrorType||null,lastErrorSource:c.lastErrorSource||null,backoffLevel:c.backoffLevel||0,rateLimitedUntil:c.rateLimitedUntil||null,healthCheckInterval:c.healthCheckInterval||null,lastHealthCheckAt:c.lastHealthCheckAt||null,lastTested:c.lastTested||null,apiKey:c.apiKey||null,idToken:c.idToken||null,providerSpecificData:c.providerSpecificData?JSON.stringify(c.providerSpecificData):null,expiresIn:c.expiresIn||null,displayName:c.displayName||null,globalPriority:c.globalPriority||null,defaultModel:c.defaultModel||null,tokenType:c.tokenType||null,consecutiveUseCount:c.consecutiveUseCount||0,rateLimitProtection:+(!0===c.rateLimitProtection||1===c.rateLimitProtection),updatedAt:d})}async function u(a,b){let c=(0,e.sm)(),d=c.prepare("SELECT * FROM provider_connections WHERE id = ?").get(a);if(!d)return null;let g={...(0,e.kB)(d),...b,updatedAt:new Date().toISOString()};return t(c,a,o({...g})),(0,f.lR)("pre-write"),void 0!==b.priority&&x(c,d.provider),(0,e.G6)(g)}async function v(a){let b=(0,e.sm)(),c=b.prepare("SELECT provider FROM provider_connections WHERE id = ?").get(a);return!!c&&(b.prepare("DELETE FROM provider_connections WHERE id = ?").run(a),x(b,c.provider),(0,f.lR)("pre-write"),!0)}async function w(a){let b=(0,e.sm)().prepare("DELETE FROM provider_connections WHERE provider = ?").run(a);return(0,f.lR)("pre-write"),b.changes}function x(a,b){let c=a.prepare("SELECT id, priority, updated_at FROM provider_connections WHERE provider = ? ORDER BY priority ASC, updated_at DESC").all(b),d=a.prepare("UPDATE provider_connections SET priority = ? WHERE id = ?");c.forEach((a,b)=>{d.run(b+1,a.id)})}async function y(){return 0}async function z(a={}){let b=(0,e.sm)(),c="SELECT * FROM provider_nodes",d={};return a.type&&(c+=" WHERE type = @type",d.type=a.type),b.prepare(c).all(d).map(e.kB)}async function A(a){let b=(0,e.sm)().prepare("SELECT * FROM provider_nodes WHERE id = ?").get(a);return b?(0,e.kB)(b):null}async function B(a){let b=(0,e.sm)(),c=new Date().toISOString(),g={id:a.id||(0,d.A)(),type:a.type,name:a.name,prefix:a.prefix||null,apiType:a.apiType||null,baseUrl:a.baseUrl||null,createdAt:c,updatedAt:c};return b.prepare(`
39
+ INSERT INTO provider_nodes (id, type, name, prefix, api_type, base_url, created_at, updated_at)
40
+ VALUES (@id, @type, @name, @prefix, @apiType, @baseUrl, @createdAt, @updatedAt)
41
+ `).run(g),(0,f.lR)("pre-write"),g}async function C(a,b){let c=(0,e.sm)(),d=c.prepare("SELECT * FROM provider_nodes WHERE id = ?").get(a);if(!d)return null;let g={...(0,e.kB)(d),...b,updatedAt:new Date().toISOString()};return c.prepare(`
42
+ UPDATE provider_nodes SET type = @type, name = @name, prefix = @prefix,
43
+ api_type = @apiType, base_url = @baseUrl, updated_at = @updatedAt
44
+ WHERE id = @id
45
+ `).run({id:a,type:g.type,name:g.name,prefix:g.prefix||null,apiType:g.apiType||null,baseUrl:g.baseUrl||null,updatedAt:g.updatedAt}),(0,f.lR)("pre-write"),g}async function D(a){let b=(0,e.sm)(),c=b.prepare("SELECT * FROM provider_nodes WHERE id = ?").get(a);return c?(b.prepare("DELETE FROM provider_nodes WHERE id = ?").run(a),(0,f.lR)("pre-write"),(0,e.kB)(c)):null}async function E(){let a=(0,e.sm)().prepare("SELECT key, value FROM key_value WHERE namespace = 'modelAliases'").all(),b={};for(let c of a)b[c.key]=JSON.parse(c.value);return b}async function F(a,b){(0,e.sm)().prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('modelAliases', ?, ?)").run(a,JSON.stringify(b)),(0,f.lR)("pre-write")}async function G(a){(0,e.sm)().prepare("DELETE FROM key_value WHERE namespace = 'modelAliases' AND key = ?").run(a),(0,f.lR)("pre-write")}async function H(a){let b=(0,e.sm)();if(a){let c=b.prepare("SELECT value FROM key_value WHERE namespace = 'mitmAlias' AND key = ?").get(a);return c?JSON.parse(c.value):{}}let c=b.prepare("SELECT key, value FROM key_value WHERE namespace = 'mitmAlias'").all(),d={};for(let a of c)d[a.key]=JSON.parse(a.value);return d}async function I(a,b){(0,e.sm)().prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('mitmAlias', ?, ?)").run(a,JSON.stringify(b||{})),(0,f.lR)("pre-write")}async function J(a){let b=(0,e.sm)();if(a){let c=b.prepare("SELECT value FROM key_value WHERE namespace = 'customModels' AND key = ?").get(a);return c?JSON.parse(c.value):[]}let c=b.prepare("SELECT key, value FROM key_value WHERE namespace = 'customModels'").all(),d={};for(let a of c)d[a.key]=JSON.parse(a.value);return d}async function K(){let a=(0,e.sm)().prepare("SELECT key, value FROM key_value WHERE namespace = 'customModels'").all(),b={};for(let c of a)b[c.key]=JSON.parse(c.value);return b}async function L(a,b,c,d="manual"){let g=(0,e.sm)(),h=g.prepare("SELECT value FROM key_value WHERE namespace = 'customModels' AND key = ?").get(a),i=h?JSON.parse(h.value):[],j=i.find(a=>a.id===b);if(j)return j;let k={id:b,name:c||b,source:d};return i.push(k),g.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('customModels', ?, ?)").run(a,JSON.stringify(i)),(0,f.lR)("pre-write"),k}async function M(a,b){let c=(0,e.sm)(),d=c.prepare("SELECT value FROM key_value WHERE namespace = 'customModels' AND key = ?").get(a);if(!d)return!1;let g=JSON.parse(d.value),h=g.length,i=g.filter(a=>a.id!==b);return i.length!==h&&(0===i.length?c.prepare("DELETE FROM key_value WHERE namespace = 'customModels' AND key = ?").run(a):c.prepare("UPDATE key_value SET value = ? WHERE namespace = 'customModels' AND key = ?").run(JSON.stringify(i),a),(0,f.lR)("pre-write"),!0)}async function N(){return(0,e.sm)().prepare("SELECT data FROM combos ORDER BY name").all().map(a=>JSON.parse(a.data))}async function O(a){let b=(0,e.sm)().prepare("SELECT data FROM combos WHERE id = ?").get(a);return b?JSON.parse(b.data):null}async function P(a){let b=(0,e.sm)().prepare("SELECT data FROM combos WHERE name = ?").get(a);return b?JSON.parse(b.data):null}async function Q(a){let b=(0,e.sm)(),c=new Date().toISOString(),g={id:(0,d.A)(),name:a.name,models:a.models||[],strategy:a.strategy||"priority",config:a.config||{},createdAt:c,updatedAt:c};return b.prepare("INSERT INTO combos (id, name, data, created_at, updated_at) VALUES (?, ?, ?, ?, ?)").run(g.id,g.name,JSON.stringify(g),c,c),(0,f.lR)("pre-write"),g}async function R(a,b){let c=(0,e.sm)(),d=c.prepare("SELECT data FROM combos WHERE id = ?").get(a);if(!d)return null;let g={...JSON.parse(d.data),...b,updatedAt:new Date().toISOString()};return c.prepare("UPDATE combos SET name = ?, data = ?, updated_at = ? WHERE id = ?").run(g.name,JSON.stringify(g),g.updatedAt,a),(0,f.lR)("pre-write"),g}async function S(a){return 0!==(0,e.sm)().prepare("DELETE FROM combos WHERE id = ?").run(a).changes&&((0,f.lR)("pre-write"),!0)}var T=c(80500),U=c(9679)},23969:(a,b,c)=>{c.d(b,{PROVIDER_ID_TO_ALIAS:()=>f,ux:()=>g,vq:()=>e});var d=c(83596);let e=(0,d.oD)(),f=(0,d.Qv)();function g(a,b){let c=e[a];if(!c)return null;let d=c.find(a=>a.id===b);return d?.targetFormat||null}},39948:(a,b,c)=>{c.d(b,{Dp:()=>o,eF:()=>n,lR:()=>m});var d=c(87550),e=c.n(d),f=c(76760),g=c.n(f),h=c(73024),i=c.n(h),j=c(42910),k=c(80500);let l=0;function m(a="auto"){try{if(j.I8||j.m1||!j.oh||!i().existsSync(j.oh))return null;let b=i().statSync(j.oh);if(b.size<4096)return console.warn(`[DB] Backup SKIPPED — DB too small (${b.size}B)`),null;let c=Date.now();if("manual"!==a&&"pre-restore"!==a&&c-l<36e5)return null;l=c;let d=j.NJ||g().join(j.nJ,"db_backups");i().existsSync(d)||i().mkdirSync(d,{recursive:!0});let e=i().readdirSync(d).filter(a=>a.startsWith("db_")&&a.endsWith(".sqlite")).sort();if(e.length>0){let a=e[e.length-1],c=i().statSync(g().join(d,a));if(c.size>4096&&b.size<.5*c.size)return console.warn(`[DB] Backup SKIPPED — DB shrank from ${c.size}B to ${b.size}B`),null}let f=new Date().toISOString().replace(/[:.]/g,"-"),h=g().join(d,`db_${f}_${a}.sqlite`);(0,j.sm)().backup(h).then(()=>{console.log(`[DB] Backup created: ${h} (${b.size} bytes)`)}).catch(a=>{console.error("[DB] Backup failed:",a.message)});let k=i().readdirSync(d).filter(a=>a.startsWith("db_")&&a.endsWith(".sqlite")).sort();for(;k.length>20;){let a=0,b=1/0;for(let c=0;c<k.length-1;c++)try{let e=i().statSync(g().join(d,k[c]));e.size<b&&(b=e.size,a=c)}catch{a=c;break}try{i().unlinkSync(g().join(d,k[a]))}catch{}k.splice(a,1)}return{filename:g().basename(h),size:b.size}}catch(a){return console.error("[DB] Backup failed:",a.message),null}}async function n(){let a=j.NJ||g().join(j.nJ,"db_backups");try{if(!i().existsSync(a))return[];return i().readdirSync(a).filter(a=>a.startsWith("db_")&&a.endsWith(".sqlite")).sort().reverse().map(b=>{let c=g().join(a,b),d=i().statSync(c),f=b.match(/^db_(.+?)_([^.]+)\.sqlite$/),h=f?f[2]:"unknown",j=0;try{let a=new(e())(c,{readonly:!0}),b=a.prepare("SELECT COUNT(*) as cnt FROM provider_connections").get();j=b?.cnt||0,a.close()}catch{}return{id:b,filename:b,createdAt:d.mtime.toISOString(),size:d.size,reason:h,connectionCount:j}})}catch{return[]}}async function o(a){let b=j.NJ||g().join(j.nJ,"db_backups"),c=g().join(b,a);if(!a.startsWith("db_")||!a.endsWith(".sqlite"))throw Error("Invalid backup ID");if(!i().existsSync(c))throw Error(`Backup not found: ${a}`);try{let a=new(e())(c,{readonly:!0}),b=a.pragma("integrity_check");if(a.close(),b[0]?.integrity_check!=="ok")throw Error("Backup integrity check failed")}catch(a){if("Backup integrity check failed"===a.message)throw a;throw Error(`Backup file is corrupt: ${a.message}`)}for(let a of(l=0,m("pre-restore"),(0,j.jX)(),(0,k.AH)(),[j.oh,`${j.oh}-wal`,`${j.oh}-shm`,`${j.oh}-journal`]))a&&i().existsSync(a)&&i().unlinkSync(a);i().copyFileSync(c,j.oh);let d=(0,j.sm)(),f=d.prepare("SELECT COUNT(*) as cnt FROM provider_connections").get()?.cnt||0,h=d.prepare("SELECT COUNT(*) as cnt FROM provider_nodes").get()?.cnt||0,n=d.prepare("SELECT COUNT(*) as cnt FROM combos").get()?.cnt||0,o=d.prepare("SELECT COUNT(*) as cnt FROM api_keys").get()?.cnt||0;return console.log(`[DB] Restored backup: ${a} (${f} connections)`),{restored:!0,backupId:a,connectionCount:f,nodeCount:h,comboCount:n,apiKeyCount:o}}},80500:(a,b,c)=>{c.d(b,{AH:()=>E,Iq:()=>z,Jg:()=>A,Lh:()=>B,PX:()=>w,ek:()=>C,v9:()=>D,yg:()=>x});var d=c(94755),e=c(42910),f=c(39948);let g=!1,h=new Map,i=new Map,j=new Map,k=new Map,l=null,m=null,n=null,o=null,p=null,q=null,r=null;function s(){h.clear(),i.clear(),k.clear()}function t(a){if(a.size>1e3){let b=Math.floor(200),c=0;for(let d of a.keys()){if(c++>=b)break;a.delete(d)}}}function u(a){if(!g)try{let b=a.prepare("PRAGMA table_info(api_keys)").all();new Set(b.map(a=>a.name)).has("allowed_models")||(a.exec("ALTER TABLE api_keys ADD COLUMN allowed_models TEXT"),console.log("[DB] Added api_keys.allowed_models column")),g=!0}catch(a){console.warn("[DB] Failed to verify api_keys schema:",a.message)}}function v(a){return l||(l=a.prepare("SELECT * FROM api_keys ORDER BY created_at"),m=a.prepare("SELECT * FROM api_keys WHERE id = ?"),n=a.prepare("SELECT 1 FROM api_keys WHERE key = ?"),o=a.prepare("SELECT id, name, machine_id, allowed_models FROM api_keys WHERE key = ?"),p=a.prepare("INSERT INTO api_keys (id, name, key, machine_id, allowed_models, created_at) VALUES (?, ?, ?, ?, ?, ?)"),q=a.prepare("UPDATE api_keys SET allowed_models = ? WHERE id = ?"),r=a.prepare("DELETE FROM api_keys WHERE id = ?")),{getAllKeys:l,getKeyById:m,validateKey:n,getKeyMetadata:o,insertKey:p,updatePermissions:q,deleteKey:r}}async function w(){let a=(0,e.sm)();return u(a),v(a).getAllKeys.all().map(a=>{let b=(0,e.kB)(a);return b.allowedModels=y(b.allowedModels),b})}async function x(a){let b=(0,e.sm)();u(b);let c=v(b).getKeyById.get(a);if(!c)return null;let d=(0,e.kB)(c);return d.allowedModels=y(d.allowedModels),d}function y(a){if(!a||"string"!=typeof a||""===a.trim())return[];try{let b=JSON.parse(a);return Array.isArray(b)?b:[]}catch{return[]}}async function z(a,b){if(!b)throw Error("machineId is required");let g=(0,e.sm)();u(g);let h=new Date().toISOString(),{generateApiKeyWithMachine:i}=await c.e(2286).then(c.bind(c,62286)),j=i(b),k={id:(0,d.A)(),name:a,key:j.key,machineId:b,allowedModels:[],createdAt:h};return v(g).insertKey.run(k.id,k.name,k.key,k.machineId,"[]",k.createdAt),(0,f.lR)("pre-write"),k}async function A(a,b){let c=(0,e.sm)();u(c);let d=JSON.stringify(b||[]);return 0!==v(c).updatePermissions.run(d,a).changes&&(s(),(0,f.lR)("pre-write"),!0)}async function B(a){return 0!==v((0,e.sm)()).deleteKey.run(a).changes&&(s(),(0,f.lR)("pre-write"),!0)}async function C(a){if(!a||"string"!=typeof a)return!1;let b=Date.now(),c=h.get(a);if(c&&b-c.timestamp<6e4)return c.valid;let d=!!v((0,e.sm)()).validateKey.get(a);return d&&(t(h),h.set(a,{valid:!0,timestamp:b})),d}async function D(a){if(!a||"string"!=typeof a)return null;let b=Date.now(),c=i.get(a);if(c&&b-c.timestamp<6e4)return c.metadata;let d=(0,e.sm)();u(d);let f=v(d).getKeyMetadata.get(a);if(!f)return null;let g={id:f.id,name:f.name,machineId:f.machine_id,allowedModels:y(f.allowed_models)};return t(i),i.set(a,{metadata:g,timestamp:b}),g}function E(){l=null,m=null,n=null,o=null,p=null,q=null,r=null,g=!1,s(),k.clear(),j.clear()}}};
@@ -1 +1 @@
1
- "use strict";exports.id=7109,exports.ids=[7109],exports.modules={17109:(a,b,c)=>{c.r(b),c.d(b,{POST:()=>z,testSingleConnection:()=>y});var d=c(45592),e=c(40287),f=c(90357),g=c(44963),h=c(38369),i=c(17916),j=c(87068),k=c(27230),l=c(34493),m=c(76340);let n={claude:{checkExpiry:!0},codex:{checkExpiry:!0,refreshable:!0},"gemini-cli":{url:"https://www.googleapis.com/oauth2/v1/userinfo?alt=json",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",refreshable:!0},antigravity:{url:"https://www.googleapis.com/oauth2/v1/userinfo?alt=json",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",refreshable:!0},github:{url:"https://api.github.com/user",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",extraHeaders:{"User-Agent":"OmniRoute",Accept:"application/vnd.github+json"}},iflow:{checkExpiry:!0,refreshable:!0},qwen:{checkExpiry:!0,refreshable:!0},cursor:{checkExpiry:!0},"kimi-coding":{checkExpiry:!0,refreshable:!0},kilocode:{checkExpiry:!0},cline:{checkExpiry:!0,refreshable:!0},kiro:{checkExpiry:!0,refreshable:!0}},o={cline:"cline",kilocode:"kilo"};function p(a,b="Unknown error"){return"string"!=typeof a?b:a.trim()||b}function q(a,b,c,d=null){return{type:a,source:b,message:c||null,code:d??null}}function r({error:a,statusCode:b=null,refreshFailed:c=!1,unsupported:d=!1}){let e=p(a,"Connection test failed"),f=e.toLowerCase(),g=Number.isFinite(b)?Number(b):null;return d?q("unsupported","validation",e,"unsupported"):c||f.includes("refresh failed")?q("token_refresh_failed","oauth",e,"refresh_failed"):401===g||403===g?q("upstream_auth_error","upstream",e,String(g)):429===g?q("upstream_rate_limited","upstream",e,"429"):g&&g>=500?q("upstream_unavailable","upstream",e,String(g)):f.includes("token expired")||f.includes("expired")?q("token_expired","oauth",e,"token_expired"):f.includes("invalid api key")||f.includes("token invalid")||f.includes("revoked")||f.includes("access denied")||f.includes("unauthorized")||f.includes("forbidden")?q("upstream_auth_error","upstream",e,g?String(g):"auth_failed"):f.includes("rate limit")||f.includes("quota")||f.includes("too many requests")?q("upstream_rate_limited","upstream",e,g?String(g):"rate_limited"):f.includes("fetch failed")||f.includes("network")||f.includes("timeout")||f.includes("econn")||f.includes("enotfound")||f.includes("socket")?q("network_error","upstream",e,"network_error"):q("upstream_error","upstream",e,g?String(g):"upstream_error")}async function s(a){let b=o[a];if(!b)return null;try{let a=await (0,i.V5)(b);if(a.installed&&a.runnable)return a;let c=a.installed?`Local CLI runtime is installed but not runnable (${a.reason||"healthcheck_failed"})`:"Local CLI runtime is not installed";return{...a,diagnosis:q("runtime_error","local",c,a.reason||"runtime_error"),error:c}}catch(b){let a=`Failed to check local CLI runtime: ${b?.message||"runtime_check_failed"}`;return{installed:!1,runnable:!1,reason:"runtime_check_failed",diagnosis:q("runtime_error","local",a,"runtime_check_failed"),error:a}}}async function t(a){let{provider:b,refreshToken:c}=a;if(!c)return null;try{let d={refreshToken:c,providerSpecificData:a.providerSpecificData||{}};return await (0,j.iD)(b,d,console)}catch(a){return console.log(`Error refreshing ${b} token:`,a.message),null}}function u(a){let b=a.expiresAt||a.tokenExpiresAt;return!!b&&new Date(b).getTime()<=Date.now()+3e5}async function v(){try{if(!await (0,e.Nx)())return;let a=await (0,f.Xj)();await (0,g.AF)(a)}catch(a){console.log("Error syncing to cloud after token refresh:",a)}}async function w(a){let b=n[a.provider];if(!b){let a="Provider test not supported";return{valid:!1,error:a,refreshed:!1,diagnosis:r({error:a,unsupported:!0})}}if(!a.accessToken){if(b.refreshable&&!a.refreshToken){let a="Refresh token expired. Please re-authenticate this account.";return{valid:!1,error:a,refreshed:!1,diagnosis:q("reauth_required","oauth",a,"reauth_required")}}let c="No access token";return{valid:!1,error:c,refreshed:!1,diagnosis:q("auth_missing","local",c,"missing_access_token")}}let c=a.accessToken,d=!1,e=null,f=u(a);if(b.refreshable&&f&&a.refreshToken){let b=await t(a);if(b)c=b.accessToken,d=!0,e=b;else{let a="Token expired and refresh failed";return{valid:!1,error:a,refreshed:!1,diagnosis:r({error:a,refreshFailed:!0})}}}if(b.checkExpiry){if(d)return{valid:!0,error:null,refreshed:d,newTokens:e,diagnosis:q("ok","oauth",null,null)};if(f){let a="Token expired";return{valid:!1,error:a,refreshed:!1,diagnosis:r({error:a})}}return{valid:!0,error:null,refreshed:!1,newTokens:null,diagnosis:q("ok","local",null,null)}}try{let f={[b.authHeader]:`${b.authPrefix}${c}`,...b.extraHeaders},g=await fetch(b.url,{method:b.method,headers:f});if(g.ok)return{valid:!0,error:null,refreshed:d,newTokens:e,diagnosis:q("ok","upstream",null,null)};if((401===g.status||403===g.status)&&!d&&u(a)&&a.refreshToken&&"string"==typeof a.refreshToken){let c=await t(a);if(c){let a=await fetch(b.url,{method:b.method,headers:{[b.authHeader]:`${b.authPrefix}${c.accessToken}`,...b.extraHeaders}});if(a.ok)return{valid:!0,error:null,refreshed:!0,newTokens:c,diagnosis:q("ok","upstream",null,null)};let d=`API returned ${a.status} after token refresh`;return{valid:!1,error:d,refreshed:!0,statusCode:a.status,diagnosis:r({error:d,statusCode:a.status})}}let d="Token expired and refresh failed";return{valid:!1,error:d,refreshed:!1,statusCode:401,diagnosis:r({error:d,statusCode:401,refreshFailed:!0})}}let h=401===g.status?"Token invalid or revoked":403===g.status?"Access denied":`API returned ${g.status}`;return{valid:!1,error:h,refreshed:d,statusCode:g.status,diagnosis:r({error:h,statusCode:g.status})}}catch(b){let a=p(b?.message,"Connection test failed");return{valid:!1,error:a,refreshed:d,diagnosis:r({error:a})}}}async function x(a){if(!a.apiKey){let a="Missing API key";return{valid:!1,error:a,diagnosis:q("auth_missing","local",a,"missing_api_key")}}let b=await (0,h.j)({provider:a.provider,apiKey:a.apiKey,providerSpecificData:a.providerSpecificData});if(b.unsupported){let a="Provider test not supported";return{valid:!1,error:a,diagnosis:r({error:a,unsupported:!0})}}let c=b.valid?null:b.error||"Invalid API key",d=b.valid?q("ok","upstream",null,null):r({error:c});return{valid:!!b.valid,error:c,diagnosis:d}}async function y(a){let b,c=await (0,e.Mc)(a);if(!c)return{valid:!1,error:"Connection not found",diagnosis:null,latencyMs:0};let d=null;try{d=await (0,e.YD)(a)}catch(b){console.log(`[ConnectionTest] Failed to resolve proxy for ${a}:`,b?.message)}let f=Date.now(),g=await s(c.provider);b=g?.diagnosis?{valid:!1,error:g.error,refreshed:!1,diagnosis:g.diagnosis}:"apikey"===c.authType?await (0,m.jf)(d?.proxy||null,()=>x(c)):await (0,m.jf)(d?.proxy||null,()=>w(c));let h=Date.now()-f,i=new Date().toISOString(),j=b.diagnosis||(b.valid?q("ok","local",null,null):r({error:b.error,statusCode:b.statusCode})),n={testStatus:b.valid?"active":"error",lastError:b.valid?null:b.error,lastErrorAt:b.valid?null:i,lastTested:i,lastErrorType:b.valid?null:j.type,lastErrorSource:b.valid?null:j.source,errorCode:b.valid?null:j.code||b.statusCode||null,rateLimitedUntil:b.valid?null:c.rateLimitedUntil||null};b.valid&&(n.backoffLevel=0),b.refreshed&&b.newTokens&&(n.accessToken=b.newTokens.accessToken,b.newTokens.refreshToken&&(n.refreshToken=b.newTokens.refreshToken),b.newTokens.expiresIn&&(n.expiresAt=new Date(Date.now()+1e3*b.newTokens.expiresIn).toISOString())),await (0,e.rj)(a,n),b.refreshed&&await v();try{(0,k.gK)({method:"POST",path:"/api/providers/test",status:b.valid?200:b.statusCode||401,model:"connection-test",provider:c.provider,connectionId:a,duration:h,error:b.valid?null:b.error||null,sourceFormat:"test",targetFormat:"test"}).catch(()=>{})}catch{}try{(0,l.pq)({status:b.valid?"success":"error",proxy:d?.proxy||null,level:d?.level||"provider-test",levelId:d?.levelId||null,provider:c.provider,targetUrl:`${c.provider}/connection-test`,latencyMs:h,error:b.valid?null:b.error||null,connectionId:a,comboId:null,account:a?.slice(0,8)||null,tlsFingerprint:!1})}catch{}return{valid:b.valid,error:b.error,refreshed:b.refreshed||!1,diagnosis:j,latencyMs:h,statusCode:b.statusCode||null,runtime:g||null,testedAt:i}}async function z(a,{params:b}){try{let{id:a}=await b,c=await y(a);if("Connection not found"===c.error)return d.NextResponse.json({error:"Connection not found"},{status:404});return d.NextResponse.json(c)}catch(a){return console.log("Error testing connection:",a),d.NextResponse.json({error:"Test failed"},{status:500})}}},17916:(a,b,c)=>{c.d(b,{CU:()=>s,MG:()=>u,V5:()=>v,XH:()=>w,hl:()=>t});var d=c(79748),e=c.n(d),f=c(21820),g=c.n(f),h=c(33873),i=c.n(h),j=c(79646);let k=new Set(["auto","host","container"]),l=new Set(["0","false","no","off"]),m={claude:{defaultCommand:"claude",envBinKey:"CLI_CLAUDE_BIN",requiresBinary:!0,healthcheckTimeoutMs:4e3,paths:{settings:".claude/settings.json"}},codex:{defaultCommand:"codex",envBinKey:"CLI_CODEX_BIN",requiresBinary:!0,healthcheckTimeoutMs:4e3,paths:{config:".codex/config.toml",auth:".codex/auth.json"}},droid:{defaultCommand:"droid",envBinKey:"CLI_DROID_BIN",requiresBinary:!0,healthcheckTimeoutMs:8e3,paths:{settings:".factory/settings.json"}},openclaw:{defaultCommand:"openclaw",envBinKey:"CLI_OPENCLAW_BIN",requiresBinary:!0,healthcheckTimeoutMs:12e3,paths:{settings:".openclaw/openclaw.json"}},cursor:{defaultCommands:["agent","cursor"],envBinKey:"CLI_CURSOR_BIN",requiresBinary:!0,healthcheckTimeoutMs:12e3,paths:{config:".cursor/cli-config.json",auth:".config/cursor/auth.json",state:".cursor/agent-cli-state.json"}},cline:{defaultCommand:"cline",envBinKey:"CLI_CLINE_BIN",requiresBinary:!0,healthcheckTimeoutMs:12e3,paths:{globalState:".cline/data/globalState.json",secrets:".cline/data/secrets.json"}},kilo:{defaultCommand:"kilocode",envBinKey:"CLI_KILO_BIN",requiresBinary:!0,healthcheckTimeoutMs:4e3,paths:{auth:".local/share/kilo/auth.json"}},continue:{defaultCommand:null,envBinKey:"CLI_CONTINUE_BIN",requiresBinary:!1,paths:{settings:".continue/config.json"}}},n=(a,b,{env:c,timeoutMs:d=3e3}={})=>new Promise(e=>{let f="",g="",h=!1,i=!1,k=(0,j.spawn)(a,b,{env:c,stdio:["ignore","pipe","pipe"]}),l=setTimeout(()=>{h=!0,k.kill("SIGKILL")},d),m=a=>{i||(i=!0,clearTimeout(l),e(a))};k.stdout.on("data",a=>{f+=a.toString()}),k.stderr.on("data",a=>{g+=a.toString()}),k.on("error",a=>{m({ok:!1,code:null,stdout:f.trim(),stderr:g.trim(),timedOut:h,error:a?.message||"spawn_error"})}),k.on("close",a=>{m({ok:!h&&0===a,code:a,stdout:f.trim(),stderr:g.trim(),timedOut:h,error:h?"timeout":null})})}),o=async a=>{try{await e().access(a,e().constants.F_OK)}catch{return{installed:!1,commandPath:null,reason:"not_found"}}try{return await e().access(a,e().constants.X_OK),{installed:!0,commandPath:a,reason:null}}catch{return{installed:!0,commandPath:a,reason:"not_executable"}}},p=async(a,b)=>{if(!a)return{installed:!1,commandPath:null,reason:"missing_command"};if(a.includes("/")||a.includes("\\"))return o(a);if("win32"===process.platform){let c=await n("where",[a],{env:b,timeoutMs:3e3});if(!c.ok||!c.stdout)return{installed:!1,commandPath:null,reason:"not_found"};let d=c.stdout.split(/\r?\n/).map(a=>a.trim()).find(Boolean)||null;return{installed:!!d,commandPath:d,reason:d?null:"not_found"}}let c=await n("sh",["-c",'command -v -- "$1"',"sh",a],{env:b,timeoutMs:3e3});if(!c.ok||!c.stdout)return{installed:!1,commandPath:null,reason:"not_found"};let d=c.stdout.split(/\r?\n/).map(a=>a.trim()).find(Boolean)||null;return{installed:!!d,commandPath:d,reason:d?null:"not_found"}},q=async(a,b)=>{if(!Array.isArray(a)||0===a.length)return{command:null,installed:!1,commandPath:null,reason:"missing_command"};for(let c of a){let a=await p(c,b);if(a.installed||"not_found"!==a.reason)return{command:c,...a}}return{command:a[0],installed:!1,commandPath:null,reason:"not_found"}},r=async(a,b,c=4e3)=>{for(let d of[["--version"],["-v"]])if((await n(a,d,{env:b,timeoutMs:c})).ok)return{runnable:!0,reason:null};return{runnable:!1,reason:"healthcheck_failed"}},s=()=>((a,b=!0)=>null==a||""===a?b:!l.has(String(a).trim().toLowerCase()))(process.env.CLI_ALLOW_CONFIG_WRITES,!0)?null:"CLI config writes are disabled (CLI_ALLOW_CONFIG_WRITES=false)",t=a=>{let b=m[a];if(!b)return null;let c=String(process.env.CLI_CONFIG_HOME||"").trim()||g().homedir();return Object.fromEntries(Object.entries(b.paths).map(([a,b])=>[a,i().join(c,b)]))},u=a=>{let b=t(a);if(!b)return null;let c=Object.keys(b)[0];return c?b[c]:null},v=async a=>{let b,c,d,e=m[a],f=(b=String(process.env.CLI_MODE||"auto").trim().toLowerCase(),k.has(b)?b:"auto");if(!e)return{installed:!1,runnable:!1,command:null,commandPath:null,reason:"unknown_tool",runtimeMode:f,requiresBinary:!1};let g=(c={...process.env},(d=String(process.env.CLI_EXTRA_PATHS||"").split(i().delimiter).map(a=>a.trim()).filter(Boolean)).length>0&&(c.PATH=[...d,c.PATH||""].filter(Boolean).join(i().delimiter)),c),h=(a=>{let b=m[a];if(!b)return[];let c=String(process.env[b.envBinKey]||"").trim();return c?[c]:Array.isArray(b.defaultCommands)&&b.defaultCommands.length>0?b.defaultCommands.filter(Boolean):b.defaultCommand?[b.defaultCommand]:[]})(a),j=!1!==e.requiresBinary;if(!j&&0===h.length)return{installed:!0,runnable:!0,command:null,commandPath:null,reason:"not_required",runtimeMode:f,requiresBinary:j};let l=await q(h,g),n=l.command;if(!l.installed)return{installed:!1,runnable:!1,command:n,commandPath:null,reason:l.reason||"not_found",runtimeMode:f,requiresBinary:j};if("not_executable"===l.reason)return{installed:!0,runnable:!1,command:n,commandPath:l.commandPath,reason:"not_executable",runtimeMode:f,requiresBinary:j};let o=await r(l.commandPath,g,Number(e.healthcheckTimeoutMs||4e3));return{installed:!0,runnable:o.runnable,command:n,commandPath:l.commandPath,reason:o.reason,runtimeMode:f,requiresBinary:j}},w=Object.keys(m)},44963:(a,b,c)=>{c.d(b,{AF:()=>h,of:()=>e,u9:()=>g});var d=c(40287);let e=process.env.CLOUD_URL||process.env.NEXT_PUBLIC_CLOUD_URL,f=Number(process.env.CLOUD_SYNC_TIMEOUT_MS||12e3);async function g(a,b={},c=f){let d=new AbortController,e=setTimeout(()=>d.abort(),c);try{return await fetch(a,{...b,signal:d.signal})}finally{clearTimeout(e)}}async function h(a,b=null){let c;if(!e)return{error:"NEXT_PUBLIC_CLOUD_URL is not configured"};let f=await (0,d.getProviderConnections)(),j=await (0,d.OM)(),k=await (0,d.Uv)(),l=await (0,d.PX)();try{c=await g(`${e}/sync/${a}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({providers:f,modelAliases:j,combos:k,apiKeys:l})})}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 m=await c.json();m.data&&m.data.providers&&await i(m.data.providers);let n={success:!0,message:"Synced successfully",changes:m.changes};return b&&(n.createdKey=b),n}async function i(a){for(let b of(await (0,d.getProviderConnections)())){let c=a[b.id];if(c){if(new Date(c.updatedAt||0).getTime()>new Date(b.updatedAt||0).getTime()){let a={accessToken:c.accessToken,refreshToken:c.refreshToken,expiresAt:c.expiresAt,expiresIn:c.expiresIn,providerSpecificData:c.providerSpecificData||b.providerSpecificData,testStatus:c.status||"active",lastError:c.lastError,lastErrorAt:c.lastErrorAt,errorCode:c.errorCode,rateLimitedUntil:c.rateLimitedUntil,updatedAt:c.updatedAt};await (0,d.rj)(b.id,a)}}}}},90357:(a,b,c)=>{c.d(b,{Xj:()=>e});var d=c(19713);async function e(a=null){let b=a||process.env.MACHINE_ID_SALT||"endpoint-proxy-salt";try{let a=(0,d.machineIdSync)();return(await Promise.resolve().then(c.t.bind(c,55511,23))).createHash("sha256").update(a+b).digest("hex").substring(0,16)}catch(a){return console.log("Error getting machine ID:",a),crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){let b=16*Math.random()|0;return("x"==a?b:3&b|8).toString(16)})}}}};
1
+ "use strict";exports.id=7109,exports.ids=[7109],exports.modules={17109:(a,b,c)=>{c.r(b),c.d(b,{POST:()=>z,testSingleConnection:()=>y});var d=c(45592),e=c(22901),f=c(90357),g=c(44963),h=c(38369),i=c(17916),j=c(87068),k=c(27230),l=c(34493),m=c(76340);let n={claude:{checkExpiry:!0},codex:{checkExpiry:!0,refreshable:!0},"gemini-cli":{url:"https://www.googleapis.com/oauth2/v1/userinfo?alt=json",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",refreshable:!0},antigravity:{url:"https://www.googleapis.com/oauth2/v1/userinfo?alt=json",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",refreshable:!0},github:{url:"https://api.github.com/user",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",extraHeaders:{"User-Agent":"OmniRoute",Accept:"application/vnd.github+json"}},iflow:{checkExpiry:!0,refreshable:!0},qwen:{checkExpiry:!0,refreshable:!0},cursor:{checkExpiry:!0},"kimi-coding":{checkExpiry:!0,refreshable:!0},kilocode:{checkExpiry:!0},cline:{checkExpiry:!0,refreshable:!0},kiro:{checkExpiry:!0,refreshable:!0}},o={cline:"cline",kilocode:"kilo"};function p(a,b="Unknown error"){return"string"!=typeof a?b:a.trim()||b}function q(a,b,c,d=null){return{type:a,source:b,message:c||null,code:d??null}}function r({error:a,statusCode:b=null,refreshFailed:c=!1,unsupported:d=!1}){let e=p(a,"Connection test failed"),f=e.toLowerCase(),g=Number.isFinite(b)?Number(b):null;return d?q("unsupported","validation",e,"unsupported"):c||f.includes("refresh failed")?q("token_refresh_failed","oauth",e,"refresh_failed"):401===g||403===g?q("upstream_auth_error","upstream",e,String(g)):429===g?q("upstream_rate_limited","upstream",e,"429"):g&&g>=500?q("upstream_unavailable","upstream",e,String(g)):f.includes("token expired")||f.includes("expired")?q("token_expired","oauth",e,"token_expired"):f.includes("invalid api key")||f.includes("token invalid")||f.includes("revoked")||f.includes("access denied")||f.includes("unauthorized")||f.includes("forbidden")?q("upstream_auth_error","upstream",e,g?String(g):"auth_failed"):f.includes("rate limit")||f.includes("quota")||f.includes("too many requests")?q("upstream_rate_limited","upstream",e,g?String(g):"rate_limited"):f.includes("fetch failed")||f.includes("network")||f.includes("timeout")||f.includes("econn")||f.includes("enotfound")||f.includes("socket")?q("network_error","upstream",e,"network_error"):q("upstream_error","upstream",e,g?String(g):"upstream_error")}async function s(a){let b=o[a];if(!b)return null;try{let a=await (0,i.V5)(b);if(a.installed&&a.runnable)return a;let c=a.installed?`Local CLI runtime is installed but not runnable (${a.reason||"healthcheck_failed"})`:"Local CLI runtime is not installed";return{...a,diagnosis:q("runtime_error","local",c,a.reason||"runtime_error"),error:c}}catch(b){let a=`Failed to check local CLI runtime: ${b?.message||"runtime_check_failed"}`;return{installed:!1,runnable:!1,reason:"runtime_check_failed",diagnosis:q("runtime_error","local",a,"runtime_check_failed"),error:a}}}async function t(a){let{provider:b,refreshToken:c}=a;if(!c)return null;try{let d={refreshToken:c,providerSpecificData:a.providerSpecificData||{}};return await (0,j.iD)(b,d,console)}catch(a){return console.log(`Error refreshing ${b} token:`,a.message),null}}function u(a){let b=a.expiresAt||a.tokenExpiresAt;return!!b&&new Date(b).getTime()<=Date.now()+3e5}async function v(){try{if(!await (0,e.Nx)())return;let a=await (0,f.Xj)();await (0,g.AF)(a)}catch(a){console.log("Error syncing to cloud after token refresh:",a)}}async function w(a){let b=n[a.provider];if(!b){let a="Provider test not supported";return{valid:!1,error:a,refreshed:!1,diagnosis:r({error:a,unsupported:!0})}}if(!a.accessToken){if(b.refreshable&&!a.refreshToken){let a="Refresh token expired. Please re-authenticate this account.";return{valid:!1,error:a,refreshed:!1,diagnosis:q("reauth_required","oauth",a,"reauth_required")}}let c="No access token";return{valid:!1,error:c,refreshed:!1,diagnosis:q("auth_missing","local",c,"missing_access_token")}}let c=a.accessToken,d=!1,e=null,f=u(a);if(b.refreshable&&f&&a.refreshToken){let b=await t(a);if(b)c=b.accessToken,d=!0,e=b;else{let a="Token expired and refresh failed";return{valid:!1,error:a,refreshed:!1,diagnosis:r({error:a,refreshFailed:!0})}}}if(b.checkExpiry){if(d)return{valid:!0,error:null,refreshed:d,newTokens:e,diagnosis:q("ok","oauth",null,null)};if(f){let a="Token expired";return{valid:!1,error:a,refreshed:!1,diagnosis:r({error:a})}}return{valid:!0,error:null,refreshed:!1,newTokens:null,diagnosis:q("ok","local",null,null)}}try{let f={[b.authHeader]:`${b.authPrefix}${c}`,...b.extraHeaders},g=await fetch(b.url,{method:b.method,headers:f});if(g.ok)return{valid:!0,error:null,refreshed:d,newTokens:e,diagnosis:q("ok","upstream",null,null)};if((401===g.status||403===g.status)&&!d&&u(a)&&a.refreshToken&&"string"==typeof a.refreshToken){let c=await t(a);if(c){let a=await fetch(b.url,{method:b.method,headers:{[b.authHeader]:`${b.authPrefix}${c.accessToken}`,...b.extraHeaders}});if(a.ok)return{valid:!0,error:null,refreshed:!0,newTokens:c,diagnosis:q("ok","upstream",null,null)};let d=`API returned ${a.status} after token refresh`;return{valid:!1,error:d,refreshed:!0,statusCode:a.status,diagnosis:r({error:d,statusCode:a.status})}}let d="Token expired and refresh failed";return{valid:!1,error:d,refreshed:!1,statusCode:401,diagnosis:r({error:d,statusCode:401,refreshFailed:!0})}}let h=401===g.status?"Token invalid or revoked":403===g.status?"Access denied":`API returned ${g.status}`;return{valid:!1,error:h,refreshed:d,statusCode:g.status,diagnosis:r({error:h,statusCode:g.status})}}catch(b){let a=p(b?.message,"Connection test failed");return{valid:!1,error:a,refreshed:d,diagnosis:r({error:a})}}}async function x(a){if(!a.apiKey){let a="Missing API key";return{valid:!1,error:a,diagnosis:q("auth_missing","local",a,"missing_api_key")}}let b=await (0,h.j)({provider:a.provider,apiKey:a.apiKey,providerSpecificData:a.providerSpecificData});if(b.unsupported){let a="Provider test not supported";return{valid:!1,error:a,diagnosis:r({error:a,unsupported:!0})}}let c=b.valid?null:b.error||"Invalid API key",d=b.valid?q("ok","upstream",null,null):r({error:c});return{valid:!!b.valid,error:c,diagnosis:d}}async function y(a){let b,c=await (0,e.Mc)(a);if(!c)return{valid:!1,error:"Connection not found",diagnosis:null,latencyMs:0};let d=null;try{d=await (0,e.YD)(a)}catch(b){console.log(`[ConnectionTest] Failed to resolve proxy for ${a}:`,b?.message)}let f=Date.now(),g=await s(c.provider);b=g?.diagnosis?{valid:!1,error:g.error,refreshed:!1,diagnosis:g.diagnosis}:"apikey"===c.authType?await (0,m.jf)(d?.proxy||null,()=>x(c)):await (0,m.jf)(d?.proxy||null,()=>w(c));let h=Date.now()-f,i=new Date().toISOString(),j=b.diagnosis||(b.valid?q("ok","local",null,null):r({error:b.error,statusCode:b.statusCode})),n={testStatus:b.valid?"active":"error",lastError:b.valid?null:b.error,lastErrorAt:b.valid?null:i,lastTested:i,lastErrorType:b.valid?null:j.type,lastErrorSource:b.valid?null:j.source,errorCode:b.valid?null:j.code||b.statusCode||null,rateLimitedUntil:b.valid?null:c.rateLimitedUntil||null};b.valid&&(n.backoffLevel=0),b.refreshed&&b.newTokens&&(n.accessToken=b.newTokens.accessToken,b.newTokens.refreshToken&&(n.refreshToken=b.newTokens.refreshToken),b.newTokens.expiresIn&&(n.expiresAt=new Date(Date.now()+1e3*b.newTokens.expiresIn).toISOString())),await (0,e.rj)(a,n),b.refreshed&&await v();try{(0,k.gK)({method:"POST",path:"/api/providers/test",status:b.valid?200:b.statusCode||401,model:"connection-test",provider:c.provider,connectionId:a,duration:h,error:b.valid?null:b.error||null,sourceFormat:"test",targetFormat:"test"}).catch(()=>{})}catch{}try{(0,l.pq)({status:b.valid?"success":"error",proxy:d?.proxy||null,level:d?.level||"provider-test",levelId:d?.levelId||null,provider:c.provider,targetUrl:`${c.provider}/connection-test`,latencyMs:h,error:b.valid?null:b.error||null,connectionId:a,comboId:null,account:a?.slice(0,8)||null,tlsFingerprint:!1})}catch{}return{valid:b.valid,error:b.error,refreshed:b.refreshed||!1,diagnosis:j,latencyMs:h,statusCode:b.statusCode||null,runtime:g||null,testedAt:i}}async function z(a,{params:b}){try{let{id:a}=await b,c=await y(a);if("Connection not found"===c.error)return d.NextResponse.json({error:"Connection not found"},{status:404});return d.NextResponse.json(c)}catch(a){return console.log("Error testing connection:",a),d.NextResponse.json({error:"Test failed"},{status:500})}}},17916:(a,b,c)=>{c.d(b,{CU:()=>s,MG:()=>u,V5:()=>v,XH:()=>w,hl:()=>t});var d=c(79748),e=c.n(d),f=c(21820),g=c.n(f),h=c(33873),i=c.n(h),j=c(79646);let k=new Set(["auto","host","container"]),l=new Set(["0","false","no","off"]),m={claude:{defaultCommand:"claude",envBinKey:"CLI_CLAUDE_BIN",requiresBinary:!0,healthcheckTimeoutMs:4e3,paths:{settings:".claude/settings.json"}},codex:{defaultCommand:"codex",envBinKey:"CLI_CODEX_BIN",requiresBinary:!0,healthcheckTimeoutMs:4e3,paths:{config:".codex/config.toml",auth:".codex/auth.json"}},droid:{defaultCommand:"droid",envBinKey:"CLI_DROID_BIN",requiresBinary:!0,healthcheckTimeoutMs:8e3,paths:{settings:".factory/settings.json"}},openclaw:{defaultCommand:"openclaw",envBinKey:"CLI_OPENCLAW_BIN",requiresBinary:!0,healthcheckTimeoutMs:12e3,paths:{settings:".openclaw/openclaw.json"}},cursor:{defaultCommands:["agent","cursor"],envBinKey:"CLI_CURSOR_BIN",requiresBinary:!0,healthcheckTimeoutMs:12e3,paths:{config:".cursor/cli-config.json",auth:".config/cursor/auth.json",state:".cursor/agent-cli-state.json"}},cline:{defaultCommand:"cline",envBinKey:"CLI_CLINE_BIN",requiresBinary:!0,healthcheckTimeoutMs:12e3,paths:{globalState:".cline/data/globalState.json",secrets:".cline/data/secrets.json"}},kilo:{defaultCommand:"kilocode",envBinKey:"CLI_KILO_BIN",requiresBinary:!0,healthcheckTimeoutMs:4e3,paths:{auth:".local/share/kilo/auth.json"}},continue:{defaultCommand:null,envBinKey:"CLI_CONTINUE_BIN",requiresBinary:!1,paths:{settings:".continue/config.json"}}},n=(a,b,{env:c,timeoutMs:d=3e3}={})=>new Promise(e=>{let f="",g="",h=!1,i=!1,k=(0,j.spawn)(a,b,{env:c,stdio:["ignore","pipe","pipe"]}),l=setTimeout(()=>{h=!0,k.kill("SIGKILL")},d),m=a=>{i||(i=!0,clearTimeout(l),e(a))};k.stdout.on("data",a=>{f+=a.toString()}),k.stderr.on("data",a=>{g+=a.toString()}),k.on("error",a=>{m({ok:!1,code:null,stdout:f.trim(),stderr:g.trim(),timedOut:h,error:a?.message||"spawn_error"})}),k.on("close",a=>{m({ok:!h&&0===a,code:a,stdout:f.trim(),stderr:g.trim(),timedOut:h,error:h?"timeout":null})})}),o=async a=>{try{await e().access(a,e().constants.F_OK)}catch{return{installed:!1,commandPath:null,reason:"not_found"}}try{return await e().access(a,e().constants.X_OK),{installed:!0,commandPath:a,reason:null}}catch{return{installed:!0,commandPath:a,reason:"not_executable"}}},p=async(a,b)=>{if(!a)return{installed:!1,commandPath:null,reason:"missing_command"};if(a.includes("/")||a.includes("\\"))return o(a);if("win32"===process.platform){let c=await n("where",[a],{env:b,timeoutMs:3e3});if(!c.ok||!c.stdout)return{installed:!1,commandPath:null,reason:"not_found"};let d=c.stdout.split(/\r?\n/).map(a=>a.trim()).find(Boolean)||null;return{installed:!!d,commandPath:d,reason:d?null:"not_found"}}let c=await n("sh",["-c",'command -v -- "$1"',"sh",a],{env:b,timeoutMs:3e3});if(!c.ok||!c.stdout)return{installed:!1,commandPath:null,reason:"not_found"};let d=c.stdout.split(/\r?\n/).map(a=>a.trim()).find(Boolean)||null;return{installed:!!d,commandPath:d,reason:d?null:"not_found"}},q=async(a,b)=>{if(!Array.isArray(a)||0===a.length)return{command:null,installed:!1,commandPath:null,reason:"missing_command"};for(let c of a){let a=await p(c,b);if(a.installed||"not_found"!==a.reason)return{command:c,...a}}return{command:a[0],installed:!1,commandPath:null,reason:"not_found"}},r=async(a,b,c=4e3)=>{for(let d of[["--version"],["-v"]])if((await n(a,d,{env:b,timeoutMs:c})).ok)return{runnable:!0,reason:null};return{runnable:!1,reason:"healthcheck_failed"}},s=()=>((a,b=!0)=>null==a||""===a?b:!l.has(String(a).trim().toLowerCase()))(process.env.CLI_ALLOW_CONFIG_WRITES,!0)?null:"CLI config writes are disabled (CLI_ALLOW_CONFIG_WRITES=false)",t=a=>{let b=m[a];if(!b)return null;let c=String(process.env.CLI_CONFIG_HOME||"").trim()||g().homedir();return Object.fromEntries(Object.entries(b.paths).map(([a,b])=>[a,i().join(c,b)]))},u=a=>{let b=t(a);if(!b)return null;let c=Object.keys(b)[0];return c?b[c]:null},v=async a=>{let b,c,d,e=m[a],f=(b=String(process.env.CLI_MODE||"auto").trim().toLowerCase(),k.has(b)?b:"auto");if(!e)return{installed:!1,runnable:!1,command:null,commandPath:null,reason:"unknown_tool",runtimeMode:f,requiresBinary:!1};let g=(c={...process.env},(d=String(process.env.CLI_EXTRA_PATHS||"").split(i().delimiter).map(a=>a.trim()).filter(Boolean)).length>0&&(c.PATH=[...d,c.PATH||""].filter(Boolean).join(i().delimiter)),c),h=(a=>{let b=m[a];if(!b)return[];let c=String(process.env[b.envBinKey]||"").trim();return c?[c]:Array.isArray(b.defaultCommands)&&b.defaultCommands.length>0?b.defaultCommands.filter(Boolean):b.defaultCommand?[b.defaultCommand]:[]})(a),j=!1!==e.requiresBinary;if(!j&&0===h.length)return{installed:!0,runnable:!0,command:null,commandPath:null,reason:"not_required",runtimeMode:f,requiresBinary:j};let l=await q(h,g),n=l.command;if(!l.installed)return{installed:!1,runnable:!1,command:n,commandPath:null,reason:l.reason||"not_found",runtimeMode:f,requiresBinary:j};if("not_executable"===l.reason)return{installed:!0,runnable:!1,command:n,commandPath:l.commandPath,reason:"not_executable",runtimeMode:f,requiresBinary:j};let o=await r(l.commandPath,g,Number(e.healthcheckTimeoutMs||4e3));return{installed:!0,runnable:o.runnable,command:n,commandPath:l.commandPath,reason:o.reason,runtimeMode:f,requiresBinary:j}},w=Object.keys(m)},44963:(a,b,c)=>{c.d(b,{AF:()=>h,of:()=>e,u9:()=>g});var d=c(22901);let e=process.env.CLOUD_URL||process.env.NEXT_PUBLIC_CLOUD_URL,f=Number(process.env.CLOUD_SYNC_TIMEOUT_MS||12e3);async function g(a,b={},c=f){let d=new AbortController,e=setTimeout(()=>d.abort(),c);try{return await fetch(a,{...b,signal:d.signal})}finally{clearTimeout(e)}}async function h(a,b=null){let c;if(!e)return{error:"NEXT_PUBLIC_CLOUD_URL is not configured"};let f=await (0,d.getProviderConnections)(),j=await (0,d.OM)(),k=await (0,d.Uv)(),l=await (0,d.PX)();try{c=await g(`${e}/sync/${a}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({providers:f,modelAliases:j,combos:k,apiKeys:l})})}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 m=await c.json();m.data&&m.data.providers&&await i(m.data.providers);let n={success:!0,message:"Synced successfully",changes:m.changes};return b&&(n.createdKey=b),n}async function i(a){for(let b of(await (0,d.getProviderConnections)())){let c=a[b.id];if(c){if(new Date(c.updatedAt||0).getTime()>new Date(b.updatedAt||0).getTime()){let a={accessToken:c.accessToken,refreshToken:c.refreshToken,expiresAt:c.expiresAt,expiresIn:c.expiresIn,providerSpecificData:c.providerSpecificData||b.providerSpecificData,testStatus:c.status||"active",lastError:c.lastError,lastErrorAt:c.lastErrorAt,errorCode:c.errorCode,rateLimitedUntil:c.rateLimitedUntil,updatedAt:c.updatedAt};await (0,d.rj)(b.id,a)}}}}},90357:(a,b,c)=>{c.d(b,{Xj:()=>e});var d=c(19713);async function e(a=null){let b=a||process.env.MACHINE_ID_SALT||"endpoint-proxy-salt";try{let a=(0,d.machineIdSync)();return(await Promise.resolve().then(c.t.bind(c,55511,23))).createHash("sha256").update(a+b).digest("hex").substring(0,16)}catch(a){return console.log("Error getting machine ID:",a),crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){let b=16*Math.random()|0;return("x"==a?b:3&b|8).toString(16)})}}}};
@@ -17,8 +17,8 @@
17
17
  tokens_input, tokens_output, tokens_cache_read, tokens_cache_creation, tokens_reasoning,
18
18
  status, timestamp)
19
19
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
20
- `).run(a.provider||null,a.model||null,a.connectionId||null,a.apiKeyId||null,a.apiKeyName||null,a.tokens?.input??a.tokens?.prompt_tokens??0,a.tokens?.output??a.tokens?.completion_tokens??0,a.tokens?.cacheRead??a.tokens?.cached_tokens??0,a.tokens?.cacheCreation??a.tokens?.cache_creation_input_tokens??0,a.tokens?.reasoning??a.tokens?.reasoning_tokens??0,a.status||null,c)}catch(a){console.error("Failed to save usage stats:",a)}}async function y({model:a,provider:b,connectionId:d,tokens:e,status:f}){if(j)try{let h=function(a=new Date){let b=a=>String(a).padStart(2,"0"),c=b(a.getDate()),d=b(a.getMonth()+1),e=a.getFullYear(),f=b(a.getHours()),g=b(a.getMinutes()),h=b(a.getSeconds());return`${c}-${d}-${e} ${f}:${g}:${h}`}(),i=b?.toUpperCase()||"-",j=d?d.slice(0,8):"-";try{let{getProviderConnections:a}=await Promise.all([c.e(3596),c.e(287),c.e(4755)]).then(c.bind(c,40287)),b=(await a()).find(a=>a.id===d);b&&(j=b.name||b.email||j)}catch{}let k=e?.input!==void 0?e.input:e?.prompt_tokens!==void 0?e.prompt_tokens:"-",m=e?.output!==void 0?e.output:e?.completion_tokens!==void 0?e.completion_tokens:"-",n=`${h} | ${a||"-"} | ${i} | ${j} | ${k} | ${m} | ${f}
21
- `;g().appendFileSync(l,n);let o=g().readFileSync(l,"utf-8").trim().split("\n");o.length>200&&g().writeFileSync(l,o.slice(-200).join("\n")+"\n")}catch(a){console.error("Failed to append to log.txt:",a.message)}}async function z(a=200){if(!j||!g()||"function"!=typeof g().existsSync||!l||!g().existsSync(l))return[];try{return g().readFileSync(l,"utf-8").trim().split("\n").slice(-a).reverse()}catch(a){return console.error("[usageDb] Failed to read log.txt:",a.message),[]}}async function A(a,b,d){if(!d||!a||!b)return 0;try{let{getPricingForModel:e}=await Promise.all([c.e(3596),c.e(287),c.e(4755)]).then(c.bind(c,40287)),f=await e(a,b);if(!f){let c=function(a){if(!a||!a.includes("/"))return a;let b=a.split("/");return b[b.length-1]}(b);c!==b&&(f=await e(a,c))}if(!f)return 0;let g=0,h=d.input??d.prompt_tokens??d.input_tokens??0,i=d.cacheRead??d.cached_tokens??d.cache_read_input_tokens??0,j=Math.max(0,h-i);g+=j*(f.input/1e6),i>0&&(g+=i*((f.cached||f.input)/1e6));let k=d.output??d.completion_tokens??d.output_tokens??0;g+=k*(f.output/1e6);let l=d.reasoning??d.reasoning_tokens??0;l>0&&(g+=l*((f.reasoning||f.output)/1e6));let m=d.cacheCreation??d.cache_creation_input_tokens??0;return m>0&&(g+=m*((f.cache_creation||f.input)/1e6)),g}catch(a){return console.error("Error calculating cost:",a),0}}async function B(){let a=(0,h.sm)().prepare("SELECT * FROM usage_history ORDER BY timestamp ASC").all(),{getProviderConnections:b}=await Promise.all([c.e(3596),c.e(287),c.e(4755)]).then(c.bind(c,40287)),d=[];try{d=await b()}catch{}let e={};for(let a of d)e[a.id]=a.name||a.email||a.id;let f={totalRequests:a.length,totalPromptTokens:0,totalCompletionTokens:0,totalCost:0,byProvider:{},byModel:{},byAccount:{},byApiKey:{},last10Minutes:[],pending:u,activeRequests:[]};for(let[a,b]of Object.entries(u.byAccount))for(let[c,d]of Object.entries(b))if(d>0){let b=e[a]||`Account ${a.slice(0,8)}...`,g=c.match(/^(.*) \((.*)\)$/);f.activeRequests.push({model:g?g[1]:c,provider:g?g[2]:"unknown",account:b,count:d})}let g=new Date,i=new Date(6e4*Math.floor(g.getTime()/6e4)),j={};for(let a=0;a<10;a++){let b=new Date(i.getTime()-(9-a)*6e4).getTime();j[b]={requests:0,promptTokens:0,completionTokens:0,cost:0},f.last10Minutes.push(j[b])}let k=new Date(i.getTime()-54e4);for(let b of a){let a=b.tokens_input||0,c=b.tokens_output||0,d=new Date(b.timestamp),h={input:b.tokens_input,output:b.tokens_output,cacheRead:b.tokens_cache_read,cacheCreation:b.tokens_cache_creation,reasoning:b.tokens_reasoning},i=await A(b.provider,b.model,h);if(f.totalPromptTokens+=a,f.totalCompletionTokens+=c,f.totalCost+=i,d>=k&&d<=g){let b=6e4*Math.floor(d.getTime()/6e4);j[b]&&(j[b].requests++,j[b].promptTokens+=a,j[b].completionTokens+=c,j[b].cost+=i)}f.byProvider[b.provider]||(f.byProvider[b.provider]={requests:0,promptTokens:0,completionTokens:0,cost:0}),f.byProvider[b.provider].requests++,f.byProvider[b.provider].promptTokens+=a,f.byProvider[b.provider].completionTokens+=c,f.byProvider[b.provider].cost+=i;let l=b.provider?`${b.model} (${b.provider})`:b.model;if(f.byModel[l]||(f.byModel[l]={requests:0,promptTokens:0,completionTokens:0,cost:0,rawModel:b.model,provider:b.provider,lastUsed:b.timestamp}),f.byModel[l].requests++,f.byModel[l].promptTokens+=a,f.byModel[l].completionTokens+=c,f.byModel[l].cost+=i,new Date(b.timestamp)>new Date(f.byModel[l].lastUsed)&&(f.byModel[l].lastUsed=b.timestamp),b.connection_id){let d=e[b.connection_id]||`Account ${b.connection_id.slice(0,8)}...`,g=`${b.model} (${b.provider} - ${d})`;f.byAccount[g]||(f.byAccount[g]={requests:0,promptTokens:0,completionTokens:0,cost:0,rawModel:b.model,provider:b.provider,connectionId:b.connection_id,accountName:d,lastUsed:b.timestamp}),f.byAccount[g].requests++,f.byAccount[g].promptTokens+=a,f.byAccount[g].completionTokens+=c,f.byAccount[g].cost+=i,new Date(b.timestamp)>new Date(f.byAccount[g].lastUsed)&&(f.byAccount[g].lastUsed=b.timestamp)}if(b.api_key_id||b.api_key_name){let d=b.api_key_name||b.api_key_id||"unknown",e=b.api_key_id||null,g=e?`${d} (${e})`:d;f.byApiKey[g]||(f.byApiKey[g]={requests:0,promptTokens:0,completionTokens:0,cost:0,apiKeyId:e,apiKeyName:d,lastUsed:b.timestamp}),f.byApiKey[g].requests++,f.byApiKey[g].promptTokens+=a,f.byApiKey[g].completionTokens+=c,f.byApiKey[g].cost+=i,new Date(b.timestamp)>new Date(f.byApiKey[g].lastUsed)&&(f.byApiKey[g].lastUsed=b.timestamp)}}return f}let C=parseInt(process.env.LOG_RETENTION_DAYS||"7",10),D=new Set(["api_key","apiKey","api-key","authorization","Authorization","x-api-key","X-Api-Key","access_token","accessToken","refresh_token","refreshToken","password","secret","token"]),E=0;async function F(a){if(j)try{let b=a.connectionId?a.connectionId.slice(0,8):"-";try{let{getProviderConnections:d}=await Promise.all([c.e(3596),c.e(287),c.e(4755)]).then(c.bind(c,40287)),e=(await d()).find(b=>b.id===a.connectionId);e&&(b=e.name||e.email||b)}catch{}let d=a=>{if(!a)return null;let b=function a(b){if(!b||"object"!=typeof b)return b;if(Array.isArray(b))return b.map(a);let c={};for(let[d,e]of Object.entries(b))D.has(d)?c[d]="[REDACTED]":"string"==typeof e&&e.startsWith("Bearer ")?c[d]="Bearer [REDACTED]":"object"==typeof e&&null!==e?c[d]=a(e):c[d]=e;return c}(a),c=JSON.stringify(b);if(c.length<=8192)return c;try{return JSON.stringify({_truncated:!0,_originalSize:c.length,_preview:c.slice(0,8192)+"..."})}catch{return JSON.stringify({_truncated:!0})}},f={id:(E++,`${Date.now()}-${E}`),timestamp:new Date().toISOString(),method:a.method||"POST",path:a.path||"/v1/chat/completions",status:a.status||0,model:a.model||"-",provider:a.provider||"-",account:b,connectionId:a.connectionId||null,duration:a.duration||0,tokensIn:a.tokens?.prompt_tokens||0,tokensOut:a.tokens?.completion_tokens||0,sourceFormat:a.sourceFormat||null,targetFormat:a.targetFormat||null,apiKeyId:a.apiKeyId||null,apiKeyName:a.apiKeyName||null,comboName:a.comboName||null,requestBody:d(a.requestBody),responseBody:d(a.responseBody),error:a.error||null},i=(0,h.sm)();i.prepare(`
20
+ `).run(a.provider||null,a.model||null,a.connectionId||null,a.apiKeyId||null,a.apiKeyName||null,a.tokens?.input??a.tokens?.prompt_tokens??0,a.tokens?.output??a.tokens?.completion_tokens??0,a.tokens?.cacheRead??a.tokens?.cached_tokens??0,a.tokens?.cacheCreation??a.tokens?.cache_creation_input_tokens??0,a.tokens?.reasoning??a.tokens?.reasoning_tokens??0,a.status||null,c)}catch(a){console.error("Failed to save usage stats:",a)}}async function y({model:a,provider:b,connectionId:d,tokens:e,status:f}){if(j)try{let h=function(a=new Date){let b=a=>String(a).padStart(2,"0"),c=b(a.getDate()),d=b(a.getMonth()+1),e=a.getFullYear(),f=b(a.getHours()),g=b(a.getMinutes()),h=b(a.getSeconds());return`${c}-${d}-${e} ${f}:${g}:${h}`}(),i=b?.toUpperCase()||"-",j=d?d.slice(0,8):"-";try{let{getProviderConnections:a}=await Promise.all([c.e(3596),c.e(2901),c.e(4755)]).then(c.bind(c,22901)),b=(await a()).find(a=>a.id===d);b&&(j=b.name||b.email||j)}catch{}let k=e?.input!==void 0?e.input:e?.prompt_tokens!==void 0?e.prompt_tokens:"-",m=e?.output!==void 0?e.output:e?.completion_tokens!==void 0?e.completion_tokens:"-",n=`${h} | ${a||"-"} | ${i} | ${j} | ${k} | ${m} | ${f}
21
+ `;g().appendFileSync(l,n);let o=g().readFileSync(l,"utf-8").trim().split("\n");o.length>200&&g().writeFileSync(l,o.slice(-200).join("\n")+"\n")}catch(a){console.error("Failed to append to log.txt:",a.message)}}async function z(a=200){if(!j||!g()||"function"!=typeof g().existsSync||!l||!g().existsSync(l))return[];try{return g().readFileSync(l,"utf-8").trim().split("\n").slice(-a).reverse()}catch(a){return console.error("[usageDb] Failed to read log.txt:",a.message),[]}}async function A(a,b,d){if(!d||!a||!b)return 0;try{let{getPricingForModel:e}=await Promise.all([c.e(3596),c.e(2901),c.e(4755)]).then(c.bind(c,22901)),f=await e(a,b);if(!f){let c=function(a){if(!a||!a.includes("/"))return a;let b=a.split("/");return b[b.length-1]}(b);c!==b&&(f=await e(a,c))}if(!f)return 0;let g=0,h=d.input??d.prompt_tokens??d.input_tokens??0,i=d.cacheRead??d.cached_tokens??d.cache_read_input_tokens??0,j=Math.max(0,h-i);g+=j*(f.input/1e6),i>0&&(g+=i*((f.cached||f.input)/1e6));let k=d.output??d.completion_tokens??d.output_tokens??0;g+=k*(f.output/1e6);let l=d.reasoning??d.reasoning_tokens??0;l>0&&(g+=l*((f.reasoning||f.output)/1e6));let m=d.cacheCreation??d.cache_creation_input_tokens??0;return m>0&&(g+=m*((f.cache_creation||f.input)/1e6)),g}catch(a){return console.error("Error calculating cost:",a),0}}async function B(){let a=(0,h.sm)().prepare("SELECT * FROM usage_history ORDER BY timestamp ASC").all(),{getProviderConnections:b}=await Promise.all([c.e(3596),c.e(2901),c.e(4755)]).then(c.bind(c,22901)),d=[];try{d=await b()}catch{}let e={};for(let a of d)e[a.id]=a.name||a.email||a.id;let f={totalRequests:a.length,totalPromptTokens:0,totalCompletionTokens:0,totalCost:0,byProvider:{},byModel:{},byAccount:{},byApiKey:{},last10Minutes:[],pending:u,activeRequests:[]};for(let[a,b]of Object.entries(u.byAccount))for(let[c,d]of Object.entries(b))if(d>0){let b=e[a]||`Account ${a.slice(0,8)}...`,g=c.match(/^(.*) \((.*)\)$/);f.activeRequests.push({model:g?g[1]:c,provider:g?g[2]:"unknown",account:b,count:d})}let g=new Date,i=new Date(6e4*Math.floor(g.getTime()/6e4)),j={};for(let a=0;a<10;a++){let b=new Date(i.getTime()-(9-a)*6e4).getTime();j[b]={requests:0,promptTokens:0,completionTokens:0,cost:0},f.last10Minutes.push(j[b])}let k=new Date(i.getTime()-54e4);for(let b of a){let a=b.tokens_input||0,c=b.tokens_output||0,d=new Date(b.timestamp),h={input:b.tokens_input,output:b.tokens_output,cacheRead:b.tokens_cache_read,cacheCreation:b.tokens_cache_creation,reasoning:b.tokens_reasoning},i=await A(b.provider,b.model,h);if(f.totalPromptTokens+=a,f.totalCompletionTokens+=c,f.totalCost+=i,d>=k&&d<=g){let b=6e4*Math.floor(d.getTime()/6e4);j[b]&&(j[b].requests++,j[b].promptTokens+=a,j[b].completionTokens+=c,j[b].cost+=i)}f.byProvider[b.provider]||(f.byProvider[b.provider]={requests:0,promptTokens:0,completionTokens:0,cost:0}),f.byProvider[b.provider].requests++,f.byProvider[b.provider].promptTokens+=a,f.byProvider[b.provider].completionTokens+=c,f.byProvider[b.provider].cost+=i;let l=b.provider?`${b.model} (${b.provider})`:b.model;if(f.byModel[l]||(f.byModel[l]={requests:0,promptTokens:0,completionTokens:0,cost:0,rawModel:b.model,provider:b.provider,lastUsed:b.timestamp}),f.byModel[l].requests++,f.byModel[l].promptTokens+=a,f.byModel[l].completionTokens+=c,f.byModel[l].cost+=i,new Date(b.timestamp)>new Date(f.byModel[l].lastUsed)&&(f.byModel[l].lastUsed=b.timestamp),b.connection_id){let d=e[b.connection_id]||`Account ${b.connection_id.slice(0,8)}...`,g=`${b.model} (${b.provider} - ${d})`;f.byAccount[g]||(f.byAccount[g]={requests:0,promptTokens:0,completionTokens:0,cost:0,rawModel:b.model,provider:b.provider,connectionId:b.connection_id,accountName:d,lastUsed:b.timestamp}),f.byAccount[g].requests++,f.byAccount[g].promptTokens+=a,f.byAccount[g].completionTokens+=c,f.byAccount[g].cost+=i,new Date(b.timestamp)>new Date(f.byAccount[g].lastUsed)&&(f.byAccount[g].lastUsed=b.timestamp)}if(b.api_key_id||b.api_key_name){let d=b.api_key_name||b.api_key_id||"unknown",e=b.api_key_id||null,g=e?`${d} (${e})`:d;f.byApiKey[g]||(f.byApiKey[g]={requests:0,promptTokens:0,completionTokens:0,cost:0,apiKeyId:e,apiKeyName:d,lastUsed:b.timestamp}),f.byApiKey[g].requests++,f.byApiKey[g].promptTokens+=a,f.byApiKey[g].completionTokens+=c,f.byApiKey[g].cost+=i,new Date(b.timestamp)>new Date(f.byApiKey[g].lastUsed)&&(f.byApiKey[g].lastUsed=b.timestamp)}}return f}let C=parseInt(process.env.LOG_RETENTION_DAYS||"7",10),D=new Set(["api_key","apiKey","api-key","authorization","Authorization","x-api-key","X-Api-Key","access_token","accessToken","refresh_token","refreshToken","password","secret","token"]),E=0;async function F(a){if(j)try{let b=a.connectionId?a.connectionId.slice(0,8):"-";try{let{getProviderConnections:d}=await Promise.all([c.e(3596),c.e(2901),c.e(4755)]).then(c.bind(c,22901)),e=(await d()).find(b=>b.id===a.connectionId);e&&(b=e.name||e.email||b)}catch{}let d=a=>{if(!a)return null;let b=function a(b){if(!b||"object"!=typeof b)return b;if(Array.isArray(b))return b.map(a);let c={};for(let[d,e]of Object.entries(b))D.has(d)?c[d]="[REDACTED]":"string"==typeof e&&e.startsWith("Bearer ")?c[d]="Bearer [REDACTED]":"object"==typeof e&&null!==e?c[d]=a(e):c[d]=e;return c}(a),c=JSON.stringify(b);if(c.length<=8192)return c;try{return JSON.stringify({_truncated:!0,_originalSize:c.length,_preview:c.slice(0,8192)+"..."})}catch{return JSON.stringify({_truncated:!0})}},f={id:(E++,`${Date.now()}-${E}`),timestamp:new Date().toISOString(),method:a.method||"POST",path:a.path||"/v1/chat/completions",status:a.status||0,model:a.model||"-",provider:a.provider||"-",account:b,connectionId:a.connectionId||null,duration:a.duration||0,tokensIn:a.tokens?.prompt_tokens||0,tokensOut:a.tokens?.completion_tokens||0,sourceFormat:a.sourceFormat||null,targetFormat:a.targetFormat||null,apiKeyId:a.apiKeyId||null,apiKeyName:a.apiKeyName||null,comboName:a.comboName||null,requestBody:d(a.requestBody),responseBody:d(a.responseBody),error:a.error||null},i=(0,h.sm)();i.prepare(`
22
22
  INSERT INTO call_logs (id, timestamp, method, path, status, model, provider,
23
23
  account, connection_id, duration, tokens_in, tokens_out, source_format, target_format,
24
24
  api_key_id, api_key_name, combo_name, request_body, response_body, error)
@@ -1,3 +1,3 @@
1
- "use strict";exports.id=7669,exports.ids=[239,2620,7669],exports.modules={12620:(a,b,c)=>{c.d(b,{ez:()=>i,getAllCircuitBreakerStatuses:()=>l,getCircuitBreaker:()=>k,resetAllCircuitBreakers:()=>m});var d=c(97917);let e="CLOSED",f="OPEN",g="HALF_OPEN";class h{constructor(a,b={}){this.name=a,this.failureThreshold=b.failureThreshold??5,this.resetTimeout=b.resetTimeout??3e4,this.halfOpenRequests=b.halfOpenRequests??1,this.onStateChange=b.onStateChange||null,this.isFailure=b.isFailure||(()=>!0),this.state=e,this.failureCount=0,this.successCount=0,this.lastFailureTime=null,this.halfOpenAllowed=0,this._restoreFromDb()}_restoreFromDb(){try{let a=(0,d.vX)(this.name);a&&(this.state=a.state,this.failureCount=a.failureCount,this.lastFailureTime=a.lastFailureTime,this.state===g&&(this.halfOpenAllowed=this.halfOpenRequests))}catch{}}_persistToDb(){try{(0,d.QM)(this.name,{state:this.state,failureCount:this.failureCount,lastFailureTime:this.lastFailureTime,options:{failureThreshold:this.failureThreshold,resetTimeout:this.resetTimeout,halfOpenRequests:this.halfOpenRequests}})}catch{}}async execute(a){if(this.state===f)if(this._shouldAttemptReset())this._transition(g);else throw new i(`Circuit breaker "${this.name}" is OPEN. Try again later.`,this.name,this._timeUntilReset());if(this.state===g&&this.halfOpenAllowed<=0)throw new i(`Circuit breaker "${this.name}" is HALF_OPEN, no more probe requests allowed.`,this.name,this._timeUntilReset());this.state===g&&this.halfOpenAllowed--;try{let b=await a();return this._onSuccess(),b}catch(a){throw this.isFailure(a)&&this._onFailure(),a}}canExecute(){return this.state===e||(this.state===f?this._shouldAttemptReset():this.state===g&&this.halfOpenAllowed>0)}getStatus(){return{name:this.name,state:this.state,failureCount:this.failureCount,lastFailureTime:this.lastFailureTime}}reset(){this._transition(e),this.failureCount=0,this.successCount=0,this.lastFailureTime=null,this._persistToDb()}_onSuccess(){this.state===g&&(this.successCount++,this._transition(e),this.failureCount=0),this.failureCount=0,this._persistToDb()}_onFailure(){this.failureCount++,this.lastFailureTime=Date.now(),this.state===g?this._transition(f):this.failureCount>=this.failureThreshold&&this._transition(f),this._persistToDb()}_shouldAttemptReset(){return!this.lastFailureTime||Date.now()-this.lastFailureTime>=this.resetTimeout}_timeUntilReset(){return this.lastFailureTime?Math.max(0,this.resetTimeout-(Date.now()-this.lastFailureTime)):0}_transition(a){let b=this.state;this.state=a,a===g&&(this.halfOpenAllowed=this.halfOpenRequests),this.onStateChange&&b!==a&&this.onStateChange(this.name,b,a)}}class i extends Error{constructor(a,b,c){super(a),this.name="CircuitBreakerOpenError",this.circuitName=b,this.retryAfterMs=c}}let j=new Map;function k(a,b){return j.has(a)||j.set(a,new h(a,b)),j.get(a)}function l(){try{for(let a of(0,d.xd)())j.has(a.name)||k(a.name)}catch{}return Array.from(j.values()).map(a=>a.getStatus())}function m(){for(let a of j.values())a.reset();j.clear();try{(0,d.G7)()}catch{}}},17669:(a,b,c)=>{c.d(b,{Pr:()=>w,Vg:()=>function a(b,c,d=new Set,e=0){if(e>3)throw Error(`Max combo nesting depth (3) exceeded at "${b}"`);if(d.has(b))throw Error(`Circular combo reference detected: ${b}`);d.add(b);let f=Array.isArray(c)?c:c?.combos||[],g=f.find(a=>a.name===b);if(g&&g.models)for(let b of g.models){let c=r(b).model;f.find(a=>a.name===c)&&a(c,f,new Set(d),e+1)}}});var d=c(74163),e=c(71861),f=c(27899);let g={strategy:"priority",maxRetries:1,retryDelayMs:2e3,timeoutMs:12e4,concurrencyPerModel:3,queueTimeoutMs:3e4,healthCheckEnabled:!0,healthCheckTimeoutMs:3e3,maxComboDepth:3,trackMetrics:!0};function h(a,b,c){let d=b?.comboDefaults||{},e=c&&b?.providerOverrides?.[c]||{},f=a?.config||{},h=a=>Object.fromEntries(Object.entries(a).filter(([,a])=>null!=a));return{...g,...h(d),...h(e),...h(f)}}let i=new Map;function j(a,b=3){i.has(a)||i.set(a,{running:0,max:b,queue:[],rateLimitedUntil:null});let c=i.get(a);return c.max=b,c}function k(a){return!!a.rateLimitedUntil&&(!(Date.now()>=a.rateLimitedUntil)||(a.rateLimitedUntil=null,!1))}function l(a){let b=i.get(a);if(b)for(;b.queue.length>0&&b.running<b.max&&!k(b);){let c=b.queue.shift();clearTimeout(c.timer),b.running++,c.resolve(m(a))}}function m(a){let b=!1;return()=>{if(b)return;b=!0;let c=i.get(a);c&&c.running>0&&(c.running--,l(a))}}var n=c(12620),o=c(99939);let p=[429,502,503,504],q=new Map;function r(a){return"string"==typeof a?{model:a,weight:0}:{model:a.model,weight:a.weight||0}}function s(a,b,c=new Set,d=0){if(d>3)return a.models.map(a=>r(a).model);if(c.has(a.name))return[];c.add(a.name);let e=Array.isArray(b)?b:b?.combos||[],f=[];for(let b of a.models||[]){let a=r(b).model,g=e.find(b=>b.name===a);if(g){let a=s(g,e,new Set(c),d+1);f.push(...a)}else f.push(a)}return f}function t(a){let b=a.map(a=>r(a)),c=b.reduce((a,b)=>a+b.weight,0);if(c<=0)return b[Math.floor(Math.random()*b.length)].model;let d=Math.random()*c;for(let a of b)if((d-=a.weight)<=0)return a.model;return b[b.length-1].model}function u(a,b){let c=a.map(a=>r(a));return[c.find(a=>a.model===b),...c.filter(a=>a.model!==b).sort((a,b)=>b.weight-a.weight)].filter(Boolean).map(a=>a.model)}async function v(a){try{let{getPricingForModel:b}=await Promise.resolve().then(c.bind(c,40287)),d=await Promise.all(a.map(async a=>{let c=(0,o.Xh)(a),d=c.provider||c.providerAlias||"unknown",e=c.model||a;try{let c=await b(d,e);return{modelStr:a,cost:c?.input??1/0}}catch{return{modelStr:a,cost:1/0}}}));return d.sort((a,b)=>a.cost-b.cost),d.map(a=>a.modelStr)}catch{return a}}async function w({body:a,combo:b,handleSingleModel:c,isModelAvailable:i,log:j,settings:k,allCombos:l}){let m,q=b.strategy||"priority",w=b.models||[];if("round-robin"===q)return x({body:a,combo:b,handleSingleModel:c,isModelAvailable:i,log:j,settings:k,allCombos:l});let y=k?h(b,k):{...g,...b.config||{}},z=y.maxRetries??1,A=y.retryDelayMs??2e3;if(l){let a=s(b,l);if("weighted"===q){let a=t(w);m=(m=u(w,a)).flatMap(a=>{let b=(Array.isArray(l)?l:l?.combos||[]).find(b=>b.name===a);return b?s(b,l):[a]}),j.info("COMBO",`Weighted selection with nested resolution: ${m.length} total models`)}else m=a,j.info("COMBO",`${q} with nested resolution: ${m.length} total models`)}else if("weighted"===q){let a=t(w);m=u(w,a),j.info("COMBO",`Weighted selection: ${a} (from ${w.length} models)`)}else m=w.map(a=>r(a).model);"random"===q?(m=function(a){for(let b=a.length-1;b>0;b--){let c=Math.floor(Math.random()*(b+1));[a[b],a[c]]=[a[c],a[b]]}return a}([...m]),j.info("COMBO",`Random shuffle: ${m.length} models`)):"least-used"===q?(m=function(a,b){let c=(0,f.A5)(b);if(!c||!c.byModel)return a;let d=a.map(a=>({modelStr:a,requests:c.byModel[a]?.requests??0}));return d.sort((a,b)=>a.requests-b.requests),d.map(a=>a.modelStr)}(m,b.name),j.info("COMBO",`Least-used ordering: ${m[0]} has fewest requests`)):"cost-optimized"===q&&(m=await v(m),j.info("COMBO",`Cost-optimized ordering: cheapest first (${m[0]})`));let B=null,C=null,D=null,E=Date.now(),F=0;for(let e=0;e<m.length;e++){let g=m[e],h=(0,o.Xh)(g),k=h.provider||h.providerAlias||"unknown",l=(0,d.T_)(k),r=(0,n.getCircuitBreaker)(`combo:${k}`,{failureThreshold:l.circuitBreakerThreshold,resetTimeout:l.circuitBreakerReset});if(!r.canExecute()){j.info("COMBO",`Skipping ${g}: circuit breaker OPEN for ${k}`),e>0&&F++;continue}if(i&&!await i(g)){j.info("COMBO",`Skipping ${g} (all accounts in cooldown)`),e>0&&F++;continue}for(let h=0;h<=z;h++){h>0&&(j.info("COMBO",`Retrying ${g} in ${A}ms (attempt ${h+1}/${z+1})`),await new Promise(a=>setTimeout(a,A))),j.info("COMBO",`Trying model ${e+1}/${m.length}: ${g}${h>0?` (retry ${h})`:""}`);let i=await c(a,g);if(i.ok){let a=Date.now()-E;return j.info("COMBO",`Model ${g} succeeded (${a}ms, ${F} fallbacks)`),(0,f.JF)(b.name,g,{success:!0,latencyMs:a,fallbackCount:F,strategy:q}),i}let l=i.statusText||"",n=null;try{let a=i.clone();try{let b=await a.json();l=b?.error?.message||b?.error||b?.message||l,n=b?.retryAfter||null}catch{try{let a=await i.text();a&&(l=a.substring(0,500))}catch{}}}catch{}if(n&&(!C||new Date(n)<new Date(C))&&(C=n),"string"!=typeof l)try{l=JSON.stringify(l)}catch{l=String(l)}let{shouldFallback:o,cooldownMs:s}=(0,d.hk)(i.status,l,0,null,k);if(p.includes(i.status)&&r._onFailure(),!o)return j.warn("COMBO",`Model ${g} failed (no fallback)`,{status:i.status}),i;let t=[408,429,500,502,503,504].includes(i.status);if(!(h<z)||!t){B=l||String(i.status),D||(D=i.status),e>0&&F++,j.warn("COMBO",`Model ${g} failed, trying next`,{status:i.status});break}}}let G=m.every(a=>{let b=(0,o.Xh)(a).provider||(0,o.Xh)(a).providerAlias||"unknown";return!(0,n.getCircuitBreaker)(`combo:${b}`).canExecute()}),H=Date.now()-E;if((0,f.JF)(b.name,null,{success:!1,latencyMs:H,fallbackCount:F,strategy:q}),G)return j.warn("COMBO","All models have circuit breaker OPEN — aborting"),(0,e.wO)(503,"All providers temporarily unavailable (circuit breakers open)");let I=D||406,J=B||"All combo models unavailable";if(C){let a=(0,d.Qo)(C);return j.warn("COMBO",`All models failed | ${J} (${a})`),(0,e.wO)(I,J,C,a)}return j.warn("COMBO",`All models failed | ${J}`),new Response(JSON.stringify({error:{message:J}}),{status:I,headers:{"Content-Type":"application/json"}})}async function x({body:a,combo:b,handleSingleModel:c,isModelAvailable:i,log:t,settings:u,allCombos:v}){let w,x=b.models||[],y=u?h(b,u):{...g,...b.config||{}},z=y.concurrencyPerModel??3,A=y.queueTimeoutMs??3e4,B=y.maxRetries??1,C=y.retryDelayMs??2e3,D=(w=v?s(b,v):x.map(a=>r(a).model)).length;if(0===D)return(0,e.wO)(406,"Round-robin combo has no models");let E=q.get(b.name)||0;q.set(b.name,E+1);let F=E%D,G=Date.now(),H=null,I=null,J=null,K=0;for(let e=0;e<D;e++){let g,h=w[(F+e)%D],q=(0,o.Xh)(h),r=q.provider||q.providerAlias||"unknown",s=(0,d.T_)(r),u=(0,n.getCircuitBreaker)(`combo:${r}`,{failureThreshold:s.circuitBreakerThreshold,resetTimeout:s.circuitBreakerReset});if(!u.canExecute()){t.info("COMBO-RR",`Skipping ${h}: circuit breaker OPEN for ${r}`),e>0&&K++;continue}if(i&&!await i(h)){t.info("COMBO-RR",`Skipping ${h} (all accounts in cooldown)`),e>0&&K++;continue}try{g=await function(a,{maxConcurrency:b=3,timeoutMs:c=3e4}={}){let d=j(a,b);return d.running<d.max&&!k(d)?(d.running++,Promise.resolve(m(a))):new Promise((b,e)=>{let f=setTimeout(()=>{let b=d.queue.findIndex(a=>a.timer===f);-1!==b&&d.queue.splice(b,1);let g=Error(`Semaphore timeout after ${c}ms for ${a}`);g.code="SEMAPHORE_TIMEOUT",e(g)},c);d.queue.push({resolve:b,reject:e,timer:f})})}(h,{maxConcurrency:z,timeoutMs:A})}catch(a){if("SEMAPHORE_TIMEOUT"===a.code){t.warn("COMBO-RR",`Semaphore timeout for ${h}, trying next model`),e>0&&K++;continue}throw a}try{for(let g=0;g<=B;g++){g>0&&(t.info("COMBO-RR",`Retrying ${h} in ${C}ms (attempt ${g+1}/${B+1})`),await new Promise(a=>setTimeout(a,C))),t.info("COMBO-RR",`[RR #${E}] → ${h}${e>0?` (fallback +${e})`:""}${g>0?` (retry ${g})`:""}`);let i=await c(a,h);if(i.ok){let a=Date.now()-G;return t.info("COMBO-RR",`${h} succeeded (${a}ms, ${K} fallbacks)`),(0,f.JF)(b.name,h,{success:!0,latencyMs:a,fallbackCount:K,strategy:"round-robin"}),i}let k=i.statusText||"",m=null;try{let a=i.clone();try{let b=await a.json();k=b?.error?.message||b?.error||b?.message||k,m=b?.retryAfter||null}catch{try{let a=await i.text();a&&(k=a.substring(0,500))}catch{}}}catch{}if(m&&(!J||new Date(m)<new Date(J))&&(J=m),"string"!=typeof k)try{k=JSON.stringify(k)}catch{k=String(k)}let{shouldFallback:n,cooldownMs:o}=(0,d.hk)(i.status,k,0,null,r);if(p.includes(i.status)&&o>0&&(!function(a,b){let c=j(a);c.rateLimitedUntil=Date.now()+b,setTimeout(()=>{c.rateLimitedUntil&&Date.now()>=c.rateLimitedUntil&&(c.rateLimitedUntil=null,l(a))},b+50)}(h,o),u._onFailure(),t.warn("COMBO-RR",`${h} error ${i.status}, cooldown ${o}ms (breaker: ${u.getStatus().failureCount}/${s.circuitBreakerThreshold})`)),!n)return t.warn("COMBO-RR",`${h} failed (no fallback)`,{status:i.status}),i;let q=[408,429,500,502,503,504].includes(i.status);if(!(g<B)||!q){H=k||String(i.status),I||(I=i.status),e>0&&K++,t.warn("COMBO-RR",`${h} failed, trying next model`,{status:i.status});break}}}finally{g()}}let L=Date.now()-G;if((0,f.JF)(b.name,null,{success:!1,latencyMs:L,fallbackCount:K,strategy:"round-robin"}),w.every(a=>{let b=(0,o.Xh)(a).provider||(0,o.Xh)(a).providerAlias||"unknown";return!(0,n.getCircuitBreaker)(`combo:${b}`).canExecute()}))return t.warn("COMBO-RR","All models have circuit breaker OPEN — aborting"),(0,e.wO)(503,"All providers temporarily unavailable (circuit breakers open)");let M=I||406,N=H||"All round-robin combo models unavailable";if(J){let a=(0,d.Qo)(J);return t.warn("COMBO-RR",`All models failed | ${N} (${a})`),(0,e.wO)(M,N,J,a)}return t.warn("COMBO-RR",`All models failed | ${N}`),new Response(JSON.stringify({error:{message:N}}),{status:M,headers:{"Content-Type":"application/json"}})}},27899:(a,b,c)=>{c.d(b,{A5:()=>f,BS:()=>g,Go:()=>i,JF:()=>e,NZ:()=>h});let d=new Map;function e(a,b,{success:c,latencyMs:e,fallbackCount:f=0,strategy:g="priority"}){d.has(a)||d.set(a,{totalRequests:0,totalSuccesses:0,totalFailures:0,totalFallbacks:0,totalLatencyMs:0,strategy:g,lastUsedAt:null,byModel:{}});let h=d.get(a);if(h.totalRequests++,h.totalLatencyMs+=e,h.totalFallbacks+=f,h.lastUsedAt=new Date().toISOString(),h.strategy=g,c?h.totalSuccesses++:h.totalFailures++,b){h.byModel[b]||(h.byModel[b]={requests:0,successes:0,failures:0,totalLatencyMs:0,lastStatus:null,lastUsedAt:null});let a=h.byModel[b];a.requests++,a.totalLatencyMs+=e,a.lastUsedAt=new Date().toISOString(),c?(a.successes++,a.lastStatus="ok"):(a.failures++,a.lastStatus="error")}}function f(a){let b=d.get(a);return b?{...b,avgLatencyMs:b.totalRequests>0?Math.round(b.totalLatencyMs/b.totalRequests):0,successRate:b.totalRequests>0?Math.round(b.totalSuccesses/b.totalRequests*100):0,fallbackRate:b.totalRequests>0?Math.round(b.totalFallbacks/b.totalRequests*100):0,byModel:Object.fromEntries(Object.entries(b.byModel).map(([a,b])=>[a,{...b,avgLatencyMs:b.requests>0?Math.round(b.totalLatencyMs/b.requests):0,successRate:b.requests>0?Math.round(b.successes/b.requests*100):0}]))}:null}function g(){let a={};for(let[b]of d)a[b]=f(b);return a}function h(a){d.delete(a)}function i(){d.clear()}},97917:(a,b,c)=>{c.d(b,{G7:()=>q,M4:()=>m,QM:()=>n,_s:()=>l,io:()=>i,mE:()=>f,qA:()=>k,tv:()=>j,vX:()=>o,xV:()=>e,xd:()=>p,z$:()=>g,zd:()=>h});var d=c(42910);function e(a,b){(0,d.sm)().prepare("INSERT OR REPLACE INTO domain_fallback_chains (model, chain) VALUES (?, ?)").run(a,JSON.stringify(b))}function f(){let a=(0,d.sm)().prepare("SELECT model, chain FROM domain_fallback_chains").all(),b={};for(let c of a)b[c.model]=JSON.parse(c.chain);return b}function g(a){return(0,d.sm)().prepare("DELETE FROM domain_fallback_chains WHERE model = ?").run(a).changes>0}function h(a,b){(0,d.sm)().prepare(`INSERT OR REPLACE INTO domain_budgets (api_key_id, daily_limit_usd, monthly_limit_usd, warning_threshold)
1
+ "use strict";exports.id=7669,exports.ids=[239,2620,7669],exports.modules={12620:(a,b,c)=>{c.d(b,{ez:()=>i,getAllCircuitBreakerStatuses:()=>l,getCircuitBreaker:()=>k,resetAllCircuitBreakers:()=>m});var d=c(97917);let e="CLOSED",f="OPEN",g="HALF_OPEN";class h{constructor(a,b={}){this.name=a,this.failureThreshold=b.failureThreshold??5,this.resetTimeout=b.resetTimeout??3e4,this.halfOpenRequests=b.halfOpenRequests??1,this.onStateChange=b.onStateChange||null,this.isFailure=b.isFailure||(()=>!0),this.state=e,this.failureCount=0,this.successCount=0,this.lastFailureTime=null,this.halfOpenAllowed=0,this._restoreFromDb()}_restoreFromDb(){try{let a=(0,d.vX)(this.name);a&&(this.state=a.state,this.failureCount=a.failureCount,this.lastFailureTime=a.lastFailureTime,this.state===g&&(this.halfOpenAllowed=this.halfOpenRequests))}catch{}}_persistToDb(){try{(0,d.QM)(this.name,{state:this.state,failureCount:this.failureCount,lastFailureTime:this.lastFailureTime,options:{failureThreshold:this.failureThreshold,resetTimeout:this.resetTimeout,halfOpenRequests:this.halfOpenRequests}})}catch{}}async execute(a){if(this.state===f)if(this._shouldAttemptReset())this._transition(g);else throw new i(`Circuit breaker "${this.name}" is OPEN. Try again later.`,this.name,this._timeUntilReset());if(this.state===g&&this.halfOpenAllowed<=0)throw new i(`Circuit breaker "${this.name}" is HALF_OPEN, no more probe requests allowed.`,this.name,this._timeUntilReset());this.state===g&&this.halfOpenAllowed--;try{let b=await a();return this._onSuccess(),b}catch(a){throw this.isFailure(a)&&this._onFailure(),a}}canExecute(){return this.state===e||(this.state===f?this._shouldAttemptReset():this.state===g&&this.halfOpenAllowed>0)}getStatus(){return{name:this.name,state:this.state,failureCount:this.failureCount,lastFailureTime:this.lastFailureTime}}reset(){this._transition(e),this.failureCount=0,this.successCount=0,this.lastFailureTime=null,this._persistToDb()}_onSuccess(){this.state===g&&(this.successCount++,this._transition(e),this.failureCount=0),this.failureCount=0,this._persistToDb()}_onFailure(){this.failureCount++,this.lastFailureTime=Date.now(),this.state===g?this._transition(f):this.failureCount>=this.failureThreshold&&this._transition(f),this._persistToDb()}_shouldAttemptReset(){return!this.lastFailureTime||Date.now()-this.lastFailureTime>=this.resetTimeout}_timeUntilReset(){return this.lastFailureTime?Math.max(0,this.resetTimeout-(Date.now()-this.lastFailureTime)):0}_transition(a){let b=this.state;this.state=a,a===g&&(this.halfOpenAllowed=this.halfOpenRequests),this.onStateChange&&b!==a&&this.onStateChange(this.name,b,a)}}class i extends Error{constructor(a,b,c){super(a),this.name="CircuitBreakerOpenError",this.circuitName=b,this.retryAfterMs=c}}let j=new Map;function k(a,b){return j.has(a)||j.set(a,new h(a,b)),j.get(a)}function l(){try{for(let a of(0,d.xd)())j.has(a.name)||k(a.name)}catch{}return Array.from(j.values()).map(a=>a.getStatus())}function m(){for(let a of j.values())a.reset();j.clear();try{(0,d.G7)()}catch{}}},17669:(a,b,c)=>{c.d(b,{Pr:()=>w,Vg:()=>function a(b,c,d=new Set,e=0){if(e>3)throw Error(`Max combo nesting depth (3) exceeded at "${b}"`);if(d.has(b))throw Error(`Circular combo reference detected: ${b}`);d.add(b);let f=Array.isArray(c)?c:c?.combos||[],g=f.find(a=>a.name===b);if(g&&g.models)for(let b of g.models){let c=r(b).model;f.find(a=>a.name===c)&&a(c,f,new Set(d),e+1)}}});var d=c(74163),e=c(71861),f=c(27899);let g={strategy:"priority",maxRetries:1,retryDelayMs:2e3,timeoutMs:12e4,concurrencyPerModel:3,queueTimeoutMs:3e4,healthCheckEnabled:!0,healthCheckTimeoutMs:3e3,maxComboDepth:3,trackMetrics:!0};function h(a,b,c){let d=b?.comboDefaults||{},e=c&&b?.providerOverrides?.[c]||{},f=a?.config||{},h=a=>Object.fromEntries(Object.entries(a).filter(([,a])=>null!=a));return{...g,...h(d),...h(e),...h(f)}}let i=new Map;function j(a,b=3){i.has(a)||i.set(a,{running:0,max:b,queue:[],rateLimitedUntil:null});let c=i.get(a);return c.max=b,c}function k(a){return!!a.rateLimitedUntil&&(!(Date.now()>=a.rateLimitedUntil)||(a.rateLimitedUntil=null,!1))}function l(a){let b=i.get(a);if(b)for(;b.queue.length>0&&b.running<b.max&&!k(b);){let c=b.queue.shift();clearTimeout(c.timer),b.running++,c.resolve(m(a))}}function m(a){let b=!1;return()=>{if(b)return;b=!0;let c=i.get(a);c&&c.running>0&&(c.running--,l(a))}}var n=c(12620),o=c(99939);let p=[429,502,503,504],q=new Map;function r(a){return"string"==typeof a?{model:a,weight:0}:{model:a.model,weight:a.weight||0}}function s(a,b,c=new Set,d=0){if(d>3)return a.models.map(a=>r(a).model);if(c.has(a.name))return[];c.add(a.name);let e=Array.isArray(b)?b:b?.combos||[],f=[];for(let b of a.models||[]){let a=r(b).model,g=e.find(b=>b.name===a);if(g){let a=s(g,e,new Set(c),d+1);f.push(...a)}else f.push(a)}return f}function t(a){let b=a.map(a=>r(a)),c=b.reduce((a,b)=>a+b.weight,0);if(c<=0)return b[Math.floor(Math.random()*b.length)].model;let d=Math.random()*c;for(let a of b)if((d-=a.weight)<=0)return a.model;return b[b.length-1].model}function u(a,b){let c=a.map(a=>r(a));return[c.find(a=>a.model===b),...c.filter(a=>a.model!==b).sort((a,b)=>b.weight-a.weight)].filter(Boolean).map(a=>a.model)}async function v(a){try{let{getPricingForModel:b}=await Promise.resolve().then(c.bind(c,22901)),d=await Promise.all(a.map(async a=>{let c=(0,o.Xh)(a),d=c.provider||c.providerAlias||"unknown",e=c.model||a;try{let c=await b(d,e);return{modelStr:a,cost:c?.input??1/0}}catch{return{modelStr:a,cost:1/0}}}));return d.sort((a,b)=>a.cost-b.cost),d.map(a=>a.modelStr)}catch{return a}}async function w({body:a,combo:b,handleSingleModel:c,isModelAvailable:i,log:j,settings:k,allCombos:l}){let m,q=b.strategy||"priority",w=b.models||[];if("round-robin"===q)return x({body:a,combo:b,handleSingleModel:c,isModelAvailable:i,log:j,settings:k,allCombos:l});let y=k?h(b,k):{...g,...b.config||{}},z=y.maxRetries??1,A=y.retryDelayMs??2e3;if(l){let a=s(b,l);if("weighted"===q){let a=t(w);m=(m=u(w,a)).flatMap(a=>{let b=(Array.isArray(l)?l:l?.combos||[]).find(b=>b.name===a);return b?s(b,l):[a]}),j.info("COMBO",`Weighted selection with nested resolution: ${m.length} total models`)}else m=a,j.info("COMBO",`${q} with nested resolution: ${m.length} total models`)}else if("weighted"===q){let a=t(w);m=u(w,a),j.info("COMBO",`Weighted selection: ${a} (from ${w.length} models)`)}else m=w.map(a=>r(a).model);"random"===q?(m=function(a){for(let b=a.length-1;b>0;b--){let c=Math.floor(Math.random()*(b+1));[a[b],a[c]]=[a[c],a[b]]}return a}([...m]),j.info("COMBO",`Random shuffle: ${m.length} models`)):"least-used"===q?(m=function(a,b){let c=(0,f.A5)(b);if(!c||!c.byModel)return a;let d=a.map(a=>({modelStr:a,requests:c.byModel[a]?.requests??0}));return d.sort((a,b)=>a.requests-b.requests),d.map(a=>a.modelStr)}(m,b.name),j.info("COMBO",`Least-used ordering: ${m[0]} has fewest requests`)):"cost-optimized"===q&&(m=await v(m),j.info("COMBO",`Cost-optimized ordering: cheapest first (${m[0]})`));let B=null,C=null,D=null,E=Date.now(),F=0;for(let e=0;e<m.length;e++){let g=m[e],h=(0,o.Xh)(g),k=h.provider||h.providerAlias||"unknown",l=(0,d.T_)(k),r=(0,n.getCircuitBreaker)(`combo:${k}`,{failureThreshold:l.circuitBreakerThreshold,resetTimeout:l.circuitBreakerReset});if(!r.canExecute()){j.info("COMBO",`Skipping ${g}: circuit breaker OPEN for ${k}`),e>0&&F++;continue}if(i&&!await i(g)){j.info("COMBO",`Skipping ${g} (all accounts in cooldown)`),e>0&&F++;continue}for(let h=0;h<=z;h++){h>0&&(j.info("COMBO",`Retrying ${g} in ${A}ms (attempt ${h+1}/${z+1})`),await new Promise(a=>setTimeout(a,A))),j.info("COMBO",`Trying model ${e+1}/${m.length}: ${g}${h>0?` (retry ${h})`:""}`);let i=await c(a,g);if(i.ok){let a=Date.now()-E;return j.info("COMBO",`Model ${g} succeeded (${a}ms, ${F} fallbacks)`),(0,f.JF)(b.name,g,{success:!0,latencyMs:a,fallbackCount:F,strategy:q}),i}let l=i.statusText||"",n=null;try{let a=i.clone();try{let b=await a.json();l=b?.error?.message||b?.error||b?.message||l,n=b?.retryAfter||null}catch{try{let a=await i.text();a&&(l=a.substring(0,500))}catch{}}}catch{}if(n&&(!C||new Date(n)<new Date(C))&&(C=n),"string"!=typeof l)try{l=JSON.stringify(l)}catch{l=String(l)}let{shouldFallback:o,cooldownMs:s}=(0,d.hk)(i.status,l,0,null,k);if(p.includes(i.status)&&r._onFailure(),!o)return j.warn("COMBO",`Model ${g} failed (no fallback)`,{status:i.status}),i;let t=[408,429,500,502,503,504].includes(i.status);if(!(h<z)||!t){B=l||String(i.status),D||(D=i.status),e>0&&F++,j.warn("COMBO",`Model ${g} failed, trying next`,{status:i.status});break}}}let G=m.every(a=>{let b=(0,o.Xh)(a).provider||(0,o.Xh)(a).providerAlias||"unknown";return!(0,n.getCircuitBreaker)(`combo:${b}`).canExecute()}),H=Date.now()-E;if((0,f.JF)(b.name,null,{success:!1,latencyMs:H,fallbackCount:F,strategy:q}),G)return j.warn("COMBO","All models have circuit breaker OPEN — aborting"),(0,e.wO)(503,"All providers temporarily unavailable (circuit breakers open)");let I=D||406,J=B||"All combo models unavailable";if(C){let a=(0,d.Qo)(C);return j.warn("COMBO",`All models failed | ${J} (${a})`),(0,e.wO)(I,J,C,a)}return j.warn("COMBO",`All models failed | ${J}`),new Response(JSON.stringify({error:{message:J}}),{status:I,headers:{"Content-Type":"application/json"}})}async function x({body:a,combo:b,handleSingleModel:c,isModelAvailable:i,log:t,settings:u,allCombos:v}){let w,x=b.models||[],y=u?h(b,u):{...g,...b.config||{}},z=y.concurrencyPerModel??3,A=y.queueTimeoutMs??3e4,B=y.maxRetries??1,C=y.retryDelayMs??2e3,D=(w=v?s(b,v):x.map(a=>r(a).model)).length;if(0===D)return(0,e.wO)(406,"Round-robin combo has no models");let E=q.get(b.name)||0;q.set(b.name,E+1);let F=E%D,G=Date.now(),H=null,I=null,J=null,K=0;for(let e=0;e<D;e++){let g,h=w[(F+e)%D],q=(0,o.Xh)(h),r=q.provider||q.providerAlias||"unknown",s=(0,d.T_)(r),u=(0,n.getCircuitBreaker)(`combo:${r}`,{failureThreshold:s.circuitBreakerThreshold,resetTimeout:s.circuitBreakerReset});if(!u.canExecute()){t.info("COMBO-RR",`Skipping ${h}: circuit breaker OPEN for ${r}`),e>0&&K++;continue}if(i&&!await i(h)){t.info("COMBO-RR",`Skipping ${h} (all accounts in cooldown)`),e>0&&K++;continue}try{g=await function(a,{maxConcurrency:b=3,timeoutMs:c=3e4}={}){let d=j(a,b);return d.running<d.max&&!k(d)?(d.running++,Promise.resolve(m(a))):new Promise((b,e)=>{let f=setTimeout(()=>{let b=d.queue.findIndex(a=>a.timer===f);-1!==b&&d.queue.splice(b,1);let g=Error(`Semaphore timeout after ${c}ms for ${a}`);g.code="SEMAPHORE_TIMEOUT",e(g)},c);d.queue.push({resolve:b,reject:e,timer:f})})}(h,{maxConcurrency:z,timeoutMs:A})}catch(a){if("SEMAPHORE_TIMEOUT"===a.code){t.warn("COMBO-RR",`Semaphore timeout for ${h}, trying next model`),e>0&&K++;continue}throw a}try{for(let g=0;g<=B;g++){g>0&&(t.info("COMBO-RR",`Retrying ${h} in ${C}ms (attempt ${g+1}/${B+1})`),await new Promise(a=>setTimeout(a,C))),t.info("COMBO-RR",`[RR #${E}] → ${h}${e>0?` (fallback +${e})`:""}${g>0?` (retry ${g})`:""}`);let i=await c(a,h);if(i.ok){let a=Date.now()-G;return t.info("COMBO-RR",`${h} succeeded (${a}ms, ${K} fallbacks)`),(0,f.JF)(b.name,h,{success:!0,latencyMs:a,fallbackCount:K,strategy:"round-robin"}),i}let k=i.statusText||"",m=null;try{let a=i.clone();try{let b=await a.json();k=b?.error?.message||b?.error||b?.message||k,m=b?.retryAfter||null}catch{try{let a=await i.text();a&&(k=a.substring(0,500))}catch{}}}catch{}if(m&&(!J||new Date(m)<new Date(J))&&(J=m),"string"!=typeof k)try{k=JSON.stringify(k)}catch{k=String(k)}let{shouldFallback:n,cooldownMs:o}=(0,d.hk)(i.status,k,0,null,r);if(p.includes(i.status)&&o>0&&(!function(a,b){let c=j(a);c.rateLimitedUntil=Date.now()+b,setTimeout(()=>{c.rateLimitedUntil&&Date.now()>=c.rateLimitedUntil&&(c.rateLimitedUntil=null,l(a))},b+50)}(h,o),u._onFailure(),t.warn("COMBO-RR",`${h} error ${i.status}, cooldown ${o}ms (breaker: ${u.getStatus().failureCount}/${s.circuitBreakerThreshold})`)),!n)return t.warn("COMBO-RR",`${h} failed (no fallback)`,{status:i.status}),i;let q=[408,429,500,502,503,504].includes(i.status);if(!(g<B)||!q){H=k||String(i.status),I||(I=i.status),e>0&&K++,t.warn("COMBO-RR",`${h} failed, trying next model`,{status:i.status});break}}}finally{g()}}let L=Date.now()-G;if((0,f.JF)(b.name,null,{success:!1,latencyMs:L,fallbackCount:K,strategy:"round-robin"}),w.every(a=>{let b=(0,o.Xh)(a).provider||(0,o.Xh)(a).providerAlias||"unknown";return!(0,n.getCircuitBreaker)(`combo:${b}`).canExecute()}))return t.warn("COMBO-RR","All models have circuit breaker OPEN — aborting"),(0,e.wO)(503,"All providers temporarily unavailable (circuit breakers open)");let M=I||406,N=H||"All round-robin combo models unavailable";if(J){let a=(0,d.Qo)(J);return t.warn("COMBO-RR",`All models failed | ${N} (${a})`),(0,e.wO)(M,N,J,a)}return t.warn("COMBO-RR",`All models failed | ${N}`),new Response(JSON.stringify({error:{message:N}}),{status:M,headers:{"Content-Type":"application/json"}})}},27899:(a,b,c)=>{c.d(b,{A5:()=>f,BS:()=>g,Go:()=>i,JF:()=>e,NZ:()=>h});let d=new Map;function e(a,b,{success:c,latencyMs:e,fallbackCount:f=0,strategy:g="priority"}){d.has(a)||d.set(a,{totalRequests:0,totalSuccesses:0,totalFailures:0,totalFallbacks:0,totalLatencyMs:0,strategy:g,lastUsedAt:null,byModel:{}});let h=d.get(a);if(h.totalRequests++,h.totalLatencyMs+=e,h.totalFallbacks+=f,h.lastUsedAt=new Date().toISOString(),h.strategy=g,c?h.totalSuccesses++:h.totalFailures++,b){h.byModel[b]||(h.byModel[b]={requests:0,successes:0,failures:0,totalLatencyMs:0,lastStatus:null,lastUsedAt:null});let a=h.byModel[b];a.requests++,a.totalLatencyMs+=e,a.lastUsedAt=new Date().toISOString(),c?(a.successes++,a.lastStatus="ok"):(a.failures++,a.lastStatus="error")}}function f(a){let b=d.get(a);return b?{...b,avgLatencyMs:b.totalRequests>0?Math.round(b.totalLatencyMs/b.totalRequests):0,successRate:b.totalRequests>0?Math.round(b.totalSuccesses/b.totalRequests*100):0,fallbackRate:b.totalRequests>0?Math.round(b.totalFallbacks/b.totalRequests*100):0,byModel:Object.fromEntries(Object.entries(b.byModel).map(([a,b])=>[a,{...b,avgLatencyMs:b.requests>0?Math.round(b.totalLatencyMs/b.requests):0,successRate:b.requests>0?Math.round(b.successes/b.requests*100):0}]))}:null}function g(){let a={};for(let[b]of d)a[b]=f(b);return a}function h(a){d.delete(a)}function i(){d.clear()}},97917:(a,b,c)=>{c.d(b,{G7:()=>q,M4:()=>m,QM:()=>n,_s:()=>l,io:()=>i,mE:()=>f,qA:()=>k,tv:()=>j,vX:()=>o,xV:()=>e,xd:()=>p,z$:()=>g,zd:()=>h});var d=c(42910);function e(a,b){(0,d.sm)().prepare("INSERT OR REPLACE INTO domain_fallback_chains (model, chain) VALUES (?, ?)").run(a,JSON.stringify(b))}function f(){let a=(0,d.sm)().prepare("SELECT model, chain FROM domain_fallback_chains").all(),b={};for(let c of a)b[c.model]=JSON.parse(c.chain);return b}function g(a){return(0,d.sm)().prepare("DELETE FROM domain_fallback_chains WHERE model = ?").run(a).changes>0}function h(a,b){(0,d.sm)().prepare(`INSERT OR REPLACE INTO domain_budgets (api_key_id, daily_limit_usd, monthly_limit_usd, warning_threshold)
2
2
  VALUES (?, ?, ?, ?)`).run(a,b.dailyLimitUsd,b.monthlyLimitUsd||0,b.warningThreshold??.8)}function i(a){let b=(0,d.sm)().prepare("SELECT * FROM domain_budgets WHERE api_key_id = ?").get(a);return b?{dailyLimitUsd:b.daily_limit_usd,monthlyLimitUsd:b.monthly_limit_usd,warningThreshold:b.warning_threshold}:null}function j(a,b,c=Date.now()){(0,d.sm)().prepare("INSERT INTO domain_cost_history (api_key_id, cost, timestamp) VALUES (?, ?, ?)").run(a,b,c)}function k(a,b){return(0,d.sm)().prepare("SELECT cost, timestamp FROM domain_cost_history WHERE api_key_id = ? AND timestamp >= ? ORDER BY timestamp").all(a,b)}function l(a){(0,d.sm)().prepare("DELETE FROM domain_lockout_state WHERE identifier = ?").run(a)}function m(){let a=(0,d.sm)(),b=Date.now();return a.prepare("SELECT identifier, locked_until FROM domain_lockout_state WHERE locked_until IS NOT NULL AND locked_until > ?").all(b).map(a=>({identifier:a.identifier,lockedUntil:a.locked_until}))}function n(a,b){(0,d.sm)().prepare(`INSERT OR REPLACE INTO domain_circuit_breakers (name, state, failure_count, last_failure_time, options)
3
3
  VALUES (?, ?, ?, ?, ?)`).run(a,b.state,b.failureCount,b.lastFailureTime,b.options?JSON.stringify(b.options):null)}function o(a){let b=(0,d.sm)().prepare("SELECT * FROM domain_circuit_breakers WHERE name = ?").get(a);return b?{state:b.state,failureCount:b.failure_count,lastFailureTime:b.last_failure_time,options:b.options?JSON.parse(b.options):null}:null}function p(){return(0,d.sm)().prepare("SELECT name, state, failure_count, last_failure_time FROM domain_circuit_breakers").all().map(a=>({name:a.name,state:a.state,failureCount:a.failure_count,lastFailureTime:a.last_failure_time}))}function q(){(0,d.sm)().prepare("DELETE FROM domain_circuit_breakers").run()}},99939:(a,b,c)=>{c.d(b,{Xh:()=>i,js:()=>j});var d=c(23969);let e={};for(let[a,b]of Object.entries(d.PROVIDER_ID_TO_ALIAS))e[b]&&console.log(`[MODEL] Warning: alias "${b}" maps to both "${e[b]}" and "${a}". Using "${a}".`),e[b]=a;let f={github:{"claude-4.5-opus":"claude-opus-4-5-20251101","claude-opus-4.5":"claude-opus-4-5-20251101","gemini-3-pro":"gemini-3-pro-preview","gemini-3-flash":"gemini-3-flash-preview","raptor-mini":"oswe-vscode-prime"},antigravity:{"gemini-3-flash":"gemini-3-flash-preview"}},g=new Map;for(let[a,b]of Object.entries(d.vq)){let c=e[a]||a;for(let a of b||[]){let b=a?.id;if(!b)continue;let d=g.get(b)||[];d.includes(c)||(d.push(c),g.set(b,d))}}function h(a,b){if(!b||"string"!=typeof b)return b;let c=f[e[a]||a];return c?.[b]||b}function i(a){if(!a)return{provider:null,model:null,isAlias:!1,providerAlias:null};if(/\.\.[\/\\]/.test(a)||/[\x00-\x1f]/.test(a))return console.log(`[MODEL] Warning: rejected malformed model string: "${a.substring(0,50)}"`),{provider:null,model:null,isAlias:!1,providerAlias:null};if(a.includes("/")){let b=a.indexOf("/"),c=a.slice(0,b),d=a.slice(b+1);return{provider:e[c]||c,model:d,isAlias:!1,providerAlias:c}}return{provider:null,model:a,isAlias:!0,providerAlias:null}}async function j(a,b){let c=i(a);if(!c.isAlias){let a=h(c.provider,c.model);return{provider:c.provider,model:a}}let f="function"==typeof b?await b():b,j=function(a,b){var c,d;if(!b)return null;let f=b[a];if(!f)return null;if("string"==typeof f&&f.includes("/")){let a=f.indexOf("/");return{provider:e[c=f.slice(0,a)]||c,model:f.slice(a+1)}}return"object"==typeof f&&f.provider&&f.model?{provider:e[d=f.provider]||d,model:f.model}:null}(c.model,f);if(j){let a=h(j.provider,j.model);return{provider:j.provider,model:a}}let k=c.model,l=g.get(k)||[];if(l.includes("openai"))return{provider:"openai",model:k};let m=l.filter(a=>"openai"!==a);if(1===m.length){let a=m[0],b=h(a,k);return{provider:a,model:b}}if(m.length>1){let a=m.map(a=>d.PROVIDER_ID_TO_ALIAS[a]||a),b=a.slice(0,2).map(a=>`${a}/${k}`),c=`Ambiguous model '${k}'. Use provider/model prefix (ex: ${b.join(" or ")}).`;return console.warn(`[MODEL] ${c} Candidates: ${a.join(", ")}`),{provider:null,model:k,errorType:"ambiguous_model",errorMessage:c,candidateProviders:m,candidateAliases:a}}return{provider:"openai",model:k}}}};