omniroute 3.0.5 → 3.0.7

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 (246) hide show
  1. package/app/.next/BUILD_ID +1 -1
  2. package/app/.next/build-manifest.json +2 -2
  3. package/app/.next/prerender-manifest.json +3 -3
  4. package/app/.next/server/app/(dashboard)/dashboard/a2a/page.js +2 -2
  5. package/app/.next/server/app/(dashboard)/dashboard/a2a/page.js.nft.json +1 -1
  6. package/app/.next/server/app/(dashboard)/dashboard/a2a/page_client-reference-manifest.js +1 -1
  7. package/app/.next/server/app/(dashboard)/dashboard/agents/page.js +2 -2
  8. package/app/.next/server/app/(dashboard)/dashboard/agents/page.js.nft.json +1 -1
  9. package/app/.next/server/app/(dashboard)/dashboard/agents/page_client-reference-manifest.js +1 -1
  10. package/app/.next/server/app/(dashboard)/dashboard/analytics/page.js +2 -2
  11. package/app/.next/server/app/(dashboard)/dashboard/analytics/page.js.nft.json +1 -1
  12. package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  13. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page.js +2 -2
  14. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page.js.nft.json +1 -1
  15. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -1
  16. package/app/.next/server/app/(dashboard)/dashboard/audit-log/page.js +2 -2
  17. package/app/.next/server/app/(dashboard)/dashboard/audit-log/page.js.nft.json +1 -1
  18. package/app/.next/server/app/(dashboard)/dashboard/audit-log/page_client-reference-manifest.js +1 -1
  19. package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page.js +2 -2
  20. package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page.js.nft.json +1 -1
  21. package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page_client-reference-manifest.js +1 -1
  22. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -2
  23. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  24. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  25. package/app/.next/server/app/(dashboard)/dashboard/combos/page.js +2 -2
  26. package/app/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  27. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  28. package/app/.next/server/app/(dashboard)/dashboard/costs/page.js +2 -2
  29. package/app/.next/server/app/(dashboard)/dashboard/costs/page.js.nft.json +1 -1
  30. package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
  31. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
  32. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  33. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  34. package/app/.next/server/app/(dashboard)/dashboard/health/page.js +2 -2
  35. package/app/.next/server/app/(dashboard)/dashboard/health/page.js.nft.json +1 -1
  36. package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
  37. package/app/.next/server/app/(dashboard)/dashboard/limits/page.js +2 -2
  38. package/app/.next/server/app/(dashboard)/dashboard/limits/page.js.nft.json +1 -1
  39. package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
  40. package/app/.next/server/app/(dashboard)/dashboard/logs/page.js +2 -2
  41. package/app/.next/server/app/(dashboard)/dashboard/logs/page.js.nft.json +1 -1
  42. package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
  43. package/app/.next/server/app/(dashboard)/dashboard/mcp/page.js +2 -2
  44. package/app/.next/server/app/(dashboard)/dashboard/mcp/page.js.nft.json +1 -1
  45. package/app/.next/server/app/(dashboard)/dashboard/mcp/page_client-reference-manifest.js +1 -1
  46. package/app/.next/server/app/(dashboard)/dashboard/media/page.js +2 -2
  47. package/app/.next/server/app/(dashboard)/dashboard/media/page.js.nft.json +1 -1
  48. package/app/.next/server/app/(dashboard)/dashboard/media/page_client-reference-manifest.js +1 -1
  49. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page.js +2 -2
  50. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page.js.nft.json +1 -1
  51. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
  52. package/app/.next/server/app/(dashboard)/dashboard/page.js +2 -2
  53. package/app/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  54. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  55. package/app/.next/server/app/(dashboard)/dashboard/playground/page.js +2 -2
  56. package/app/.next/server/app/(dashboard)/dashboard/playground/page.js.nft.json +1 -1
  57. package/app/.next/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  58. package/app/.next/server/app/(dashboard)/dashboard/profile/page.js +2 -2
  59. package/app/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  60. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  61. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
  62. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  63. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  64. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js +2 -2
  65. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  66. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  67. package/app/.next/server/app/(dashboard)/dashboard/providers/page.js +2 -2
  68. package/app/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  69. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  70. package/app/.next/server/app/(dashboard)/dashboard/search-tools/page.js +2 -2
  71. package/app/.next/server/app/(dashboard)/dashboard/search-tools/page.js.nft.json +1 -1
  72. package/app/.next/server/app/(dashboard)/dashboard/search-tools/page_client-reference-manifest.js +1 -1
  73. package/app/.next/server/app/(dashboard)/dashboard/settings/page.js +2 -2
  74. package/app/.next/server/app/(dashboard)/dashboard/settings/page.js.nft.json +1 -1
  75. package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
  76. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page.js +2 -2
  77. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page.js.nft.json +1 -1
  78. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  79. package/app/.next/server/app/(dashboard)/dashboard/translator/page.js +2 -2
  80. package/app/.next/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  81. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  82. package/app/.next/server/app/(dashboard)/dashboard/usage/page.js +2 -2
  83. package/app/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  84. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  85. package/app/.next/server/app/400/page.js +2 -2
  86. package/app/.next/server/app/400/page.js.nft.json +1 -1
  87. package/app/.next/server/app/400/page_client-reference-manifest.js +1 -1
  88. package/app/.next/server/app/401/page.js +2 -2
  89. package/app/.next/server/app/401/page.js.nft.json +1 -1
  90. package/app/.next/server/app/401/page_client-reference-manifest.js +1 -1
  91. package/app/.next/server/app/403/page.js +2 -2
  92. package/app/.next/server/app/403/page.js.nft.json +1 -1
  93. package/app/.next/server/app/403/page_client-reference-manifest.js +1 -1
  94. package/app/.next/server/app/408/page.js +2 -2
  95. package/app/.next/server/app/408/page.js.nft.json +1 -1
  96. package/app/.next/server/app/408/page_client-reference-manifest.js +1 -1
  97. package/app/.next/server/app/429/page.js +2 -2
  98. package/app/.next/server/app/429/page.js.nft.json +1 -1
  99. package/app/.next/server/app/429/page_client-reference-manifest.js +1 -1
  100. package/app/.next/server/app/500/page.js +2 -2
  101. package/app/.next/server/app/500/page.js.nft.json +1 -1
  102. package/app/.next/server/app/500/page_client-reference-manifest.js +1 -1
  103. package/app/.next/server/app/502/page.js +2 -2
  104. package/app/.next/server/app/502/page.js.nft.json +1 -1
  105. package/app/.next/server/app/502/page_client-reference-manifest.js +1 -1
  106. package/app/.next/server/app/503/page.js +2 -2
  107. package/app/.next/server/app/503/page.js.nft.json +1 -1
  108. package/app/.next/server/app/503/page_client-reference-manifest.js +1 -1
  109. package/app/.next/server/app/_global-error/page.js +1 -1
  110. package/app/.next/server/app/_global-error/page.js.nft.json +1 -1
  111. package/app/.next/server/app/_global-error.html +2 -2
  112. package/app/.next/server/app/_global-error.rsc +1 -1
  113. package/app/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  114. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  115. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  116. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  117. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  118. package/app/.next/server/app/_not-found/page.js +2 -2
  119. package/app/.next/server/app/_not-found/page.js.nft.json +1 -1
  120. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  121. package/app/.next/server/app/api/logs/console/route.js +1 -1
  122. package/app/.next/server/app/api/logs/console/route.js.nft.json +1 -1
  123. package/app/.next/server/app/api/openapi/spec/route.js +1 -1
  124. package/app/.next/server/app/api/openapi/spec/route.js.nft.json +1 -1
  125. package/app/.next/server/app/api/settings/proxy/test/route.js +7 -2
  126. package/app/.next/server/app/api/settings/proxy/test/route.js.nft.json +1 -1
  127. package/app/.next/server/app/api/translator/load/route.js +1 -1
  128. package/app/.next/server/app/api/translator/load/route.js.nft.json +1 -1
  129. package/app/.next/server/app/api/translator/save/route.js +1 -1
  130. package/app/.next/server/app/api/translator/save/route.js.nft.json +1 -1
  131. package/app/.next/server/app/api/usage/[connectionId]/route.js +6 -5
  132. package/app/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  133. package/app/.next/server/app/callback/page.js +2 -2
  134. package/app/.next/server/app/callback/page.js.nft.json +1 -1
  135. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  136. package/app/.next/server/app/docs/page.js +2 -2
  137. package/app/.next/server/app/docs/page.js.nft.json +1 -1
  138. package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  139. package/app/.next/server/app/forbidden/page.js +2 -2
  140. package/app/.next/server/app/forbidden/page.js.nft.json +1 -1
  141. package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
  142. package/app/.next/server/app/forgot-password/page.js +2 -2
  143. package/app/.next/server/app/forgot-password/page.js.nft.json +1 -1
  144. package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
  145. package/app/.next/server/app/landing/page.js +2 -2
  146. package/app/.next/server/app/landing/page.js.nft.json +1 -1
  147. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  148. package/app/.next/server/app/login/page.js +2 -2
  149. package/app/.next/server/app/login/page.js.nft.json +1 -1
  150. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  151. package/app/.next/server/app/maintenance/page.js +2 -2
  152. package/app/.next/server/app/maintenance/page.js.nft.json +1 -1
  153. package/app/.next/server/app/maintenance/page_client-reference-manifest.js +1 -1
  154. package/app/.next/server/app/offline/page.js +2 -2
  155. package/app/.next/server/app/offline/page.js.nft.json +1 -1
  156. package/app/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  157. package/app/.next/server/app/page.js +2 -2
  158. package/app/.next/server/app/page.js.nft.json +1 -1
  159. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  160. package/app/.next/server/app/privacy/page.js +2 -2
  161. package/app/.next/server/app/privacy/page.js.nft.json +1 -1
  162. package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
  163. package/app/.next/server/app/status/page.js +2 -2
  164. package/app/.next/server/app/status/page.js.nft.json +1 -1
  165. package/app/.next/server/app/status/page_client-reference-manifest.js +1 -1
  166. package/app/.next/server/app/terms/page.js +2 -2
  167. package/app/.next/server/app/terms/page.js.nft.json +1 -1
  168. package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
  169. package/app/.next/server/chunks/[root-of-the-server]__051203a6._.js +1 -1
  170. package/app/.next/server/chunks/[root-of-the-server]__0891af92._.js +1 -1
  171. package/app/.next/server/chunks/{[root-of-the-server]__fea5312b._.js → [root-of-the-server]__1a67cabb._.js} +2 -2
  172. package/app/.next/server/chunks/[root-of-the-server]__1f2b0d89._.js +1 -1
  173. package/app/.next/server/chunks/[root-of-the-server]__228deb98._.js +6 -0
  174. package/app/.next/server/chunks/[root-of-the-server]__3aa1672b._.js +3 -0
  175. package/app/.next/server/chunks/{[root-of-the-server]__9d50d114._.js → [root-of-the-server]__3e31c0c5._.js} +2 -2
  176. package/app/.next/server/chunks/[root-of-the-server]__46e00e59._.js +1 -1
  177. package/app/.next/server/chunks/[root-of-the-server]__4e5a04c2._.js +1 -1
  178. package/app/.next/server/chunks/[root-of-the-server]__61d78f9d._.js +1 -1
  179. package/app/.next/server/chunks/[root-of-the-server]__6e52619e._.js +1 -1
  180. package/app/.next/server/chunks/[root-of-the-server]__7ace0fcd._.js +1 -1
  181. package/app/.next/server/chunks/[root-of-the-server]__7d0781e8._.js +6 -0
  182. package/app/.next/server/chunks/[root-of-the-server]__7fa4d14e._.js +1 -1
  183. package/app/.next/server/chunks/{[root-of-the-server]__6ff1ab32._.js → [root-of-the-server]__ab1817d2._.js} +2 -2
  184. package/app/.next/server/chunks/{[root-of-the-server]__e376e668._.js → [root-of-the-server]__b2d1faff._.js} +2 -2
  185. package/app/.next/server/chunks/{[root-of-the-server]__192ce3e4._.js → [root-of-the-server]__b974107a._.js} +2 -2
  186. package/app/.next/server/chunks/[root-of-the-server]__d49fae76._.js +3 -0
  187. package/app/.next/server/chunks/{[root-of-the-server]__1a89bfa5._.js → [root-of-the-server]__d6de923d._.js} +3 -3
  188. package/app/.next/server/chunks/_05c48915._.js +1 -1
  189. package/app/.next/server/chunks/_06515a8a._.js +1 -1
  190. package/app/.next/server/chunks/_2115d8de._.js +1 -1
  191. package/app/.next/server/chunks/_3ac953eb._.js +1 -1
  192. package/app/.next/server/chunks/_4b8fd853._.js +1 -1
  193. package/app/.next/server/chunks/_68683848._.js +1 -1
  194. package/app/.next/server/chunks/_85c0d9b3._.js +1 -1
  195. package/app/.next/server/chunks/_d13cbb6d._.js +3 -0
  196. package/app/.next/server/chunks/_ee9b677b._.js +1 -1
  197. package/app/.next/server/chunks/open-sse_config_providerModels_ts_04541468._.js +1 -1
  198. package/app/.next/server/chunks/open-sse_config_providerRegistry_ts_2f74ec2a._.js +1 -1
  199. package/app/.next/server/chunks/open-sse_config_providerRegistry_ts_dec0f840._.js +1 -1
  200. package/app/.next/server/chunks/src_6320c728._.js +1 -1
  201. package/app/.next/server/chunks/ssr/{[root-of-the-server]__d5a9e5ee._.js → [root-of-the-server]__62183d3b._.js} +2 -2
  202. package/app/.next/server/chunks/ssr/{[root-of-the-server]__e4499d60._.js → [root-of-the-server]__7a1929fd._.js} +2 -2
  203. package/app/.next/server/chunks/ssr/{[root-of-the-server]__18da985c._.js → [root-of-the-server]__9c6249ab._.js} +2 -2
  204. package/app/.next/server/chunks/ssr/[root-of-the-server]__9ef96d20._.js +1 -1
  205. package/app/.next/server/chunks/ssr/[root-of-the-server]__a6942102._.js +1 -1
  206. package/app/.next/server/chunks/ssr/_19b3d5b1._.js +1 -1
  207. package/app/.next/server/chunks/ssr/open-sse_config_providerModels_ts_4cac55e2._.js +1 -1
  208. package/app/.next/server/chunks/ssr/src_608e5edc._.js +1 -1
  209. package/app/.next/server/chunks/ssr/src_app_(dashboard)_dashboard_936a9ee0._.js +1 -1
  210. package/app/.next/server/chunks/ssr/src_app_(dashboard)_dashboard_playground_page_tsx_06c08266._.js +2 -2
  211. package/app/.next/server/chunks/ssr/src_app_(dashboard)_dashboard_settings_9e20fb8d._.js +1 -1
  212. package/app/.next/server/middleware.js +1 -1
  213. package/app/.next/server/pages/500.html +2 -2
  214. package/app/.next/server/server-reference-manifest.js +1 -1
  215. package/app/.next/server/server-reference-manifest.json +1 -1
  216. package/app/.next/static/chunks/{c4538578367f8d6e.js → 29003ec8ef226c62.js} +2 -2
  217. package/app/.next/static/chunks/{37063ea02716537b.js → 58d319dd9faa8901.js} +1 -1
  218. package/app/.next/static/chunks/6350bc1d56a7114c.js +2 -0
  219. package/app/.next/static/chunks/{25a3e05da8e1a7ec.js → 84065c05df1a3a1a.js} +1 -1
  220. package/app/.next/static/chunks/9330486b16098458.js +1 -0
  221. package/app/.next/static/chunks/a622fa7a630e2dc2.js +1 -0
  222. package/app/CHANGELOG.md +40 -0
  223. package/app/docs/openapi.yaml +1 -1
  224. package/app/open-sse/config/providerRegistry.ts +8 -5
  225. package/app/open-sse/services/signatureCache.ts +5 -0
  226. package/app/package-lock.json +2 -2
  227. package/app/package.json +1 -1
  228. package/app/src/app/(dashboard)/dashboard/cli-tools/CLIToolsPageClient.tsx +40 -0
  229. package/app/src/app/(dashboard)/dashboard/playground/page.tsx +77 -3
  230. package/app/src/app/(dashboard)/dashboard/settings/components/ProxyRegistryManager.tsx +8 -9
  231. package/app/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/index.tsx +1 -1
  232. package/app/src/app/api/settings/proxy/test/route.ts +21 -1
  233. package/app/src/app/api/usage/[connectionId]/route.ts +89 -22
  234. package/app/src/lib/providers/validation.ts +1 -1
  235. package/app/tests/integration/v1-contracts-behavior.test.mjs +8 -6
  236. package/package.json +1 -1
  237. package/app/.next/server/chunks/[root-of-the-server]__5dcab57b._.js +0 -6
  238. package/app/.next/server/chunks/[root-of-the-server]__643f87ad._.js +0 -3
  239. package/app/.next/server/chunks/[root-of-the-server]__765c4417._.js +0 -3
  240. package/app/.next/server/chunks/[root-of-the-server]__7afe1e49._.js +0 -3
  241. package/app/.next/static/chunks/3f18998354dd49b9.js +0 -1
  242. package/app/.next/static/chunks/b7c366e286771d50.js +0 -1
  243. package/app/.next/static/chunks/f3640b442f6de1d4.js +0 -2
  244. /package/app/.next/static/{_Ub91T2wbB96WfkKKwhDH → kmbT_1tKg7aSbEcFkhAUg}/_buildManifest.js +0 -0
  245. /package/app/.next/static/{_Ub91T2wbB96WfkKKwhDH → kmbT_1tKg7aSbEcFkhAUg}/_clientMiddlewareManifest.json +0 -0
  246. /package/app/.next/static/{_Ub91T2wbB96WfkKKwhDH → kmbT_1tKg7aSbEcFkhAUg}/_ssgManifest.js +0 -0
package/app/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omniroute",
3
- "version": "3.0.5",
3
+ "version": "3.0.7",
4
4
  "description": "Smart AI Router with auto fallback — route to FREE & cheap models, zero downtime. Works with Cursor, Cline, Claude Desktop, Codex, and any OpenAI-compatible tool.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -33,6 +33,7 @@ export default function CLIToolsPageClient({ machineId }) {
33
33
  const [apiKeys, setApiKeys] = useState([]);
34
34
  const [toolStatuses, setToolStatuses] = useState({});
35
35
  const [statusesLoaded, setStatusesLoaded] = useState(false);
36
+ const [dynamicModels, setDynamicModels] = useState([]);
36
37
  const translateOrFallback = useCallback(
37
38
  (key, fallback, values = undefined) => {
38
39
  try {
@@ -49,6 +50,7 @@ export default function CLIToolsPageClient({ machineId }) {
49
50
  loadCloudSettings();
50
51
  fetchApiKeys();
51
52
  fetchToolStatuses();
53
+ fetchDynamicModels();
52
54
  }, []);
53
55
 
54
56
  const loadCloudSettings = async () => {
@@ -107,6 +109,18 @@ export default function CLIToolsPageClient({ machineId }) {
107
109
  }
108
110
  };
109
111
 
112
+ const fetchDynamicModels = async () => {
113
+ try {
114
+ const res = await fetch("/v1/models");
115
+ if (res.ok) {
116
+ const data = await res.json();
117
+ setDynamicModels(data?.data || []);
118
+ }
119
+ } catch (error) {
120
+ console.log("Error fetching dynamic models:", error);
121
+ }
122
+ };
123
+
110
124
  const getActiveProviders = () => {
111
125
  return connections.filter((c) => c.isActive !== false);
112
126
  };
@@ -116,6 +130,7 @@ export default function CLIToolsPageClient({ machineId }) {
116
130
  const models = [];
117
131
  const seenModels = new Set();
118
132
 
133
+ // First: add static models from the constants
119
134
  activeProviders.forEach((conn) => {
120
135
  const alias = PROVIDER_ID_TO_ALIAS[conn.provider] || conn.provider;
121
136
  const providerModels = getModelsByProviderId(conn.provider);
@@ -135,6 +150,31 @@ export default function CLIToolsPageClient({ machineId }) {
135
150
  });
136
151
  });
137
152
 
153
+ // Second: add dynamic models from /v1/models (fills gaps for Kiro, OpenCode, custom providers)
154
+ const activeProviderIds = new Set(activeProviders.map((c) => c.provider));
155
+ const activeAliases = new Set(
156
+ activeProviders.map((c) => PROVIDER_ID_TO_ALIAS[c.provider] || c.provider)
157
+ );
158
+ dynamicModels.forEach((dm) => {
159
+ const modelId = dm.id || dm;
160
+ if (seenModels.has(modelId)) return;
161
+ // Parse alias/model format
162
+ const slashIdx = modelId.indexOf("/");
163
+ if (slashIdx === -1) return;
164
+ const alias = modelId.substring(0, slashIdx);
165
+ const bareModel = modelId.substring(slashIdx + 1);
166
+ if (!activeAliases.has(alias) && !activeProviderIds.has(alias)) return;
167
+ seenModels.add(modelId);
168
+ models.push({
169
+ value: modelId,
170
+ label: modelId,
171
+ provider: alias,
172
+ alias: alias,
173
+ connectionName: "",
174
+ modelId: bareModel,
175
+ });
176
+ });
177
+
138
178
  return models;
139
179
  };
140
180
 
@@ -2,6 +2,7 @@
2
2
 
3
3
  import { useState, useEffect, useCallback, useRef } from "react";
4
4
  import { Card, Button, Select, Badge } from "@/shared/components";
5
+ import { ALIAS_TO_ID } from "@/shared/constants/providers";
5
6
  import dynamic from "next/dynamic";
6
7
 
7
8
  const Editor = dynamic(() => import("@monaco-editor/react"), { ssr: false });
@@ -20,6 +21,13 @@ interface ProviderOption {
20
21
  label: string;
21
22
  }
22
23
 
24
+ interface ConnectionOption {
25
+ id: string;
26
+ name: string;
27
+ provider: string;
28
+ authType: string;
29
+ }
30
+
23
31
  const ENDPOINT_OPTIONS = [
24
32
  { value: "chat", label: "Chat Completions" },
25
33
  { value: "responses", label: "Responses" },
@@ -182,8 +190,10 @@ function ImageResultsInline({ data }: { data: any }) {
182
190
  export default function PlaygroundPage() {
183
191
  const [models, setModels] = useState<ModelInfo[]>([]);
184
192
  const [providers, setProviders] = useState<ProviderOption[]>([]);
193
+ const [allConnections, setAllConnections] = useState<ConnectionOption[]>([]);
185
194
  const [selectedProvider, setSelectedProvider] = useState("");
186
195
  const [selectedModel, setSelectedModel] = useState("");
196
+ const [selectedConnection, setSelectedConnection] = useState("");
187
197
  const [selectedEndpoint, setSelectedEndpoint] = useState("chat");
188
198
  const [requestBody, setRequestBody] = useState("");
189
199
  const [responseBody, setResponseBody] = useState("");
@@ -205,8 +215,16 @@ export default function PlaygroundPage() {
205
215
  const isImageEndpoint = selectedEndpoint === "images";
206
216
  const supportsVision = isChatEndpoint && isVisionModel(selectedModel);
207
217
 
208
- // Fetch models
218
+ // Load connections for a given provider — filtered from allConnections
219
+ const providerConnections = allConnections.filter((c) => {
220
+ if (!selectedProvider) return false;
221
+ const resolvedProvider = ALIAS_TO_ID[selectedProvider] || selectedProvider;
222
+ return c.provider === resolvedProvider || c.provider === selectedProvider;
223
+ });
224
+
225
+ // Fetch models and ALL connections at startup
209
226
  useEffect(() => {
227
+ // Fetch models
210
228
  fetch("/v1/models")
211
229
  .then((res) => res.json())
212
230
  .then((data) => {
@@ -222,7 +240,26 @@ export default function PlaygroundPage() {
222
240
  .sort()
223
241
  .map((p) => ({ value: p, label: p }));
224
242
  setProviders(providerOpts);
225
- if (providerOpts.length > 0) setSelectedProvider(providerOpts[0].value);
243
+ if (providerOpts.length > 0) {
244
+ setSelectedProvider(providerOpts[0].value);
245
+ }
246
+ })
247
+ .catch(() => {});
248
+
249
+ // Fetch ALL connections (once)
250
+ fetch("/api/providers/client")
251
+ .then((res) => res.json())
252
+ .then((data) => {
253
+ const conns: ConnectionOption[] = [];
254
+ for (const conn of data?.connections || []) {
255
+ conns.push({
256
+ id: conn.id,
257
+ name: conn.name || conn.email || conn.id,
258
+ provider: conn.provider,
259
+ authType: conn.authType || "apiKey",
260
+ });
261
+ }
262
+ setAllConnections(conns);
226
263
  })
227
264
  .catch(() => {});
228
265
  }, []);
@@ -241,6 +278,7 @@ export default function PlaygroundPage() {
241
278
 
242
279
  const handleProviderChange = (newProvider: string) => {
243
280
  setSelectedProvider(newProvider);
281
+ setSelectedConnection("");
244
282
  const providerModels = models
245
283
  .filter((m) => !newProvider || m.id.startsWith(newProvider + "/"))
246
284
  .map((m) => m.id);
@@ -334,8 +372,13 @@ export default function PlaygroundPage() {
334
372
  } catch {
335
373
  /* ignore parse errors */
336
374
  }
375
+ const fetchHeaders: Record<string, string> = {};
376
+ if (selectedConnection) {
377
+ fetchHeaders["X-OmniRoute-Connection"] = selectedConnection;
378
+ }
337
379
  res = await fetch(`/api${path}`, {
338
380
  method: "POST",
381
+ headers: fetchHeaders,
339
382
  body: form,
340
383
  signal: controller.signal,
341
384
  });
@@ -345,9 +388,13 @@ export default function PlaygroundPage() {
345
388
  if (supportsVision && uploadedImages.length > 0) {
346
389
  parsed = buildChatBodyWithImages(parsed, uploadedImages);
347
390
  }
391
+ const fetchHeaders: Record<string, string> = { "Content-Type": "application/json" };
392
+ if (selectedConnection) {
393
+ fetchHeaders["X-OmniRoute-Connection"] = selectedConnection;
394
+ }
348
395
  res = await fetch(`/api${path}`, {
349
396
  method: "POST",
350
- headers: { "Content-Type": "application/json" },
397
+ headers: fetchHeaders,
351
398
  body: JSON.stringify(parsed),
352
399
  signal: controller.signal,
353
400
  });
@@ -473,6 +520,33 @@ export default function PlaygroundPage() {
473
520
  </div>
474
521
  )}
475
522
 
523
+ {/* Account/Key — always shown when provider is selected */}
524
+ {!isSearchEndpoint && (
525
+ <div className="flex-1 w-full">
526
+ <label className="block text-xs font-medium text-text-muted mb-1.5 uppercase tracking-wider">
527
+ Account / Key
528
+ </label>
529
+ <Select
530
+ value={selectedConnection}
531
+ onChange={(e: any) => setSelectedConnection(e.target.value)}
532
+ options={[
533
+ {
534
+ value: "",
535
+ label:
536
+ providerConnections.length > 0
537
+ ? `Auto (${providerConnections.length} accounts)`
538
+ : "No accounts",
539
+ },
540
+ ...providerConnections.map((c) => ({
541
+ value: c.id,
542
+ label: c.name,
543
+ })),
544
+ ]}
545
+ className="w-full"
546
+ />
547
+ </div>
548
+ )}
549
+
476
550
  {/* Send Button — hidden in search mode (SearchPlayground has its own) */}
477
551
  {!isSearchEndpoint && (
478
552
  <div className="shrink-0">
@@ -209,12 +209,11 @@ export default function ProxyRegistryManager() {
209
209
  method: "POST",
210
210
  headers: { "Content-Type": "application/json" },
211
211
  body: JSON.stringify({
212
+ proxyId: item.id,
212
213
  proxy: {
213
214
  type: item.type || "http",
214
215
  host: item.host,
215
216
  port: String(item.port || 8080),
216
- username: item.username,
217
- password: item.password,
218
217
  },
219
218
  }),
220
219
  });
@@ -467,12 +466,7 @@ export default function ProxyRegistryManager() {
467
466
  </td>
468
467
  <td className="py-2 pr-3 text-xs text-text-muted">
469
468
  <div className="flex flex-col gap-0.5">
470
- {health ? (
471
- <>
472
- <span>{health.successRate ?? 0}% success</span>
473
- <span>{health.avgLatencyMs ?? "-"} ms avg</span>
474
- </>
475
- ) : testById[item.id] ? (
469
+ {testById[item.id] ? (
476
470
  testById[item.id]!.success ? (
477
471
  <>
478
472
  <span className="text-emerald-400">
@@ -484,9 +478,14 @@ export default function ProxyRegistryManager() {
484
478
  </>
485
479
  ) : (
486
480
  <span className="text-red-400">
487
- {testById[item.id]!.error || "failed"}
481
+ {testById[item.id]!.error || "failed"}
488
482
  </span>
489
483
  )
484
+ ) : health ? (
485
+ <>
486
+ <span>{health.successRate ?? 0}% success</span>
487
+ <span>{health.avgLatencyMs ?? "-"} ms avg</span>
488
+ </>
490
489
  ) : (
491
490
  <span>—</span>
492
491
  )}
@@ -511,7 +511,7 @@ export default function ProviderLimits() {
511
511
  </div>
512
512
 
513
513
  {/* Account rows */}
514
- <div className="rounded-xl border border-border overflow-hidden bg-bg-subtle">
514
+ <div className="rounded-xl border border-border overflow-hidden bg-surface">
515
515
  {/* Table header */}
516
516
  <div
517
517
  className="items-center px-4 py-2.5 border-b border-border text-[11px] font-semibold uppercase tracking-wider text-text-muted"
@@ -8,6 +8,7 @@ import {
8
8
  import { testProxySchema } from "@/shared/validation/schemas";
9
9
  import { isValidationFailure, validateBody } from "@/shared/validation/helpers";
10
10
  import { createErrorResponse, createErrorResponseFromUnknown } from "@/lib/api/errorResponse";
11
+ import { getProxyById } from "@/lib/localDb";
11
12
 
12
13
  const BASE_SUPPORTED_PROXY_TYPES = new Set(["http", "https"]);
13
14
 
@@ -56,7 +57,26 @@ export async function POST(request: Request) {
56
57
  type: "invalid_request",
57
58
  });
58
59
  }
59
- const { proxy } = validation.data;
60
+ let { proxy } = validation.data;
61
+
62
+ // If a proxyId is provided, look up the real (non-redacted) credentials from DB.
63
+ // The frontend sends redacted credentials (***) from listProxies(), so we need
64
+ // the actual secrets for testing.
65
+ const body = rawBody as Record<string, unknown>;
66
+ const proxyId = typeof body.proxyId === "string" ? body.proxyId.trim() : null;
67
+ if (proxyId) {
68
+ const dbProxy = await getProxyById(proxyId, { includeSecrets: true });
69
+ if (dbProxy) {
70
+ proxy = {
71
+ ...proxy,
72
+ host: proxy.host || dbProxy.host,
73
+ port: proxy.port || String(dbProxy.port),
74
+ type: proxy.type || dbProxy.type,
75
+ username: dbProxy.username,
76
+ password: dbProxy.password,
77
+ };
78
+ }
79
+ }
60
80
 
61
81
  const proxyType = String(proxy.type || "http").toLowerCase();
62
82
  if (proxyType === "socks5" && !isSocks5ProxyEnabled()) {
@@ -131,34 +131,101 @@ export async function GET(
131
131
  return Response.json({ message: "Usage not available for API key connections" });
132
132
  }
133
133
 
134
- // Refresh credentials if needed using executor
135
- let refreshed = false;
134
+ // Resolve proxy for this connection FIRST (key → combo → provider → global → direct)
135
+ // so that both credential refresh AND usage fetch go through the proxy.
136
+ const proxyInfo = await resolveProxyForConnection(connectionId);
137
+
138
+ // Helper: perform credential refresh + usage fetch
139
+ const fetchUsageWithContext = async (proxyConfig: unknown) => {
140
+ return runWithProxyContext(proxyConfig, async () => {
141
+ let conn = connection;
142
+ let wasRefreshed = false;
143
+
144
+ // Refresh credentials if needed using executor
145
+ try {
146
+ const result = await refreshAndUpdateCredentials(conn);
147
+ conn = result.connection;
148
+ wasRefreshed = result.refreshed;
149
+
150
+ // Sync to cloud only if token was refreshed
151
+ if (wasRefreshed) {
152
+ await syncToCloudIfEnabled();
153
+ }
154
+ } catch (refreshError) {
155
+ console.error("[Usage API] Credential refresh failed:", refreshError);
156
+ throw refreshError;
157
+ }
158
+
159
+ // Fetch usage from provider API
160
+ const usageData = await getUsageForProvider(conn);
161
+ connection = conn; // propagate updated connection for status sync below
162
+ return { usage: usageData, refreshed: wasRefreshed };
163
+ });
164
+ };
165
+
166
+ // Check if a usage result indicates a network-level error (proxy can't relay)
167
+ const isNetworkFailure = (usageResult: any): boolean => {
168
+ const msg = usageResult?.usage?.message;
169
+ if (typeof msg !== "string") return false;
170
+ return (
171
+ msg.includes("fetch failed") ||
172
+ msg.includes("ECONNREFUSED") ||
173
+ msg.includes("ETIMEDOUT") ||
174
+ msg.includes("Proxy unreachable") ||
175
+ msg.includes("UND_ERR_CONNECT_TIMEOUT")
176
+ );
177
+ };
178
+
179
+ let result: any;
180
+ const proxyConfig = proxyInfo?.proxy || null;
136
181
  try {
137
- const result = await refreshAndUpdateCredentials(connection);
138
- connection = result.connection;
139
- refreshed = result.refreshed;
182
+ result = await fetchUsageWithContext(proxyConfig);
183
+ } catch (proxyError: any) {
184
+ const isAuthError =
185
+ proxyError?.message?.includes?.("refresh") || proxyError?.message?.includes?.("Credential");
140
186
 
141
- // Sync to cloud only if token was refreshed
142
- if (refreshed) {
143
- await syncToCloudIfEnabled();
187
+ if (isAuthError) {
188
+ return Response.json(
189
+ { error: `Credential refresh failed: ${proxyError.message}` },
190
+ { status: 401 }
191
+ );
192
+ }
193
+
194
+ // If proxy was active and it's a network error (thrown), retry without proxy
195
+ const isThrownNetworkError =
196
+ proxyError?.message === "fetch failed" ||
197
+ proxyError?.code === "PROXY_UNREACHABLE" ||
198
+ proxyError?.code === "UND_ERR_CONNECT_TIMEOUT" ||
199
+ proxyError?.cause?.code === "ECONNREFUSED";
200
+
201
+ if (proxyConfig && isThrownNetworkError) {
202
+ console.warn(
203
+ `[Usage API] Proxy fetch threw for ${connectionId}, retrying without proxy:`,
204
+ proxyError?.message
205
+ );
206
+ result = await fetchUsageWithContext(null);
207
+ } else {
208
+ throw proxyError;
144
209
  }
145
- } catch (refreshError) {
146
- console.error("[Usage API] Credential refresh failed:", refreshError);
147
- return Response.json(
148
- {
149
- error: `Credential refresh failed: ${(refreshError as any).message}`,
150
- },
151
- { status: 401 }
152
- );
153
210
  }
154
211
 
155
- // Resolve proxy for this connection (key combo provider global → direct)
156
- const proxyInfo = await resolveProxyForConnection(connectionId);
212
+ // If the usage result contains a network error AND a proxy was active,
213
+ // retry without proxy. getCodexUsage() catches fetch errors internally
214
+ // and returns {message: "Failed to fetch..."} instead of throwing.
215
+ if (proxyConfig && isNetworkFailure(result)) {
216
+ console.warn(
217
+ `[Usage API] Proxy usage returned network error for ${connectionId}, retrying without proxy:`,
218
+ result.usage?.message
219
+ );
220
+ try {
221
+ result = await fetchUsageWithContext(null);
222
+ } catch (directError: any) {
223
+ console.error("[Usage API] Direct fetch also failed:", directError?.message);
224
+ throw directError;
225
+ }
226
+ }
157
227
 
158
- // Fetch usage from provider API, wrapped in proxy context
159
- const usage = await runWithProxyContext(proxyInfo?.proxy || null, () =>
160
- getUsageForProvider(connection)
161
- );
228
+ const { usage, refreshed } = result;
162
229
 
163
230
  // Populate quota cache for quota-aware account selection
164
231
  if (isRecord(usage?.quotas)) {
@@ -655,7 +655,7 @@ export async function validateProviderApiKey({ provider, apiKey, providerSpecifi
655
655
  // LongCat AI — does not expose /v1/models; validate via chat completions directly (#592)
656
656
  longcat: async ({ apiKey }: any) => {
657
657
  try {
658
- const res = await fetch("https://longcat.chat/api/v1/chat/completions", {
658
+ const res = await fetch("https://api.longcat.chat/openai/v1/chat/completions", {
659
659
  method: "POST",
660
660
  headers: buildBearerHeaders(apiKey),
661
661
  body: JSON.stringify({
@@ -59,13 +59,15 @@ test("contract: /api/v1/models returns OpenAI-compatible model shape", async ()
59
59
 
60
60
  assert.equal(body.object, "list");
61
61
  assert.ok(Array.isArray(body.data));
62
- assert.ok(body.data.length > 0, "models list should not be empty");
63
62
 
64
- const first = body.data[0];
65
- assert.equal(typeof first.id, "string");
66
- assert.equal(first.object, "model");
67
- assert.equal(typeof first.created, "number");
68
- assert.equal(typeof first.owned_by, "string");
63
+ // In CI environments without provider connections, models list may be empty — skip shape check
64
+ if (body.data.length > 0) {
65
+ const first = body.data[0];
66
+ assert.equal(typeof first.id, "string");
67
+ assert.equal(first.object, "model");
68
+ assert.equal(typeof first.created, "number");
69
+ assert.equal(typeof first.owned_by, "string");
70
+ }
69
71
  });
70
72
 
71
73
  test("contract: /api/v1/embeddings GET returns embedding model listing shape", async () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omniroute",
3
- "version": "3.0.5",
3
+ "version": "3.0.7",
4
4
  "description": "Smart AI Router with auto fallback — route to FREE & cheap models, zero downtime. Works with Cursor, Cline, Claude Desktop, Codex, and any OpenAI-compatible tool.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,6 +0,0 @@
1
- module.exports=[918622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},556704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},832319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},270406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},193695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},442315,(e,t,r)=>{"use strict";t.exports=e.r(918622)},347540,(e,t,r)=>{"use strict";t.exports=e.r(442315).vendored["react-rsc"].React},819481,(e,t,r)=>{"use strict";var n=Object.defineProperty,i=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,a=Object.prototype.hasOwnProperty,s={},c={RequestCookies:()=>g,ResponseCookies:()=>y,parseCookie:()=>u,parseSetCookie:()=>p,stringifyCookie:()=>d};for(var l in c)n(s,l,{get:c[l],enumerable:!0});function d(e){var t;let r=["path"in e&&e.path&&`Path=${e.path}`,"expires"in e&&(e.expires||0===e.expires)&&`Expires=${("number"==typeof e.expires?new Date(e.expires):e.expires).toUTCString()}`,"maxAge"in e&&"number"==typeof e.maxAge&&`Max-Age=${e.maxAge}`,"domain"in e&&e.domain&&`Domain=${e.domain}`,"secure"in e&&e.secure&&"Secure","httpOnly"in e&&e.httpOnly&&"HttpOnly","sameSite"in e&&e.sameSite&&`SameSite=${e.sameSite}`,"partitioned"in e&&e.partitioned&&"Partitioned","priority"in e&&e.priority&&`Priority=${e.priority}`].filter(Boolean),n=`${e.name}=${encodeURIComponent(null!=(t=e.value)?t:"")}`;return 0===r.length?n:`${n}; ${r.join("; ")}`}function u(e){let t=new Map;for(let r of e.split(/; */)){if(!r)continue;let e=r.indexOf("=");if(-1===e){t.set(r,"true");continue}let[n,i]=[r.slice(0,e),r.slice(e+1)];try{t.set(n,decodeURIComponent(null!=i?i:"true"))}catch{}}return t}function p(e){if(!e)return;let[[t,r],...n]=u(e),{domain:i,expires:o,httponly:a,maxage:s,path:c,samesite:l,secure:d,partitioned:p,priority:g}=Object.fromEntries(n.map(([e,t])=>[e.toLowerCase().replace(/-/g,""),t]));{var y,m,x={name:t,value:decodeURIComponent(r),domain:i,...o&&{expires:new Date(o)},...a&&{httpOnly:!0},..."string"==typeof s&&{maxAge:Number(s)},path:c,...l&&{sameSite:h.includes(y=(y=l).toLowerCase())?y:void 0},...d&&{secure:!0},...g&&{priority:f.includes(m=(m=g).toLowerCase())?m:void 0},...p&&{partitioned:!0}};let e={};for(let t in x)x[t]&&(e[t]=x[t]);return e}}t.exports=((e,t,r,s)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let r of o(t))a.call(e,r)||void 0===r||n(e,r,{get:()=>t[r],enumerable:!(s=i(t,r))||s.enumerable});return e})(n({},"__esModule",{value:!0}),s);var h=["strict","lax","none"],f=["low","medium","high"],g=class{constructor(e){this._parsed=new Map,this._headers=e;const t=e.get("cookie");if(t)for(const[e,r]of u(t))this._parsed.set(e,{name:e,value:r})}[Symbol.iterator](){return this._parsed[Symbol.iterator]()}get size(){return this._parsed.size}get(...e){let t="string"==typeof e[0]?e[0]:e[0].name;return this._parsed.get(t)}getAll(...e){var t;let r=Array.from(this._parsed);if(!e.length)return r.map(([e,t])=>t);let n="string"==typeof e[0]?e[0]:null==(t=e[0])?void 0:t.name;return r.filter(([e])=>e===n).map(([e,t])=>t)}has(e){return this._parsed.has(e)}set(...e){let[t,r]=1===e.length?[e[0].name,e[0].value]:e,n=this._parsed;return n.set(t,{name:t,value:r}),this._headers.set("cookie",Array.from(n).map(([e,t])=>d(t)).join("; ")),this}delete(e){let t=this._parsed,r=Array.isArray(e)?e.map(e=>t.delete(e)):t.delete(e);return this._headers.set("cookie",Array.from(t).map(([e,t])=>d(t)).join("; ")),r}clear(){return this.delete(Array.from(this._parsed.keys())),this}[Symbol.for("edge-runtime.inspect.custom")](){return`RequestCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`}toString(){return[...this._parsed.values()].map(e=>`${e.name}=${encodeURIComponent(e.value)}`).join("; ")}},y=class{constructor(e){var t,r,n;this._parsed=new Map,this._headers=e;const i=null!=(n=null!=(r=null==(t=e.getSetCookie)?void 0:t.call(e))?r:e.get("set-cookie"))?n:[];for(const e of Array.isArray(i)?i:function(e){if(!e)return[];var t,r,n,i,o,a=[],s=0;function c(){for(;s<e.length&&/\s/.test(e.charAt(s));)s+=1;return s<e.length}for(;s<e.length;){for(t=s,o=!1;c();)if(","===(r=e.charAt(s))){for(n=s,s+=1,c(),i=s;s<e.length&&"="!==(r=e.charAt(s))&&";"!==r&&","!==r;)s+=1;s<e.length&&"="===e.charAt(s)?(o=!0,s=i,a.push(e.substring(t,n)),t=s):s=n+1}else s+=1;(!o||s>=e.length)&&a.push(e.substring(t,e.length))}return a}(i)){const t=p(e);t&&this._parsed.set(t.name,t)}}get(...e){let t="string"==typeof e[0]?e[0]:e[0].name;return this._parsed.get(t)}getAll(...e){var t;let r=Array.from(this._parsed.values());if(!e.length)return r;let n="string"==typeof e[0]?e[0]:null==(t=e[0])?void 0:t.name;return r.filter(e=>e.name===n)}has(e){return this._parsed.has(e)}set(...e){let[t,r,n]=1===e.length?[e[0].name,e[0].value,e[0]]:e,i=this._parsed;return i.set(t,function(e={name:"",value:""}){return"number"==typeof e.expires&&(e.expires=new Date(e.expires)),e.maxAge&&(e.expires=new Date(Date.now()+1e3*e.maxAge)),(null===e.path||void 0===e.path)&&(e.path="/"),e}({name:t,value:r,...n})),function(e,t){for(let[,r]of(t.delete("set-cookie"),e)){let e=d(r);t.append("set-cookie",e)}}(i,this._headers),this}delete(...e){let[t,r]="string"==typeof e[0]?[e[0]]:[e[0].name,e[0]];return this.set({...r,name:t,value:"",expires:new Date(0)})}[Symbol.for("edge-runtime.inspect.custom")](){return`ResponseCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`}toString(){return[...this._parsed.values()].map(d).join("; ")}}},792509,(e,t,r)=>{t.exports=e.x("url",()=>require("url"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},785148,(e,t,r)=>{t.exports=e.x("better-sqlite3",()=>require("better-sqlite3"))},256770,e=>{"use strict";var t=e.i(814747),r=e.i(446786);let n="omniroute";function i(){try{return r.default.homedir()}catch{return process.cwd()}}function o(e){if("string"!=typeof e)return null;let r=e.trim();return r?t.default.resolve(r):null}function a(){return t.default.join(i(),`.${n}`)}function s(){i();let e=o(process.env.XDG_CONFIG_HOME);return e?t.default.join(e,n):a()}function c({isCloud:e=!1}={}){if(e)return"/tmp";let t=o(process.env.DATA_DIR);return t||s()}function l(e,r){return!!e&&!!r&&t.default.resolve(e)===t.default.resolve(r)}e.s(["APP_NAME",0,n,"getDefaultDataDir",()=>s,"getLegacyDotDataDir",()=>a,"isSamePath",()=>l,"resolveDataDir",()=>c])},439951,e=>{"use strict";var t=e.i(157763);function r(){try{return(0,t.getDbInstance)()}catch{return null}}function n(e){let t=r();if(t)try{t.prepare(`
2
- INSERT INTO audit_log (action, actor, target, details, ip_address)
3
- VALUES (?, ?, ?, ?, ?)
4
- `).run(e.action,e.actor||"system",e.target||null,"object"==typeof e.details?JSON.stringify(e.details):e.details||null,e.ipAddress||null)}catch{}}function i(e={}){let t=r();if(!t)return[];let n=[],o=[];e.action&&(n.push("action = ?"),o.push(e.action)),e.actor&&(n.push("actor = ?"),o.push(e.actor));let a=n.length>0?`WHERE ${n.join(" AND ")}`:"",s=e.limit||100,c=e.offset||0;return t.prepare(`SELECT * FROM audit_log ${a} ORDER BY timestamp DESC LIMIT ? OFFSET ?`).all(...o,s,c).map(e=>({...e,details:e.details?JSON.parse(String(e.details)):null}))}parseInt(process.env.LOG_RETENTION_DAYS||"90",10);let o=new Set,a=new Map,s=!1,c=!1;for(let e of(process.env.NO_LOG_API_KEY_IDS||"").split(",").map(e=>e.trim()).filter(Boolean))o.add(e);function l(e,t){t?o.add(e):o.delete(e),a.set(e,{value:t,timestamp:Date.now()})}function d(e){if(!e)return!1;if(o.has(e))return!0;let t=function(e){let t=r();if(!t||!e||!function(e){if(s)return c;try{c=e.prepare("PRAGMA table_info(api_keys)").all().some(e=>"no_log"===e.name)}catch{c=!1}return s=!0,c}(t))return!1;let n=a.get(e);if(n&&Date.now()-n.timestamp<3e4)return n.value;try{let r=t.prepare("SELECT no_log FROM api_keys WHERE id = ?").get(e),n=!!(r&&1===Number(r.no_log));return a.set(e,{value:n,timestamp:Date.now()}),n}catch{return!1}}(e);return t&&o.add(e),t}e.s(["getAuditLog",()=>i,"isNoLog",()=>d,"logAuditEvent",()=>n,"setNoLog",()=>l])},663370,632802,477468,e=>{"use strict";let t=new TextEncoder,r=new TextDecoder;function n(...e){let t=new Uint8Array(e.reduce((e,{length:t})=>e+t,0)),r=0;for(let n of e)t.set(n,r),r+=n.length;return t}function i(e){let t=new Uint8Array(e.length);for(let r=0;r<e.length;r++){let n=e.charCodeAt(r);if(n>127)throw TypeError("non-ASCII string encountered in encode()");t[r]=n}return t}function o(e){if(Uint8Array.prototype.toBase64)return e.toBase64();let t=[];for(let r=0;r<e.length;r+=32768)t.push(String.fromCharCode.apply(null,e.subarray(r,r+32768)));return btoa(t.join(""))}function a(e){if(Uint8Array.fromBase64)return Uint8Array.fromBase64(e);let t=atob(e),r=new Uint8Array(t.length);for(let e=0;e<t.length;e++)r[e]=t.charCodeAt(e);return r}function s(e){if(Uint8Array.fromBase64)return Uint8Array.fromBase64("string"==typeof e?e:r.decode(e),{alphabet:"base64url"});let t=e;t instanceof Uint8Array&&(t=r.decode(t)),t=t.replace(/-/g,"+").replace(/_/g,"/");try{return a(t)}catch{throw TypeError("The input to be decoded is not correctly encoded.")}}function c(e){let r=e;return("string"==typeof r&&(r=t.encode(r)),Uint8Array.prototype.toBase64)?r.toBase64({alphabet:"base64url",omitPadding:!0}):o(r).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}e.s(["concat",()=>n,"decoder",0,r,"encode",()=>i,"encoder",0,t],632802),e.s(["decodeBase64",()=>a,"encodeBase64",()=>o],477468),e.s(["decode",()=>s,"encode",()=>c],663370)},865466,e=>{"use strict";class t extends Error{static code="ERR_JOSE_GENERIC";code="ERR_JOSE_GENERIC";constructor(e,t){super(e,t),this.name=this.constructor.name,Error.captureStackTrace?.(this,this.constructor)}}class r extends t{static code="ERR_JWT_CLAIM_VALIDATION_FAILED";code="ERR_JWT_CLAIM_VALIDATION_FAILED";claim;reason;payload;constructor(e,t,r="unspecified",n="unspecified"){super(e,{cause:{claim:r,reason:n,payload:t}}),this.claim=r,this.reason=n,this.payload=t}}class n extends t{static code="ERR_JWT_EXPIRED";code="ERR_JWT_EXPIRED";claim;reason;payload;constructor(e,t,r="unspecified",n="unspecified"){super(e,{cause:{claim:r,reason:n,payload:t}}),this.claim=r,this.reason=n,this.payload=t}}class i extends t{static code="ERR_JOSE_ALG_NOT_ALLOWED";code="ERR_JOSE_ALG_NOT_ALLOWED"}class o extends t{static code="ERR_JOSE_NOT_SUPPORTED";code="ERR_JOSE_NOT_SUPPORTED"}class a extends t{static code="ERR_JWS_INVALID";code="ERR_JWS_INVALID"}class s extends t{static code="ERR_JWT_INVALID";code="ERR_JWT_INVALID"}class c extends t{[Symbol.asyncIterator];static code="ERR_JWKS_MULTIPLE_MATCHING_KEYS";code="ERR_JWKS_MULTIPLE_MATCHING_KEYS";constructor(e="multiple matching keys found in the JSON Web Key Set",t){super(e,t)}}class l extends t{static code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED";code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED";constructor(e="signature verification failed",t){super(e,t)}}e.s(["JOSEAlgNotAllowed",()=>i,"JOSENotSupported",()=>o,"JWSInvalid",()=>a,"JWSSignatureVerificationFailed",()=>l,"JWTClaimValidationFailed",()=>r,"JWTExpired",()=>n,"JWTInvalid",()=>s])},177278,e=>{"use strict";function t(e){if("object"!=typeof e||null===e||"[object Object]"!==Object.prototype.toString.call(e))return!1;if(null===Object.getPrototypeOf(e))return!0;let t=e;for(;null!==Object.getPrototypeOf(t);)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function r(...e){let t,n=e.filter(Boolean);if(0===n.length||1===n.length)return!0;for(let e of n){let r=Object.keys(e);if(!t||0===t.size){t=new Set(r);continue}for(let e of r){if(t.has(e))return!1;t.add(e)}}return!0}e.s(["isDisjoint",()=>r,"isJWK",0,e=>t(e)&&"string"==typeof e.kty,"isObject",()=>t,"isPrivateJWK",0,e=>"oct"!==e.kty&&("AKP"===e.kty&&"string"==typeof e.priv||"string"==typeof e.d),"isPublicJWK",0,e=>"oct"!==e.kty&&void 0===e.d&&void 0===e.priv,"isSecretJWK",0,e=>"oct"===e.kty&&"string"==typeof e.k])},233405,(e,t,r)=>{t.exports=e.x("child_process",()=>require("child_process"))},250875,e=>{"use strict";var t=e.i(233405),r=e.i(522734);async function n(i=null){let o=i||process.env.MACHINE_ID_SALT||"endpoint-proxy-salt";try{let n=function(){try{let e=process.env.SystemRoot||process.env.windir||"C:\\Windows",n=`${e}\\System32\\REG.exe`;if((0,r.existsSync)(n)){let e=(0,t.execFileSync)(n,["QUERY","HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography","/v","MachineGuid"],{encoding:"utf8",timeout:5e3}),r=e.split("REG_SZ")[1]?.replace(/\r+|\n+|\s+/gi,"")?.toLowerCase();if(r&&r.length>8)return r}}catch{}try{let e=(0,t.execSync)("ioreg -rd1 -c IOPlatformExpertDevice",{encoding:"utf8",timeout:5e3});if(e.includes("IOPlatformUUID")){let t=e.split("IOPlatformUUID")[1]?.split("\n")[0]?.replace(/=|\s+|"/gi,"")?.toLowerCase();if(t&&t.length>8)return t}}catch{}try{for(let e of["/etc/machine-id","/var/lib/dbus/machine-id"])if((0,r.existsSync)(e)){let t=(0,r.readFileSync)(e,"utf8").trim().toLowerCase();if(t.length>8)return t}}catch{}try{let e=(0,t.execSync)("hostname",{encoding:"utf8",timeout:5e3}).trim().toLowerCase();if(e)return e}catch{}try{return e.r(446786).hostname().toLowerCase()}catch{}return"unknown-machine"}();return(await e.A(485685)).createHash("sha256").update(n+o).digest("hex").substring(0,16)}catch(t){console.log("Error getting machine ID:",t);try{return(await e.A(485685)).randomUUID()}catch{return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){let t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)})}}}e.s(["getConsistentMachineId",()=>n])},639173,e=>{"use strict";e.i(245272);var t=e.i(385498),r=e.i(186920),n=e.i(151205),i=e.i(125852);let o=process.env.CLOUD_URL||process.env.NEXT_PUBLIC_CLOUD_URL,a=Number(process.env.CLOUD_SYNC_TIMEOUT_MS||12e3);function s(e){return e&&"object"==typeof e&&!Array.isArray(e)?e:{}}function c(e){if("string"==typeof e||"number"==typeof e||e instanceof Date){let t=new Date(e).getTime();return Number.isFinite(t)?t:0}return 0}async function l(e,t={},r=a){let n=new AbortController,i=setTimeout(()=>n.abort(),r);try{return await fetch(e,{...t,signal:n.signal})}finally{clearTimeout(i)}}async function d(e,a=null){let s;if(!o)return{error:"NEXT_PUBLIC_CLOUD_URL is not configured"};let c=await (0,t.getProviderConnections)(),p=await (0,r.getModelAliases)(),h=await (0,n.getCombos)(),f=await (0,i.getApiKeys)();try{s=await l(`${o}/sync/${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({providers:c,modelAliases:p,combos:h,apiKeys:f})})}catch(e){return{error:e?.name==="AbortError"?"Cloud sync timeout":"Cloud sync request failed"}}if(!s.ok){let e=await s.text(),t=e.length>200?e.slice(0,200)+"…":e;return console.log(`Cloud sync failed (${s.status}):`,t),{error:"Cloud sync failed"}}let g=await s.json();g.data&&g.data.providers&&await u(g.data.providers);let y={success:!0,message:"Synced successfully",changes:g.changes};return a&&(y.createdKey=a),y}async function u(e){let r=s(e);for(let e of(await (0,t.getProviderConnections)())){var n;let i=s(e),o="string"==typeof(n=i.id)&&n.trim().length>0?n:null;if(!o)continue;let a=s(r[o]);if(0!==Object.keys(a).length){if(c(a.updatedAt)>c(i.updatedAt)){let e={accessToken:a.accessToken,refreshToken:a.refreshToken,expiresAt:a.expiresAt,expiresIn:a.expiresIn,providerSpecificData:a.providerSpecificData||i.providerSpecificData,testStatus:a.status||"active",lastError:a.lastError,lastErrorAt:a.lastErrorAt,errorCode:a.errorCode,rateLimitedUntil:a.rateLimitedUntil,updatedAt:a.updatedAt};await (0,t.updateProviderConnection)(o,e)}}}}e.s(["CLOUD_URL",()=>o,"fetchWithTimeout",()=>l,"syncToCloud",()=>d])},496727,e=>{"use strict";e.s(["FORMATS",0,{OPENAI:"openai",OPENAI_RESPONSES:"openai-responses",OPENAI_RESPONSE:"openai-response",CLAUDE:"claude",GEMINI:"gemini",GEMINI_CLI:"gemini-cli",CODEX:"codex",ANTIGRAVITY:"antigravity",KIRO:"kiro",CURSOR:"cursor"}])},827957,e=>{"use strict";var t=e.i(663370),r=e.i(293233),n=e.i(177278),i=e.i(865466),o=e.i(632802),a=e.i(48215),s=e.i(252665),c=e.i(18083),l=e.i(913658);class d{#e;#t;#r;constructor(e){if(!(e instanceof Uint8Array))throw TypeError("payload must be an instance of Uint8Array");this.#e=e}setProtectedHeader(e){return(0,l.assertNotSet)(this.#t,"setProtectedHeader"),this.#t=e,this}setUnprotectedHeader(e){return(0,l.assertNotSet)(this.#r,"setUnprotectedHeader"),this.#r=e,this}async sign(e,l){let d,u,p,h;if(!this.#t&&!this.#r)throw new i.JWSInvalid("either setProtectedHeader or setUnprotectedHeader must be called before #sign()");if(!(0,n.isDisjoint)(this.#t,this.#r))throw new i.JWSInvalid("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");let f={...this.#t,...this.#r},g=(0,s.validateCrit)(i.JWSInvalid,new Map([["b64",!0]]),l?.crit,this.#t,f),y=!0;if(g.has("b64")&&"boolean"!=typeof(y=this.#t.b64))throw new i.JWSInvalid('The "b64" (base64url-encode payload) Header Parameter must be a boolean');let{alg:m}=f;if("string"!=typeof m||!m)throw new i.JWSInvalid('JWS "alg" (Algorithm) Header Parameter missing or invalid');(0,a.checkKeyType)(m,e,"sign"),y?(d=(0,t.encode)(this.#e),u=(0,o.encode)(d)):(u=this.#e,d=""),this.#t?(p=(0,t.encode)(JSON.stringify(this.#t)),h=(0,o.encode)(p)):(p="",h=new Uint8Array);let x=(0,o.concat)(h,(0,o.encode)("."),u),E=await (0,c.normalizeKey)(e,m),v=await (0,r.sign)(m,E,x),_={signature:(0,t.encode)(v),payload:d};return this.#r&&(_.header=this.#r),this.#t&&(_.protected=p),_}}class u{#n;constructor(e){this.#n=new d(e)}setProtectedHeader(e){return this.#n.setProtectedHeader(e),this}async sign(e,t){let r=await this.#n.sign(e,t);if(void 0===r.payload)throw TypeError("use the flattened module for creating JWS with b64: false");return`${r.protected}.${r.payload}.${r.signature}`}}var p=e.i(224472);class h{#t;#i;constructor(e={}){this.#i=new p.JWTClaimsBuilder(e)}setIssuer(e){return this.#i.iss=e,this}setSubject(e){return this.#i.sub=e,this}setAudience(e){return this.#i.aud=e,this}setJti(e){return this.#i.jti=e,this}setNotBefore(e){return this.#i.nbf=e,this}setExpirationTime(e){return this.#i.exp=e,this}setIssuedAt(e){return this.#i.iat=e,this}setProtectedHeader(e){return this.#t=e,this}async sign(e,t){let r=new u(this.#i.data());if(r.setProtectedHeader(this.#t),Array.isArray(this.#t?.crit)&&this.#t.crit.includes("b64")&&!1===this.#t.b64)throw new i.JWTInvalid("JWTs MUST NOT use unencoded payload");return r.sign(e,t)}}e.s(["SignJWT",()=>h],827957)},982406,e=>{"use strict";var t=e.i(250875);async function r(){return await (0,t.getConsistentMachineId)()}e.s(["getMachineId",()=>r])},307488,e=>e.a(async(t,r)=>{try{e.i(245272);var n=e.i(385498),i=e.i(548941),o=e.i(982406),a=e.i(312215),s=e.i(6751),c=e.i(639173),l=e.i(444675),d=e.i(25687),u=t([s]);async function p(){try{let e=await (0,o.getMachineId)();if(!e)return;await (0,c.syncToCloud)(e)}catch(e){console.error("[Usage API] Error syncing to cloud:",e)}}async function h(e){let t=(0,s.getExecutor)(e.provider),r={accessToken:e.accessToken,refreshToken:e.refreshToken,expiresAt:e.tokenExpiresAt,providerSpecificData:e.providerSpecificData,copilotToken:e.providerSpecificData?.copilotToken,copilotTokenExpiresAt:e.providerSpecificData?.copilotTokenExpiresAt};if(!t.needsRefresh(r))return{connection:e,refreshed:!1};let i=await t.refreshCredentials(r,console);if(!i){if("github"===e.provider&&e.accessToken)return{connection:e,refreshed:!1};throw Error("Failed to refresh credentials. Please re-authorize the connection.")}let o={updatedAt:new Date().toISOString()};return i.accessToken&&(o.accessToken=i.accessToken),i.refreshToken&&(o.refreshToken=i.refreshToken),i.expiresIn?o.tokenExpiresAt=new Date(Date.now()+1e3*i.expiresIn).toISOString():i.expiresAt&&(o.tokenExpiresAt=i.expiresAt),(i.copilotToken||i.copilotTokenExpiresAt)&&(o.providerSpecificData={...e.providerSpecificData,copilotToken:i.copilotToken,copilotTokenExpiresAt:i.copilotTokenExpiresAt}),await (0,n.updateProviderConnection)(e.id,o),{connection:{...e,...o},refreshed:!0}}async function f(e,{params:t}){try{var r;let{connectionId:e}=await t,o=await (0,n.getProviderConnectionById)(e);if(!o)return Response.json({error:"Connection not found"},{status:404});if("oauth"!==o.authType)return Response.json({message:"Usage not available for API key connections"});try{let e=await h(o);o=e.connection,e.refreshed&&await p()}catch(e){return console.error("[Usage API] Credential refresh failed:",e),Response.json({error:`Credential refresh failed: ${e.message}`},{status:401})}let s=await (0,i.resolveProxyForConnection)(e),c=await (0,l.runWithProxyContext)(s?.proxy||null,()=>(0,a.getUsageForProvider)(o));r=c?.quotas,null===r||"object"!=typeof r||Array.isArray(r)||(0,d.setQuotaCache)(e,o.provider,c.quotas);let u="string"==typeof c?.message?c.message.toLowerCase():"";if((u.includes("token expired")||u.includes("access denied")||u.includes("re-authenticate")||u.includes("unauthorized"))&&"expired"!==o.testStatus)try{await (0,n.updateProviderConnection)(o.id,{testStatus:"expired",lastErrorType:"token_expired",lastErrorAt:new Date().toISOString()})}catch(e){console.error("[Usage API] Failed to sync expired status to DB:",e)}return Response.json(c)}catch(e){return console.error("[Usage API] Error fetching usage:",e),console.error("[Usage API] Error stack:",e.stack),Response.json({error:e.message},{status:500})}}[s]=u.then?(await u)():u,e.s(["GET",()=>f]),r()}catch(e){r(e)}},!1),589356,e=>e.a(async(t,r)=>{try{var n=e.i(747909),i=e.i(174017),o=e.i(996250),a=e.i(759756),s=e.i(561916),c=e.i(174677),l=e.i(869741),d=e.i(316795),u=e.i(487718),p=e.i(995169),h=e.i(47587),f=e.i(666012),g=e.i(570101),y=e.i(626937),m=e.i(10372),x=e.i(193695);e.i(52474);var E=e.i(600220),v=e.i(307488),_=t([v]);[v]=_.then?(await _)():_;let R=new n.AppRouteRouteModule({definition:{kind:i.RouteKind.APP_ROUTE,page:"/api/usage/[connectionId]/route",pathname:"/api/usage/[connectionId]",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/usage/[connectionId]/route.ts",nextConfigOutput:"standalone",userland:v}),{workAsyncStorage:S,workUnitAsyncStorage:I,serverHooks:T}=R;function A(){return(0,o.patchFetch)({workAsyncStorage:S,workUnitAsyncStorage:I})}async function w(e,t,r){R.isDev&&(0,a.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let n="/api/usage/[connectionId]/route";n=n.replace(/\/index$/,"")||"/";let o=await R.prepare(e,t,{srcPage:n,multiZoneDraftMode:!1});if(!o)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:v,params:_,nextConfig:A,parsedUrl:w,isDraftMode:S,prerenderManifest:I,routerServerContext:T,isOnDemandRevalidate:C,revalidateOnlyGenerated:b,resolvedPathname:O,clientReferenceManifest:P,serverActionsManifest:D}=o,k=(0,l.normalizeAppPath)(n),N=!!(I.dynamicRoutes[k]||I.routes[O]),U=async()=>((null==T?void 0:T.render404)?await T.render404(e,t,w,!1):t.end("This page could not be found"),null);if(N&&!S){let e=!!I.routes[O],t=I.dynamicRoutes[k];if(t&&!1===t.fallback&&!e){if(A.experimental.adapterPath)return await U();throw new x.NoFallbackError}}let j=null;!N||R.isDev||S||(j=O,j="/index"===j?"/":j);let H=!0===R.isDev||!N,L=N&&!H;D&&P&&(0,c.setManifestsSingleton)({page:n,clientReferenceManifest:P,serverActionsManifest:D});let J=e.method||"GET",M=(0,s.getTracer)(),W=M.getActiveScopeSpan(),$={params:_,prerenderManifest:I,renderOpts:{experimental:{authInterrupts:!!A.experimental.authInterrupts},cacheComponents:!!A.cacheComponents,supportsDynamicResponse:H,incrementalCache:(0,a.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:A.cacheLife,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,n,i)=>R.onRequestError(e,t,n,i,T)},sharedContext:{buildId:v}},q=new d.NodeNextRequest(e),F=new d.NodeNextResponse(t),K=u.NextRequestAdapter.fromNodeNextRequest(q,(0,u.signalFromNodeResponse)(t));try{let o=async e=>R.handle(K,$).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=M.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let i=r.get("next.route");if(i){let t=`${J} ${i}`;e.setAttributes({"next.route":i,"http.route":i,"next.span_name":t}),e.updateName(t)}else e.updateName(`${J} ${n}`)}),c=!!(0,a.getRequestMeta)(e,"minimalMode"),l=async a=>{var s,l;let d=async({previousCacheEntry:i})=>{try{if(!c&&C&&b&&!i)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await o(a);e.fetchMetrics=$.renderOpts.fetchMetrics;let s=$.renderOpts.pendingWaitUntil;s&&r.waitUntil&&(r.waitUntil(s),s=void 0);let l=$.renderOpts.collectedTags;if(!N)return await (0,f.sendResponse)(q,F,n,$.renderOpts.pendingWaitUntil),null;{let e=await n.blob(),t=(0,g.toNodeOutgoingHttpHeaders)(n.headers);l&&(t[m.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==$.renderOpts.collectedRevalidate&&!($.renderOpts.collectedRevalidate>=m.INFINITE_CACHE)&&$.renderOpts.collectedRevalidate,i=void 0===$.renderOpts.collectedExpire||$.renderOpts.collectedExpire>=m.INFINITE_CACHE?void 0:$.renderOpts.collectedExpire;return{value:{kind:E.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:i}}}}catch(t){throw(null==i?void 0:i.isStale)&&await R.onRequestError(e,t,{routerKind:"App Router",routePath:n,routeType:"route",revalidateReason:(0,h.getRevalidateReason)({isStaticGeneration:L,isOnDemandRevalidate:C})},!1,T),t}},u=await R.handleResponse({req:e,nextConfig:A,cacheKey:j,routeKind:i.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:I,isRoutePPREnabled:!1,isOnDemandRevalidate:C,revalidateOnlyGenerated:b,responseGenerator:d,waitUntil:r.waitUntil,isMinimalMode:c});if(!N)return null;if((null==u||null==(s=u.value)?void 0:s.kind)!==E.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==u||null==(l=u.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});c||t.setHeader("x-nextjs-cache",C?"REVALIDATED":u.isMiss?"MISS":u.isStale?"STALE":"HIT"),S&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let p=(0,g.fromNodeOutgoingHttpHeaders)(u.value.headers);return c&&N||p.delete(m.NEXT_CACHE_TAGS_HEADER),!u.cacheControl||t.getHeader("Cache-Control")||p.get("Cache-Control")||p.set("Cache-Control",(0,y.getCacheControlHeader)(u.cacheControl)),await (0,f.sendResponse)(q,F,new Response(u.value.body,{headers:p,status:u.value.status||200})),null};W?await l(W):await M.withPropagatedContext(e.headers,()=>M.trace(p.BaseServerSpan.handleRequest,{spanName:`${J} ${n}`,kind:s.SpanKind.SERVER,attributes:{"http.method":J,"http.target":e.url}},l))}catch(t){if(t instanceof x.NoFallbackError||await R.onRequestError(e,t,{routerKind:"App Router",routePath:k,routeType:"route",revalidateReason:(0,h.getRevalidateReason)({isStaticGeneration:L,isOnDemandRevalidate:C})},!1,T),N)throw t;return await (0,f.sendResponse)(q,F,new Response(null,{status:500})),null}}e.s(["handler",()=>w,"patchFetch",()=>A,"routeModule",()=>R,"serverHooks",()=>T,"workAsyncStorage",()=>S,"workUnitAsyncStorage",()=>I]),r()}catch(e){r(e)}},!1),606102,e=>{e.v(e=>Promise.resolve().then(()=>e(548941)))},789543,e=>{e.v(e=>Promise.resolve().then(()=>e(385498)))},579042,e=>{e.v(t=>Promise.all(["server/chunks/src_shared_utils_apiKey_ts_fa113e09._.js"].map(t=>e.l(t))).then(()=>t(65448)))},49794,e=>{e.v(t=>Promise.all(["server/chunks/src_shared_constants_pricing_ts_65de0558._.js"].map(t=>e.l(t))).then(()=>t(404503)))},386305,e=>{e.v(e=>Promise.resolve().then(()=>e(878947)))},485685,e=>{e.v(e=>Promise.resolve().then(()=>e(254799)))},605589,e=>{e.v(t=>Promise.all(["server/chunks/src_lib_localDb_ts_83220848._.js"].map(t=>e.l(t))).then(()=>t(969738)))},901259,e=>{e.v(t=>Promise.all(["server/chunks/[externals]_http2_740a89f0._.js"].map(t=>e.l(t))).then(()=>t(925328)))}];
5
-
6
- //# sourceMappingURL=%5Broot-of-the-server%5D__5dcab57b._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[918622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},556704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},832319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},270406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},193695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},442315,(e,t,r)=>{"use strict";t.exports=e.r(918622)},347540,(e,t,r)=>{"use strict";t.exports=e.r(442315).vendored["react-rsc"].React},819481,(e,t,r)=>{"use strict";var s=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,a=Object.prototype.hasOwnProperty,i={},l={RequestCookies:()=>m,ResponseCookies:()=>y,parseCookie:()=>d,parseSetCookie:()=>c,stringifyCookie:()=>u};for(var p in l)s(i,p,{get:l[p],enumerable:!0});function u(e){var t;let r=["path"in e&&e.path&&`Path=${e.path}`,"expires"in e&&(e.expires||0===e.expires)&&`Expires=${("number"==typeof e.expires?new Date(e.expires):e.expires).toUTCString()}`,"maxAge"in e&&"number"==typeof e.maxAge&&`Max-Age=${e.maxAge}`,"domain"in e&&e.domain&&`Domain=${e.domain}`,"secure"in e&&e.secure&&"Secure","httpOnly"in e&&e.httpOnly&&"HttpOnly","sameSite"in e&&e.sameSite&&`SameSite=${e.sameSite}`,"partitioned"in e&&e.partitioned&&"Partitioned","priority"in e&&e.priority&&`Priority=${e.priority}`].filter(Boolean),s=`${e.name}=${encodeURIComponent(null!=(t=e.value)?t:"")}`;return 0===r.length?s:`${s}; ${r.join("; ")}`}function d(e){let t=new Map;for(let r of e.split(/; */)){if(!r)continue;let e=r.indexOf("=");if(-1===e){t.set(r,"true");continue}let[s,n]=[r.slice(0,e),r.slice(e+1)];try{t.set(s,decodeURIComponent(null!=n?n:"true"))}catch{}}return t}function c(e){if(!e)return;let[[t,r],...s]=d(e),{domain:n,expires:o,httponly:a,maxage:i,path:l,samesite:p,secure:u,partitioned:c,priority:m}=Object.fromEntries(s.map(([e,t])=>[e.toLowerCase().replace(/-/g,""),t]));{var y,f,g={name:t,value:decodeURIComponent(r),domain:n,...o&&{expires:new Date(o)},...a&&{httpOnly:!0},..."string"==typeof i&&{maxAge:Number(i)},path:l,...p&&{sameSite:h.includes(y=(y=p).toLowerCase())?y:void 0},...u&&{secure:!0},...m&&{priority:x.includes(f=(f=m).toLowerCase())?f:void 0},...c&&{partitioned:!0}};let e={};for(let t in g)g[t]&&(e[t]=g[t]);return e}}t.exports=((e,t,r,i)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let r of o(t))a.call(e,r)||void 0===r||s(e,r,{get:()=>t[r],enumerable:!(i=n(t,r))||i.enumerable});return e})(s({},"__esModule",{value:!0}),i);var h=["strict","lax","none"],x=["low","medium","high"],m=class{constructor(e){this._parsed=new Map,this._headers=e;const t=e.get("cookie");if(t)for(const[e,r]of d(t))this._parsed.set(e,{name:e,value:r})}[Symbol.iterator](){return this._parsed[Symbol.iterator]()}get size(){return this._parsed.size}get(...e){let t="string"==typeof e[0]?e[0]:e[0].name;return this._parsed.get(t)}getAll(...e){var t;let r=Array.from(this._parsed);if(!e.length)return r.map(([e,t])=>t);let s="string"==typeof e[0]?e[0]:null==(t=e[0])?void 0:t.name;return r.filter(([e])=>e===s).map(([e,t])=>t)}has(e){return this._parsed.has(e)}set(...e){let[t,r]=1===e.length?[e[0].name,e[0].value]:e,s=this._parsed;return s.set(t,{name:t,value:r}),this._headers.set("cookie",Array.from(s).map(([e,t])=>u(t)).join("; ")),this}delete(e){let t=this._parsed,r=Array.isArray(e)?e.map(e=>t.delete(e)):t.delete(e);return this._headers.set("cookie",Array.from(t).map(([e,t])=>u(t)).join("; ")),r}clear(){return this.delete(Array.from(this._parsed.keys())),this}[Symbol.for("edge-runtime.inspect.custom")](){return`RequestCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`}toString(){return[...this._parsed.values()].map(e=>`${e.name}=${encodeURIComponent(e.value)}`).join("; ")}},y=class{constructor(e){var t,r,s;this._parsed=new Map,this._headers=e;const n=null!=(s=null!=(r=null==(t=e.getSetCookie)?void 0:t.call(e))?r:e.get("set-cookie"))?s:[];for(const e of Array.isArray(n)?n:function(e){if(!e)return[];var t,r,s,n,o,a=[],i=0;function l(){for(;i<e.length&&/\s/.test(e.charAt(i));)i+=1;return i<e.length}for(;i<e.length;){for(t=i,o=!1;l();)if(","===(r=e.charAt(i))){for(s=i,i+=1,l(),n=i;i<e.length&&"="!==(r=e.charAt(i))&&";"!==r&&","!==r;)i+=1;i<e.length&&"="===e.charAt(i)?(o=!0,i=n,a.push(e.substring(t,s)),t=i):i=s+1}else i+=1;(!o||i>=e.length)&&a.push(e.substring(t,e.length))}return a}(n)){const t=c(e);t&&this._parsed.set(t.name,t)}}get(...e){let t="string"==typeof e[0]?e[0]:e[0].name;return this._parsed.get(t)}getAll(...e){var t;let r=Array.from(this._parsed.values());if(!e.length)return r;let s="string"==typeof e[0]?e[0]:null==(t=e[0])?void 0:t.name;return r.filter(e=>e.name===s)}has(e){return this._parsed.has(e)}set(...e){let[t,r,s]=1===e.length?[e[0].name,e[0].value,e[0]]:e,n=this._parsed;return n.set(t,function(e={name:"",value:""}){return"number"==typeof e.expires&&(e.expires=new Date(e.expires)),e.maxAge&&(e.expires=new Date(Date.now()+1e3*e.maxAge)),(null===e.path||void 0===e.path)&&(e.path="/"),e}({name:t,value:r,...s})),function(e,t){for(let[,r]of(t.delete("set-cookie"),e)){let e=u(r);t.append("set-cookie",e)}}(n,this._headers),this}delete(...e){let[t,r]="string"==typeof e[0]?[e[0]]:[e[0].name,e[0]];return this.set({...r,name:t,value:"",expires:new Date(0)})}[Symbol.for("edge-runtime.inspect.custom")](){return`ResponseCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`}toString(){return[...this._parsed.values()].map(u).join("; ")}}},97793,e=>{"use strict";let t=new Set(["host","connection","content-length","keep-alive","proxy-connection","transfer-encoding","te","trailer","upgrade"].map(e=>e.toLowerCase()));function r(e){return t.has(String(e).trim().toLowerCase())}e.s(["isForbiddenUpstreamHeaderName",()=>r])},254799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},677850,e=>e.a(async(t,r)=>{try{let t=await e.y("zod");e.n(t),r()}catch(e){r(e)}},!0),200392,e=>e.a(async(t,r)=>{try{var s=e.i(677850),n=t([s]);function o(e,t){let r=e.safeParse(t);if(r.success)return{success:!0,data:r.data};let s=Array.isArray(r.error?.issues)?r.error.issues:[];return{success:!1,error:{message:"Invalid request",details:s.map(e=>({field:e.path.join("."),message:e.message}))}}}function a(e){return!1===e.success}[s]=n.then?(await n)():n,s.z.object({password:s.z.string().min(1,"Password is required").max(200)}),e.s(["isValidationFailure",()=>a,"validateBody",()=>o]),r()}catch(e){r(e)}},!1),750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},761095,(e,t,r)=>{t.exports=e.x("node:net",()=>require("node:net"))},478500,(e,t,r)=>{t.exports=e.x("node:async_hooks",()=>require("node:async_hooks"))},57328,(e,t,r)=>{t.exports=e.x("node:assert",()=>require("node:assert"))},347299,(e,t,r)=>{t.exports=e.x("node:http",()=>require("node:http"))},81111,(e,t,r)=>{t.exports=e.x("node:stream",()=>require("node:stream"))},483324,(e,t,r)=>{t.exports=e.x("node:querystring",()=>require("node:querystring"))},687769,(e,t,r)=>{t.exports=e.x("node:events",()=>require("node:events"))},677652,(e,t,r)=>{t.exports=e.x("node:diagnostics_channel",()=>require("node:diagnostics_channel"))},812057,(e,t,r)=>{t.exports=e.x("node:util",()=>require("node:util"))},685560,(e,t,r)=>{t.exports=e.x("node:tls",()=>require("node:tls"))},951615,(e,t,r)=>{t.exports=e.x("node:buffer",()=>require("node:buffer"))},727028,(e,t,r)=>{t.exports=e.x("node:zlib",()=>require("node:zlib"))},874096,(e,t,r)=>{t.exports=e.x("node:perf_hooks",()=>require("node:perf_hooks"))},107417,(e,t,r)=>{t.exports=e.x("node:util/types",()=>require("node:util/types"))},925127,(e,t,r)=>{t.exports=e.x("node:worker_threads",()=>require("node:worker_threads"))},246479,(e,t,r)=>{t.exports=e.x("node:http2",()=>require("node:http2"))},857764,(e,t,r)=>{t.exports=e.x("node:url",()=>require("node:url"))},241293,(e,t,r)=>{t.exports=e.x("node:console",()=>require("node:console"))},912714,(e,t,r)=>{t.exports=e.x("node:fs/promises",()=>require("node:fs/promises"))},26910,(e,t,r)=>{t.exports=e.x("node:timers",()=>require("node:timers"))},495879,(e,t,r)=>{t.exports=e.x("node:dns",()=>require("node:dns"))},427699,(e,t,r)=>{t.exports=e.x("events",()=>require("events"))},504446,(e,t,r)=>{t.exports=e.x("net",()=>require("net"))},500874,(e,t,r)=>{t.exports=e.x("buffer",()=>require("buffer"))},688947,(e,t,r)=>{t.exports=e.x("stream",()=>require("stream"))},858235,e=>{"use strict";var t=e.i(254799);function r(e){let r=(0,t.randomUUID)(),s=e.type||(e.status>=500?"server_error":404===e.status?"not_found":409===e.status?"conflict":"invalid_request");return Response.json({error:{message:e.message,type:s,details:e.details},requestId:r},{status:e.status})}function s(e,t="Unexpected server error"){return r({status:Number(e?.status)||500,message:"string"==typeof e?.message?e.message:t,type:e?.type,details:e?.details})}e.s(["createErrorResponse",()=>r,"createErrorResponseFromUnknown",()=>s])},636686,e=>e.a(async(t,r)=>{try{var s=e.i(936689),n=e.i(273599),o=e.i(676088),a=e.i(200392),i=e.i(858235),l=t([o,a]);[o,a]=l.then?(await l)():l;let d=new Set(["http","https"]);function p(e,t){return e instanceof Error&&e.message?e.message:t}async function u(e){let t;try{t=await e.json()}catch{return(0,i.createErrorResponse)({status:400,message:"Invalid JSON body",type:"invalid_request"})}try{let e,r=(0,a.validateBody)(o.testProxySchema,t);if((0,a.isValidationFailure)(r))return(0,i.createErrorResponse)({status:400,message:r.error.message,details:r.error.details,type:"invalid_request"});let{proxy:l}=r.data,u=String(l.type||"http").toLowerCase();if("socks5"===u&&!(0,n.isSocks5ProxyEnabled)())return(0,i.createErrorResponse)({status:400,message:"SOCKS5 proxy is disabled (set ENABLE_SOCKS5_PROXY=true to enable)",type:"invalid_request"});if(u.startsWith("socks")&&"socks5"!==u||!((0,n.isSocks5ProxyEnabled)()?new Set([...d,"socks5"]):d).has(u))return(0,i.createErrorResponse)({status:400,message:`proxy.type must be ${(0,n.isSocks5ProxyEnabled)()?"http, https, or socks5":"http or https"}`,type:"invalid_request"});try{let t=(0,n.proxyConfigToUrl)({type:u,host:l.host,port:l.port,username:l.username||"",password:l.password||""},{allowSocks5:(0,n.isSocks5ProxyEnabled)()});if(!t)return(0,i.createErrorResponse)({status:400,message:"Invalid proxy configuration",type:"invalid_request"});e=t}catch(e){return(0,i.createErrorResponse)({status:400,message:p(e,"Invalid proxy configuration"),type:"invalid_request"})}let c=(0,n.proxyUrlForLogs)(e),h=Date.now(),x=new AbortController,m=setTimeout(()=>x.abort(),1e4),y=(0,n.createProxyDispatcher)(e);try{let e,t=await (0,s.request)("https://api.ipify.org?format=json",{method:"GET",dispatcher:y,signal:x.signal,headersTimeout:1e4,bodyTimeout:1e4}),r=await t.body.text();try{let t=JSON.parse(r);e=t&&"object"==typeof t?t:{ip:String(t)}}catch{e={ip:r.trim()}}return Response.json({success:!0,publicIp:e.ip||null,latencyMs:Date.now()-h,proxyUrl:c})}catch(e){return Response.json({success:!1,error:e instanceof Error&&"AbortError"===e.name?"Connection timeout (10s)":p(e,"Connection failed"),latencyMs:Date.now()-h,proxyUrl:c})}finally{clearTimeout(m)}}catch(e){return(0,i.createErrorResponseFromUnknown)(e,"Unexpected server error")}}e.s(["POST",()=>u]),r()}catch(e){r(e)}},!1),797951,e=>e.a(async(t,r)=>{try{var s=e.i(747909),n=e.i(174017),o=e.i(996250),a=e.i(759756),i=e.i(561916),l=e.i(174677),p=e.i(869741),u=e.i(316795),d=e.i(487718),c=e.i(995169),h=e.i(47587),x=e.i(666012),m=e.i(570101),y=e.i(626937),f=e.i(10372),g=e.i(193695);e.i(52474);var v=e.i(600220),w=e.i(636686),R=t([w]);[w]=R.then?(await R)():R;let _=new s.AppRouteRouteModule({definition:{kind:n.RouteKind.APP_ROUTE,page:"/api/settings/proxy/test/route",pathname:"/api/settings/proxy/test",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/settings/proxy/test/route.ts",nextConfigOutput:"standalone",userland:w}),{workAsyncStorage:q,workUnitAsyncStorage:C,serverHooks:A}=_;function b(){return(0,o.patchFetch)({workAsyncStorage:q,workUnitAsyncStorage:C})}async function E(e,t,r){_.isDev&&(0,a.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let s="/api/settings/proxy/test/route";s=s.replace(/\/index$/,"")||"/";let o=await _.prepare(e,t,{srcPage:s,multiZoneDraftMode:!1});if(!o)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:w,params:R,nextConfig:b,parsedUrl:E,isDraftMode:q,prerenderManifest:C,routerServerContext:A,isOnDemandRevalidate:S,revalidateOnlyGenerated:k,resolvedPathname:O,clientReferenceManifest:P,serverActionsManifest:j}=o,N=(0,p.normalizeAppPath)(s),T=!!(C.dynamicRoutes[N]||C.routes[O]),U=async()=>((null==A?void 0:A.render404)?await A.render404(e,t,E,!1):t.end("This page could not be found"),null);if(T&&!q){let e=!!C.routes[O],t=C.dynamicRoutes[N];if(t&&!1===t.fallback&&!e){if(b.experimental.adapterPath)return await U();throw new g.NoFallbackError}}let D=null;!T||_.isDev||q||(D=O,D="/index"===D?"/":D);let I=!0===_.isDev||!T,$=T&&!I;j&&P&&(0,l.setManifestsSingleton)({page:s,clientReferenceManifest:P,serverActionsManifest:j});let H=e.method||"GET",M=(0,i.getTracer)(),F=M.getActiveScopeSpan(),L={params:R,prerenderManifest:C,renderOpts:{experimental:{authInterrupts:!!b.experimental.authInterrupts},cacheComponents:!!b.cacheComponents,supportsDynamicResponse:I,incrementalCache:(0,a.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:b.cacheLife,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,s,n)=>_.onRequestError(e,t,s,n,A)},sharedContext:{buildId:w}},K=new u.NodeNextRequest(e),B=new u.NodeNextResponse(t),z=d.NextRequestAdapter.fromNodeNextRequest(K,(0,d.signalFromNodeResponse)(t));try{let o=async e=>_.handle(z,L).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=M.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==c.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=r.get("next.route");if(n){let t=`${H} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t)}else e.updateName(`${H} ${s}`)}),l=!!(0,a.getRequestMeta)(e,"minimalMode"),p=async a=>{var i,p;let u=async({previousCacheEntry:n})=>{try{if(!l&&S&&k&&!n)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await o(a);e.fetchMetrics=L.renderOpts.fetchMetrics;let i=L.renderOpts.pendingWaitUntil;i&&r.waitUntil&&(r.waitUntil(i),i=void 0);let p=L.renderOpts.collectedTags;if(!T)return await (0,x.sendResponse)(K,B,s,L.renderOpts.pendingWaitUntil),null;{let e=await s.blob(),t=(0,m.toNodeOutgoingHttpHeaders)(s.headers);p&&(t[f.NEXT_CACHE_TAGS_HEADER]=p),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==L.renderOpts.collectedRevalidate&&!(L.renderOpts.collectedRevalidate>=f.INFINITE_CACHE)&&L.renderOpts.collectedRevalidate,n=void 0===L.renderOpts.collectedExpire||L.renderOpts.collectedExpire>=f.INFINITE_CACHE?void 0:L.renderOpts.collectedExpire;return{value:{kind:v.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:n}}}}catch(t){throw(null==n?void 0:n.isStale)&&await _.onRequestError(e,t,{routerKind:"App Router",routePath:s,routeType:"route",revalidateReason:(0,h.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:S})},!1,A),t}},d=await _.handleResponse({req:e,nextConfig:b,cacheKey:D,routeKind:n.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:C,isRoutePPREnabled:!1,isOnDemandRevalidate:S,revalidateOnlyGenerated:k,responseGenerator:u,waitUntil:r.waitUntil,isMinimalMode:l});if(!T)return null;if((null==d||null==(i=d.value)?void 0:i.kind)!==v.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(p=d.value)?void 0:p.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});l||t.setHeader("x-nextjs-cache",S?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),q&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let c=(0,m.fromNodeOutgoingHttpHeaders)(d.value.headers);return l&&T||c.delete(f.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||c.get("Cache-Control")||c.set("Cache-Control",(0,y.getCacheControlHeader)(d.cacheControl)),await (0,x.sendResponse)(K,B,new Response(d.value.body,{headers:c,status:d.value.status||200})),null};F?await p(F):await M.withPropagatedContext(e.headers,()=>M.trace(c.BaseServerSpan.handleRequest,{spanName:`${H} ${s}`,kind:i.SpanKind.SERVER,attributes:{"http.method":H,"http.target":e.url}},p))}catch(t){if(t instanceof g.NoFallbackError||await _.onRequestError(e,t,{routerKind:"App Router",routePath:N,routeType:"route",revalidateReason:(0,h.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:S})},!1,A),T)throw t;return await (0,x.sendResponse)(K,B,new Response(null,{status:500})),null}}e.s(["handler",()=>E,"patchFetch",()=>b,"routeModule",()=>_,"serverHooks",()=>A,"workAsyncStorage",()=>q,"workUnitAsyncStorage",()=>C]),r()}catch(e){r(e)}},!1)];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__643f87ad._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},918622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},556704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},832319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},324725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},270406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},193695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},442315,(e,t,r)=>{"use strict";t.exports=e.r(918622)},347540,(e,t,r)=>{"use strict";t.exports=e.r(442315).vendored["react-rsc"].React},819481,(e,t,r)=>{"use strict";var s=Object.defineProperty,n=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,a={},p={RequestCookies:()=>f,ResponseCookies:()=>x,parseCookie:()=>d,parseSetCookie:()=>c,stringifyCookie:()=>u};for(var l in p)s(a,l,{get:p[l],enumerable:!0});function u(e){var t;let r=["path"in e&&e.path&&`Path=${e.path}`,"expires"in e&&(e.expires||0===e.expires)&&`Expires=${("number"==typeof e.expires?new Date(e.expires):e.expires).toUTCString()}`,"maxAge"in e&&"number"==typeof e.maxAge&&`Max-Age=${e.maxAge}`,"domain"in e&&e.domain&&`Domain=${e.domain}`,"secure"in e&&e.secure&&"Secure","httpOnly"in e&&e.httpOnly&&"HttpOnly","sameSite"in e&&e.sameSite&&`SameSite=${e.sameSite}`,"partitioned"in e&&e.partitioned&&"Partitioned","priority"in e&&e.priority&&`Priority=${e.priority}`].filter(Boolean),s=`${e.name}=${encodeURIComponent(null!=(t=e.value)?t:"")}`;return 0===r.length?s:`${s}; ${r.join("; ")}`}function d(e){let t=new Map;for(let r of e.split(/; */)){if(!r)continue;let e=r.indexOf("=");if(-1===e){t.set(r,"true");continue}let[s,n]=[r.slice(0,e),r.slice(e+1)];try{t.set(s,decodeURIComponent(null!=n?n:"true"))}catch{}}return t}function c(e){if(!e)return;let[[t,r],...s]=d(e),{domain:n,expires:i,httponly:o,maxage:a,path:p,samesite:l,secure:u,partitioned:c,priority:f}=Object.fromEntries(s.map(([e,t])=>[e.toLowerCase().replace(/-/g,""),t]));{var x,g,y={name:t,value:decodeURIComponent(r),domain:n,...i&&{expires:new Date(i)},...o&&{httpOnly:!0},..."string"==typeof a&&{maxAge:Number(a)},path:p,...l&&{sameSite:h.includes(x=(x=l).toLowerCase())?x:void 0},...u&&{secure:!0},...f&&{priority:m.includes(g=(g=f).toLowerCase())?g:void 0},...c&&{partitioned:!0}};let e={};for(let t in y)y[t]&&(e[t]=y[t]);return e}}t.exports=((e,t,r,a)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let r of i(t))o.call(e,r)||void 0===r||s(e,r,{get:()=>t[r],enumerable:!(a=n(t,r))||a.enumerable});return e})(s({},"__esModule",{value:!0}),a);var h=["strict","lax","none"],m=["low","medium","high"],f=class{constructor(e){this._parsed=new Map,this._headers=e;const t=e.get("cookie");if(t)for(const[e,r]of d(t))this._parsed.set(e,{name:e,value:r})}[Symbol.iterator](){return this._parsed[Symbol.iterator]()}get size(){return this._parsed.size}get(...e){let t="string"==typeof e[0]?e[0]:e[0].name;return this._parsed.get(t)}getAll(...e){var t;let r=Array.from(this._parsed);if(!e.length)return r.map(([e,t])=>t);let s="string"==typeof e[0]?e[0]:null==(t=e[0])?void 0:t.name;return r.filter(([e])=>e===s).map(([e,t])=>t)}has(e){return this._parsed.has(e)}set(...e){let[t,r]=1===e.length?[e[0].name,e[0].value]:e,s=this._parsed;return s.set(t,{name:t,value:r}),this._headers.set("cookie",Array.from(s).map(([e,t])=>u(t)).join("; ")),this}delete(e){let t=this._parsed,r=Array.isArray(e)?e.map(e=>t.delete(e)):t.delete(e);return this._headers.set("cookie",Array.from(t).map(([e,t])=>u(t)).join("; ")),r}clear(){return this.delete(Array.from(this._parsed.keys())),this}[Symbol.for("edge-runtime.inspect.custom")](){return`RequestCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`}toString(){return[...this._parsed.values()].map(e=>`${e.name}=${encodeURIComponent(e.value)}`).join("; ")}},x=class{constructor(e){var t,r,s;this._parsed=new Map,this._headers=e;const n=null!=(s=null!=(r=null==(t=e.getSetCookie)?void 0:t.call(e))?r:e.get("set-cookie"))?s:[];for(const e of Array.isArray(n)?n:function(e){if(!e)return[];var t,r,s,n,i,o=[],a=0;function p(){for(;a<e.length&&/\s/.test(e.charAt(a));)a+=1;return a<e.length}for(;a<e.length;){for(t=a,i=!1;p();)if(","===(r=e.charAt(a))){for(s=a,a+=1,p(),n=a;a<e.length&&"="!==(r=e.charAt(a))&&";"!==r&&","!==r;)a+=1;a<e.length&&"="===e.charAt(a)?(i=!0,a=n,o.push(e.substring(t,s)),t=a):a=s+1}else a+=1;(!i||a>=e.length)&&o.push(e.substring(t,e.length))}return o}(n)){const t=c(e);t&&this._parsed.set(t.name,t)}}get(...e){let t="string"==typeof e[0]?e[0]:e[0].name;return this._parsed.get(t)}getAll(...e){var t;let r=Array.from(this._parsed.values());if(!e.length)return r;let s="string"==typeof e[0]?e[0]:null==(t=e[0])?void 0:t.name;return r.filter(e=>e.name===s)}has(e){return this._parsed.has(e)}set(...e){let[t,r,s]=1===e.length?[e[0].name,e[0].value,e[0]]:e,n=this._parsed;return n.set(t,function(e={name:"",value:""}){return"number"==typeof e.expires&&(e.expires=new Date(e.expires)),e.maxAge&&(e.expires=new Date(Date.now()+1e3*e.maxAge)),(null===e.path||void 0===e.path)&&(e.path="/"),e}({name:t,value:r,...s})),function(e,t){for(let[,r]of(t.delete("set-cookie"),e)){let e=u(r);t.append("set-cookie",e)}}(n,this._headers),this}delete(...e){let[t,r]="string"==typeof e[0]?[e[0]]:[e[0].name,e[0]];return this.set({...r,name:t,value:"",expires:new Date(0)})}[Symbol.for("edge-runtime.inspect.custom")](){return`ResponseCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`}toString(){return[...this._parsed.values()].map(u).join("; ")}}}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__765c4417._.js.map