9router-proxy 0.6.8 → 0.6.10

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 (463) hide show
  1. package/app/.next-cli-build/BUILD_ID +1 -1
  2. package/app/.next-cli-build/app-path-routes-manifest.json +6 -6
  3. package/app/.next-cli-build/build-manifest.json +2 -2
  4. package/app/.next-cli-build/prerender-manifest.json +20 -20
  5. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  6. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +1 -1
  32. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  33. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  34. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  35. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  36. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  37. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  38. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  39. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  40. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -1
  41. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  42. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  43. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  44. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
  45. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  46. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
  47. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  48. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  49. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  50. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  51. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  52. package/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  53. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  54. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  55. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  56. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  57. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  58. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  59. package/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  60. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  61. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  62. package/app/.next-cli-build/server/app/_not-found.rsc +3 -3
  63. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
  64. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
  65. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  66. package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  67. package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  68. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  69. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  70. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  71. package/app/.next-cli-build/server/app/api/auth/reset-password/route.js.nft.json +1 -1
  72. package/app/.next-cli-build/server/app/api/auth/saml/acs/route.js.nft.json +1 -1
  73. package/app/.next-cli-build/server/app/api/auth/saml/metadata/route.js.nft.json +1 -1
  74. package/app/.next-cli-build/server/app/api/auth/saml/start/route.js.nft.json +1 -1
  75. package/app/.next-cli-build/server/app/api/auth/saml/test/route.js.nft.json +1 -1
  76. package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  77. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +5 -5
  78. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  79. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  80. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  81. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  82. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +1 -1
  83. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  84. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +1 -1
  85. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  86. package/app/.next-cli-build/server/app/api/cli-tools/codewhale-settings/route.js +1 -1
  87. package/app/.next-cli-build/server/app/api/cli-tools/codewhale-settings/route.js.nft.json +1 -1
  88. package/app/.next-cli-build/server/app/api/cli-tools/codex-profiles/route.js.nft.json +1 -1
  89. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  90. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +2 -2
  91. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  92. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +2 -2
  93. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  94. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
  95. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  96. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  97. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  98. package/app/.next-cli-build/server/app/api/cli-tools/crush-settings/route.js +2 -2
  99. package/app/.next-cli-build/server/app/api/cli-tools/crush-settings/route.js.nft.json +1 -1
  100. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +2 -2
  101. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  102. package/app/.next-cli-build/server/app/api/cli-tools/devin-settings/route.js +1 -1
  103. package/app/.next-cli-build/server/app/api/cli-tools/devin-settings/route.js.nft.json +1 -1
  104. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +1 -1
  105. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  106. package/app/.next-cli-build/server/app/api/cli-tools/forge-settings/route.js +2 -2
  107. package/app/.next-cli-build/server/app/api/cli-tools/forge-settings/route.js.nft.json +1 -1
  108. package/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js +2 -2
  109. package/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js.nft.json +1 -1
  110. package/app/.next-cli-build/server/app/api/cli-tools/hermes-profiles/route.js.nft.json +1 -1
  111. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +2 -2
  112. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  113. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +2 -2
  114. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  115. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +2 -2
  116. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  117. package/app/.next-cli-build/server/app/api/cli-tools/omp-settings/route.js +2 -2
  118. package/app/.next-cli-build/server/app/api/cli-tools/omp-settings/route.js.nft.json +1 -1
  119. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  120. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  121. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +1 -1
  122. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  123. package/app/.next-cli-build/server/app/api/cli-tools/pi-settings/route.js +1 -1
  124. package/app/.next-cli-build/server/app/api/cli-tools/pi-settings/route.js.nft.json +1 -1
  125. package/app/.next-cli-build/server/app/api/cli-tools/smelt-settings/route.js +1 -1
  126. package/app/.next-cli-build/server/app/api/cli-tools/smelt-settings/route.js.nft.json +1 -1
  127. package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  128. package/app/.next-cli-build/server/app/api/combos/presets/route.js.nft.json +1 -1
  129. package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  130. package/app/.next-cli-build/server/app/api/headroom/extras/route.js.nft.json +1 -1
  131. package/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js.nft.json +1 -1
  132. package/app/.next-cli-build/server/app/api/headroom/restart/route.js.nft.json +1 -1
  133. package/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +1 -1
  134. package/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +1 -1
  135. package/app/.next-cli-build/server/app/api/headroom/stop/route.js.nft.json +1 -1
  136. package/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  137. package/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  138. package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  139. package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  140. package/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  141. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  142. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  143. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  144. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  145. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  146. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  147. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  148. package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  149. package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  150. package/app/.next-cli-build/server/app/api/models/catalog-sync/route.js.nft.json +1 -1
  151. package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  152. package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  153. package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  154. package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  155. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  156. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  157. package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js +1 -1
  158. package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js.nft.json +1 -1
  159. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
  160. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  161. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  162. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  163. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  164. package/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/route.js.nft.json +1 -1
  165. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  166. package/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js.nft.json +1 -1
  167. package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  168. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  169. package/app/.next-cli-build/server/app/api/oauth/kiro/import-cli-proxy/route.js.nft.json +1 -1
  170. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  171. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  172. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/api-key/route.js.nft.json +1 -1
  173. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/auto-import/route.js +1 -1
  174. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/auto-import/route.js.nft.json +1 -1
  175. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/login/start/route.js.nft.json +1 -1
  176. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/login/status/route.js.nft.json +1 -1
  177. package/app/.next-cli-build/server/app/api/oauth/zed/auto-import/route.js.nft.json +1 -1
  178. package/app/.next-cli-build/server/app/api/oauth/zed/import/route.js +1 -1
  179. package/app/.next-cli-build/server/app/api/oauth/zed/import/route.js.nft.json +1 -1
  180. package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  181. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  182. package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  183. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  184. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
  185. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  186. package/app/.next-cli-build/server/app/api/providers/[id]/overrides/route.js.nft.json +1 -1
  187. package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  188. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js +1 -1
  189. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  190. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  191. package/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
  192. package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  193. package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  194. package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  195. package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  196. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js +1 -1
  197. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  198. package/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  199. package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  200. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  201. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  202. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  203. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  204. package/app/.next-cli-build/server/app/api/proxy-pools/netlify-deploy/route.js.nft.json +1 -1
  205. package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  206. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  207. package/app/.next-cli-build/server/app/api/pxpipe/health/route.js.nft.json +1 -1
  208. package/app/.next-cli-build/server/app/api/pxpipe/install/route.js.nft.json +1 -1
  209. package/app/.next-cli-build/server/app/api/pxpipe/logs/route.js.nft.json +1 -1
  210. package/app/.next-cli-build/server/app/api/pxpipe/restart/route.js.nft.json +1 -1
  211. package/app/.next-cli-build/server/app/api/pxpipe/start/route.js.nft.json +1 -1
  212. package/app/.next-cli-build/server/app/api/pxpipe/stats/route.js.nft.json +1 -1
  213. package/app/.next-cli-build/server/app/api/pxpipe/status/route.js.nft.json +1 -1
  214. package/app/.next-cli-build/server/app/api/pxpipe/stop/route.js.nft.json +1 -1
  215. package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  216. package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  217. package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  218. package/app/.next-cli-build/server/app/api/settings/route.js +1 -1
  219. package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  220. package/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  221. package/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  222. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  223. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  224. package/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  225. package/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  226. package/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
  227. package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  228. package/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
  229. package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  230. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  231. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  232. package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  233. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  234. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  235. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  236. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +2 -2
  237. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  238. package/app/.next-cli-build/server/app/api/usage/[connectionId]/claude-reset/route.js +1 -1
  239. package/app/.next-cli-build/server/app/api/usage/[connectionId]/claude-reset/route.js.nft.json +1 -1
  240. package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -1
  241. package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -1
  242. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
  243. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  244. package/app/.next-cli-build/server/app/api/usage/chart/route.js +1 -1
  245. package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  246. package/app/.next-cli-build/server/app/api/usage/history/route.js +1 -1
  247. package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  248. package/app/.next-cli-build/server/app/api/usage/logs/route.js +1 -1
  249. package/app/.next-cli-build/server/app/api/usage/logs/route.js.nft.json +1 -1
  250. package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  251. package/app/.next-cli-build/server/app/api/usage/request-details/route.js +1 -1
  252. package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  253. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js +1 -1
  254. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  255. package/app/.next-cli-build/server/app/api/usage/stats/route.js +1 -1
  256. package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  257. package/app/.next-cli-build/server/app/api/usage/stream/route.js +1 -1
  258. package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  259. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
  260. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  261. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  262. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  263. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  264. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
  265. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  266. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
  267. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  268. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js +1 -1
  269. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  270. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  271. package/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
  272. package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  273. package/app/.next-cli-build/server/app/api/v1/models/[...model]/route.js.nft.json +1 -1
  274. package/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  275. package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  276. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
  277. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  278. package/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
  279. package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  280. package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  281. package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  282. package/app/.next-cli-build/server/app/api/v1/systemone/route.js +1 -1
  283. package/app/.next-cli-build/server/app/api/v1/systemone/route.js.nft.json +1 -1
  284. package/app/.next-cli-build/server/app/api/v1/videos/[id]/route.js.nft.json +1 -1
  285. package/app/.next-cli-build/server/app/api/v1/videos/edits/route.js.nft.json +1 -1
  286. package/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js.nft.json +1 -1
  287. package/app/.next-cli-build/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
  288. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  289. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
  290. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  291. package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  292. package/app/.next-cli-build/server/app/api/version/route.js +1 -1
  293. package/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
  294. package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  295. package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  296. package/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  297. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  298. package/app/.next-cli-build/server/app/callback.html +1 -1
  299. package/app/.next-cli-build/server/app/callback.rsc +3 -3
  300. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
  301. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  302. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +3 -3
  303. package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  304. package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +3 -3
  305. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +3 -3
  306. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +3 -3
  307. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  308. package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  309. package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +3 -3
  310. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +3 -3
  311. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +3 -3
  312. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  313. package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  314. package/app/.next-cli-build/server/app/dashboard/combos.rsc +3 -3
  315. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +3 -3
  316. package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +3 -3
  317. package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  318. package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  319. package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +3 -3
  320. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +3 -3
  321. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +3 -3
  322. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  323. package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  324. package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +3 -3
  325. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +3 -3
  326. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +3 -3
  327. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  328. package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  329. package/app/.next-cli-build/server/app/dashboard/mitm.rsc +3 -3
  330. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +3 -3
  331. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +3 -3
  332. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  333. package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  334. package/app/.next-cli-build/server/app/dashboard/profile.rsc +3 -3
  335. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +3 -3
  336. package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +3 -3
  337. package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  338. package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  339. package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +3 -3
  340. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +3 -3
  341. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +3 -3
  342. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  343. package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  344. package/app/.next-cli-build/server/app/dashboard/providers.rsc +3 -3
  345. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +3 -3
  346. package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +3 -3
  347. package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  348. package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  349. package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +3 -3
  350. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +3 -3
  351. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +3 -3
  352. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  353. package/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
  354. package/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +3 -3
  355. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +3 -3
  356. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +3 -3
  357. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +1 -1
  358. package/app/.next-cli-build/server/app/dashboard/quota.html +1 -1
  359. package/app/.next-cli-build/server/app/dashboard/quota.rsc +3 -3
  360. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  361. package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +3 -3
  362. package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  363. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  364. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  365. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  366. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
  367. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  368. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  369. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +3 -3
  370. package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
  371. package/app/.next-cli-build/server/app/dashboard/skills.rsc +3 -3
  372. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +3 -3
  373. package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +3 -3
  374. package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +1 -1
  375. package/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  376. package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +3 -3
  377. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +3 -3
  378. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +3 -3
  379. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
  380. package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  381. package/app/.next-cli-build/server/app/dashboard/translator.rsc +3 -3
  382. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +3 -3
  383. package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +3 -3
  384. package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  385. package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  386. package/app/.next-cli-build/server/app/dashboard/usage.rsc +3 -3
  387. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +3 -3
  388. package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +3 -3
  389. package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  390. package/app/.next-cli-build/server/app/dashboard.html +1 -1
  391. package/app/.next-cli-build/server/app/dashboard.rsc +3 -3
  392. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +3 -3
  393. package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +3 -3
  394. package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  395. package/app/.next-cli-build/server/app/favicon.ico/route.js.nft.json +1 -1
  396. package/app/.next-cli-build/server/app/index.html +1 -1
  397. package/app/.next-cli-build/server/app/index.rsc +3 -3
  398. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  399. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
  400. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  401. package/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  402. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  403. package/app/.next-cli-build/server/app/landing.html +1 -1
  404. package/app/.next-cli-build/server/app/landing.rsc +3 -3
  405. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +3 -3
  406. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  407. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +3 -3
  408. package/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  409. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  410. package/app/.next-cli-build/server/app/login.html +1 -1
  411. package/app/.next-cli-build/server/app/login.rsc +3 -3
  412. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +3 -3
  413. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  414. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +3 -3
  415. package/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  416. package/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  417. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  418. package/app/.next-cli-build/server/app-paths-manifest.json +6 -6
  419. package/app/.next-cli-build/server/chunks/1051.js +1 -1
  420. package/app/.next-cli-build/server/chunks/1350.js +1 -1
  421. package/app/.next-cli-build/server/chunks/1757.js +1 -1
  422. package/app/.next-cli-build/server/chunks/1836.js +17 -0
  423. package/app/.next-cli-build/server/chunks/2132.js +1 -1
  424. package/app/.next-cli-build/server/chunks/2375.js +1 -1
  425. package/app/.next-cli-build/server/chunks/3210.js +1 -1
  426. package/app/.next-cli-build/server/chunks/3711.js +1 -1
  427. package/app/.next-cli-build/server/chunks/{4957.js → 3811.js} +1 -1
  428. package/app/.next-cli-build/server/chunks/3943.js +1 -1
  429. package/app/.next-cli-build/server/chunks/4123.js +1 -1
  430. package/app/.next-cli-build/server/chunks/5026.js +1 -1
  431. package/app/.next-cli-build/server/chunks/5330.js +2 -10
  432. package/app/.next-cli-build/server/chunks/5615.js +2 -2
  433. package/app/.next-cli-build/server/chunks/614.js +2 -2
  434. package/app/.next-cli-build/server/chunks/6171.js +7 -0
  435. package/app/.next-cli-build/server/chunks/7525.js +1 -1
  436. package/app/.next-cli-build/server/chunks/7557.js +1 -1
  437. package/app/.next-cli-build/server/chunks/7843.js +1 -1
  438. package/app/.next-cli-build/server/chunks/8499.js +2 -2
  439. package/app/.next-cli-build/server/chunks/869.js +1 -1
  440. package/app/.next-cli-build/server/chunks/8895.js +7 -13
  441. package/app/.next-cli-build/server/chunks/9100.js +2 -2
  442. package/app/.next-cli-build/server/chunks/9604.js +1 -1
  443. package/app/.next-cli-build/server/chunks/9609.js +1 -1
  444. package/app/.next-cli-build/server/chunks/9696.js +1 -1
  445. package/app/.next-cli-build/server/instrumentation.js.nft.json +1 -1
  446. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  447. package/app/.next-cli-build/server/middleware.js.nft.json +1 -1
  448. package/app/.next-cli-build/server/pages/404.html +1 -1
  449. package/app/.next-cli-build/server/pages/500.html +1 -1
  450. package/app/.next-cli-build/server/preview-props.json +3 -3
  451. package/app/.next-cli-build/server/server-reference-manifest.js +1 -1
  452. package/app/.next-cli-build/server/server-reference-manifest.json +1 -1
  453. package/app/.next-cli-build/static/chunks/1321-c14ab5f20e75ec51.js +1 -0
  454. package/app/.next-cli-build/static/chunks/5497-76da5aae5c912ea5.js +7 -0
  455. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/{page-ad6e72e4fa047b21.js → page-85d183456bb818fb.js} +1 -1
  456. package/app/package.json +1 -1
  457. package/package.json +1 -1
  458. package/app/.next-cli-build/server/chunks/6249.js +0 -9
  459. package/app/.next-cli-build/server/chunks/7552.js +0 -1
  460. package/app/.next-cli-build/static/chunks/1321-fdac938522ce514f.js +0 -1
  461. package/app/.next-cli-build/static/chunks/5497-35a0641d4dcc62d5.js +0 -7
  462. /package/app/.next-cli-build/static/{Lcce6agtXL-TudJa8EdML → 1OwkUVIMD7I3wwdhcBzuQ}/_buildManifest.js +0 -0
  463. /package/app/.next-cli-build/static/{Lcce6agtXL-TudJa8EdML → 1OwkUVIMD7I3wwdhcBzuQ}/_ssgManifest.js +0 -0
@@ -6,7 +6,7 @@ exports.id=9100,exports.ids=[9100],exports.modules={644:(a,b,c)=>{"use strict";f
6
6
  ON CONFLICT(id) DO UPDATE SET
7
7
  provider=excluded.provider, authType=excluded.authType, name=excluded.name,
8
8
  email=excluded.email, priority=excluded.priority, isActive=excluded.isActive,
9
- data=excluded.data, updatedAt=excluded.updatedAt`,[c.id,c.provider,c.authType,c.name,c.email,c.priority,c.isActive,c.data,c.createdAt,c.updatedAt])}async function k(a={}){let b=await (0,e.c)(),c=[],d=[];a.provider&&(c.push("provider = ?"),d.push(a.provider)),void 0!==a.isActive&&(c.push("isActive = ?"),d.push(+!!a.isActive));let f=`SELECT * FROM providerConnections${c.length?` WHERE ${c.join(" AND ")}`:""}`,g=b.all(f,d).map(i);return g.sort((a,b)=>(a.priority||999)-(b.priority||999)),g}async function l(a){return i((await (0,e.c)()).get("SELECT * FROM providerConnections WHERE id = ?",[a]))}function m(a,b){let c=a.all("SELECT * FROM providerConnections WHERE provider = ?",[b]).map(i);c.sort((a,b)=>{let c=(a.priority||0)-(b.priority||0);if(0!==c)return c;let d=new Date(b.updatedAt||0)-new Date(a.updatedAt||0);if(0!==d)return d;let e=new Date(b.createdAt||0)-new Date(a.createdAt||0);return 0!==e?e:a.id<b.id?-1:+(a.id>b.id)}),c.forEach((b,c)=>{let d=c+1;(b.priority||0)!==d&&a.run("UPDATE providerConnections SET priority = ? WHERE id = ?",[d,b.id])})}async function n(a){let b,c=await (0,e.c)(),f=new Date().toISOString();return c.transaction(()=>{var e;let k="apikey"===a.authType&&!!a.name,l=k?c.all("SELECT * FROM providerConnections WHERE provider = ? AND authType = ? AND name = ?",[a.provider,"apikey",a.name]).map(i):c.all("SELECT * FROM providerConnections WHERE provider = ?",[a.provider]).map(i),m=k?c.get("SELECT COUNT(*) AS n FROM providerConnections WHERE provider = ?",[a.provider])?.n??l.length:l.length,n=null;if("oauth"===a.authType&&a.email){let b=a.providerSpecificData?.username,c=a.providerSpecificData?.chatgptAccountId;n=l.find(d=>{if("oauth"!==d.authType||d.email!==a.email)return!1;if("codex"===a.provider){let a=d.providerSpecificData?.chatgptAccountId;return!!c&&!!a&&c===a}let e=d.providerSpecificData?.chatgptAccountId;if(c&&e)return c===e;if(c&&!e||!c&&e)return!1;let f=d.providerSpecificData?.username;return b&&f?b===f:!b&&!f})}else"apikey"===a.authType&&a.name&&(n=l.find(b=>"apikey"===b.authType&&b.name===a.name));if(n){if(!1===a.allowOverwrite){let b=Error(`A connection named "${n.name}" already exists for provider "${a.provider}". Pass allowOverwrite: true to replace it.`);throw b.code="PROVIDER_NAME_CONFLICT",b.existingId=n.id,b.existingName=n.name,b}let d=h(n,a),e={...n,...d,updatedAt:f};j(c,e),b=e;return}let o=a.name||null;o||"oauth"!==a.authType&&"access_token"!==a.authType||(e=a.email||`Account ${m+1}`,o="github"===a.provider&&(a.providerSpecificData?.githubLogin||a.providerSpecificData?.githubEmail||a.email||a.providerSpecificData?.githubName)||e);let p=a.priority;if(!p){let b=c.get("SELECT MAX(priority) AS m FROM providerConnections WHERE provider = ?",[a.provider]);p=(b?.m||0)+1}let q={id:(0,d.A)(),provider:a.provider,authType:a.authType||"oauth",name:o,priority:p,isActive:void 0===a.isActive||a.isActive,createdAt:f,updatedAt:f};for(let b of g)void 0!==a[b]&&null!==a[b]&&(q[b]=a[b]);a.providerSpecificData&&Object.keys(a.providerSpecificData).length>0&&(q.providerSpecificData=a.providerSpecificData),void 0!==a.email&&(q.email=a.email),j(c,q),b=q}),b}async function o(a,b){let c,d=await (0,e.c)();return d.transaction(()=>{let e=d.get("SELECT * FROM providerConnections WHERE id = ?",[a]);if(!e){c=null;return}let f=i(e),g=h(f,b),k={...f,...g,updatedAt:new Date().toISOString()};j(d,k),void 0!==b.priority&&m(d,f.provider),c=k}),c}async function p(a){let b=await (0,e.c)(),c=!1;return b.transaction(()=>{let d=b.get("SELECT provider FROM providerConnections WHERE id = ?",[a]);d&&(b.run("DELETE FROM providerConnections WHERE id = ?",[a]),m(b,d.provider),c=!0)}),c}async function q(a){let b=await (0,e.c)(),c=b.get("SELECT COUNT(*) AS n FROM providerConnections WHERE provider = ?",[a]);return b.run("DELETE FROM providerConnections WHERE provider = ?",[a]),c?.n||0}async function r(a){let b=await (0,e.c)();b.transaction(()=>m(b,a))}async function s(){let a=await (0,e.c)(),b=["displayName","email","globalPriority","defaultModel","accessToken","refreshToken","expiresAt","tokenType","scope","projectId","apiKey","testStatus","lastTested","lastError","lastErrorAt","rateLimitedUntil","expiresIn","consecutiveUseCount"],c=0;return a.transaction(()=>{for(let d of a.all("SELECT * FROM providerConnections")){let e=i(d),f=!1;for(let a of b)(null===e[a]||void 0===e[a])&&a in e&&(delete e[a],c++,f=!0);e.providerSpecificData&&0===Object.keys(e.providerSpecificData).length&&(delete e.providerSpecificData,c++,f=!0),f&&j(a,e)}}),c}},9460:(a,b,c)=>{"use strict";c.d(b,{L9:()=>u,OM:()=>j,S8:()=>p,TZ:()=>s,fv:()=>m,getMitmAlias:()=>t,h1:()=>r,o5:()=>l,uL:()=>q,uv:()=>o});var d=c(36366),e=c(644),f=c(22846);let g=(0,f.U)("modelAliases"),h=(0,f.U)("customModels"),i=(0,f.U)("mitmAlias");async function j(){let a=await g.getAll(),b={};for(let[c,d]of Object.entries(a)){let a=k(d);a&&(b[c]=a)}return b}function k(a){return"string"==typeof a?a.trim():a&&"object"==typeof a&&a.provider&&a.model?`${a.provider}/${a.model}`:""}async function l(a,b){if("string"!=typeof a||!a.trim()||"string"!=typeof b||!b.trim())throw Error(`invalid model alias ${JSON.stringify(a)} → ${JSON.stringify(b)}`);await g.set(a.trim(),b.trim())}async function m(a){await g.remove(a)}function n(a,b,c){return`${a}|${b}|${c}`}async function o(){return Object.values(await h.getAll())}async function p({providerAlias:a,id:b,type:c="llm",name:f,caps:g,transport:h}){let i=n(a,b,c),j=await (0,d.c)(),k=!1;return j.transaction(()=>{let d=j.get("SELECT value FROM kv WHERE scope = 'customModels' AND key = ?",[i]);if(d){let a={...(0,e.q)(d.value)||{},...f?{name:f}:{},...g?{caps:g}:{},...h?{transport:h}:{}};j.run("UPDATE kv SET value = ? WHERE scope = 'customModels' AND key = ?",[(0,e.s)(a),i]);return}let l=(0,e.s)({providerAlias:a,id:b,type:c,name:f||b,...g?{caps:g}:{},...h?{transport:h}:{}});j.run("INSERT INTO kv(scope, key, value) VALUES('customModels', ?, ?)",[i,l]),k=!0}),k}async function q({providerAlias:a,id:b,type:c="llm"}){await h.remove(n(a,b,c))}async function r(a){let b=[a].flat().filter(Boolean);if(!b.length)return 0;let c=await (0,d.c)(),e=0;return c.transaction(()=>{for(let{key:a}of c.all("SELECT key FROM kv WHERE scope = 'customModels'"))b.some(b=>a.startsWith(`${b}|`))&&(c.run("DELETE FROM kv WHERE scope = 'customModels' AND key = ?",[a]),e++)}),e}async function s(a){let b=[a].flat().filter(Boolean);if(!b.length)return 0;let c=await (0,d.c)(),f=0;return c.transaction(()=>{for(let{key:a,value:d}of c.all("SELECT key, value FROM kv WHERE scope = 'modelAliases'")){let g=k((0,e.q)(d,""));b.some(a=>g.startsWith(`${a}/`))&&(c.run("DELETE FROM kv WHERE scope = 'modelAliases' AND key = ?",[a]),f++)}}),f}async function t(a){return a?await i.get(a)||{}:await i.getAll()}async function u(a,b){await i.set(a,b||{})}},22846:(a,b,c)=>{"use strict";c.d(b,{U:()=>f});var d=c(36366),e=c(644);function f(a){return{async get(b,c=null){let f=(await (0,d.c)()).get("SELECT value FROM kv WHERE scope = ? AND key = ?",[a,b]);return f?(0,e.q)(f.value,c):c},async getAll(){let b=(await (0,d.c)()).all("SELECT key, value FROM kv WHERE scope = ?",[a]),c={};for(let a of b)c[a.key]=(0,e.q)(a.value);return c},async set(b,c){(await (0,d.c)()).run("INSERT INTO kv(scope, key, value) VALUES(?, ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value",[a,b,(0,e.s)(c)])},async setMany(b){let c=await (0,d.c)();c.transaction(()=>{for(let[d,f]of Object.entries(b))c.run("INSERT INTO kv(scope, key, value) VALUES(?, ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value",[a,d,(0,e.s)(f)])})},async remove(b){(await (0,d.c)()).run("DELETE FROM kv WHERE scope = ? AND key = ?",[a,b])},async clear(){(await (0,d.c)()).run("DELETE FROM kv WHERE scope = ?",[a])}}}},33666:(a,b,c)=>{"use strict";c.d(b,{M7:()=>h,aB:()=>g,xE:()=>f});var d=c(38606);function e(a){if(!Array.isArray(a))return[];let b=new Set,c=[];for(let d of a){if("string"!=typeof d)continue;let a=d.trim();if(!a)continue;let e=a.toLowerCase();b.has(e)||(b.add(e),c.push(a))}return c}function f(a,b){if(1!==a&&!0!==a)return{restricted:!1,allow:[]};let c=[];if("string"==typeof b&&b)try{c=JSON.parse(b)}catch{c=[]}return{restricted:!0,allow:e(c)}}function g(a){let b=a||d.M0;return{accessRestricted:+!!b.restricted,accessAllow:JSON.stringify(b.restricted?e(b.allow):[])}}function h(a){if(!a||"object"!=typeof a||Array.isArray(a))return{ok:!1,error:"access must be an object { restricted, allow }"};let b=Object.keys(a).filter(a=>"restricted"!==a&&"allow"!==a);if(b.length)return{ok:!1,error:`access: unexpected field(s) ${b.join(", ")}`};if("boolean"!=typeof a.restricted)return{ok:!1,error:"access.restricted must be a boolean"};let c=void 0===a.allow?[]:a.allow;return!Array.isArray(c)||c.some(a=>"string"!=typeof a)?{ok:!1,error:"access.allow must be an array of strings"}:c.length>d.lO?{ok:!1,error:`access.allow has more than ${d.lO} entries`}:c.some(a=>a.trim().length>d.AM)?{ok:!1,error:`access.allow entries must be at most ${d.AM} characters`}:{ok:!0,value:{restricted:a.restricted,allow:e(c)}}}},36366:(a,b,c)=>{"use strict";c.d(b,{c:()=>k});var d=c(95658);global._dbAdapter||(global._dbAdapter={instance:null,initPromise:null,logged:!1});let e=global._dbAdapter;async function f(){if(!process.versions.bun)return null;try{let{createBunSqliteAdapter:a}=await c.e(4739).then(c.bind(c,24739));return await a(d.AL)}catch(a){return console.warn(`[DB] bun:sqlite unavailable: ${a.message}`),null}}async function g(){if(process.versions.bun)return null;let[a]=process.versions.node.split(".").map(Number);if(a>=24)return null;try{let{createBetterSqliteAdapter:a}=await c.e(5258).then(c.bind(c,25258));return a(d.AL)}catch(a){return console.warn(`[DB] better-sqlite3 unavailable: ${a.message}`),null}}async function h(){if(process.versions.bun)return null;let[a,b]=process.versions.node.split(".").map(Number);if(a<22||22===a&&b<5)return null;try{let{createNodeSqliteAdapter:a}=await c.e(8520).then(c.bind(c,88520));return await a(d.AL)}catch(a){return console.warn(`[DB] node:sqlite unavailable: ${a.message}`),null}}async function i(){try{let{createSqlJsAdapter:a}=await c.e(3593).then(c.bind(c,53593));return await a(d.AL)}catch(a){return console.warn(`[DB] sql.js unavailable: ${a.message}`),null}}async function j(){(0,d.Jh)();let a=await f();if(a||(a=await g()),a||(a=await h()),a||(a=await i()),!a)throw Error("[DB] No SQLite driver available (bun/better/node/sql.js all failed)");e.logged||(console.log(`[DB] Driver: ${a.driver} | file: ${d.AL}`),e.logged=!0);let{runMigrationOnce:b}=await c.e(5217).then(c.bind(c,45217));return await b(a),a}async function k(){return e.instance?e.instance:(e.initPromise||(e.initPromise=j().then(a=>(e.instance=a,a))),e.initPromise)}},38606:(a,b,c)=>{"use strict";c.d(b,{AM:()=>e,Cq:()=>i,M0:()=>f,WR:()=>h,YR:()=>g,lO:()=>d});let d=200,e=256,f=Object.freeze({restricted:!1,allow:Object.freeze([])}),g=Object.freeze(["webSearch","webFetch"]),h="combo";function i(a){return`This API key is not allowed to use model "${a}"`}},42655:(a,b,c)=>{"use strict";c.d(b,{Xx:()=>m,exportSettings:()=>n,getRawSetting:()=>l,getSettings:()=>k,vZ:()=>i});var d=c(36366),e=c(644);let f={cloudEnabled:!1,tunnelEnabled:!1,tunnelUrl:"",tunnelProvider:"cloudflare",tailscaleEnabled:!1,tailscaleUrl:"",stickyRoundRobinLimit:3,providerStrategies:{},quotaVisibility:{},comboStrategy:"fallback",comboStickyRoundRobinLimit:1,comboStrategies:{},capacityAdapter:{vision:{enabled:!0,roundRobin:!1,models:[]},pdf:{enabled:!1,roundRobin:!1,models:[]},audioInput:{enabled:!0,roundRobin:!1,models:[]},videoInput:{enabled:!1,roundRobin:!1,models:[]}},requireLogin:!0,requireApiKey:!0,tunnelDashboardAccess:!0,authMode:"password",ssoType:"oidc",oidcIssuerUrl:"",oidcClientId:"",oidcClientSecret:"",oidcScopes:"openid profile email",oidcLoginLabel:"Sign in with OIDC",samlEntryPoint:"",samlIssuer:"urn:9router:sp",samlCert:"",samlLoginLabel:"Sign in with SAML SSO",samlAttributeEmail:"email",samlAttributeName:"name",enableObservability:!1,observabilityMaxRecords:1e3,observabilityBatchSize:20,observabilityFlushIntervalMs:5e3,observabilityMaxJsonSize:5,outboundProxyEnabled:!1,outboundProxyUrl:"",outboundNoProxy:"",mitmRouterBaseUrl:"http://localhost:20128",dnsToolEnabled:{},rtkEnabled:!0,headroomEnabled:!1,headroomUrl:process.env.HEADROOM_URL||"http://localhost:8787",headroomCompressUserMessages:!1,headroomTimeoutMs:3e3,cavemanEnabled:!1,cavemanLevel:"full",ponytailEnabled:!1,ponytailLevel:"full",pxpipeEnabled:!1,pxpipeAutoInstall:!0,pxpipeMinChars:25e3,pxpipeTimeoutMs:15e3,providerOverrides:{}};async function g(){let a=(await (0,d.c)()).get("SELECT data FROM settings WHERE id = 1");return a?(0,e.q)(a.data,{}):{}}let h=null;function i(){h=null}function j(a){let b={...f,...a||{}};for(let[a,c]of Object.entries(f))void 0===b[a]&&("outboundProxyEnabled"===a&&"string"==typeof b.outboundProxyUrl&&b.outboundProxyUrl.trim()?b[a]=!0:b[a]=c);if(b.capacityAdapter&&"object"==typeof b.capacityAdapter)for(let a of Object.keys(b.capacityAdapter)){let c=b.capacityAdapter[a];Array.isArray(c?.models)&&(c.models=c.models.map(a=>"oc/mimo-v2.5-free"===a?"oc/mimo-v2.6-flash-free":a))}return b}async function k(){return h||(h=j(await g())),{...h}}async function l(a){let b=await g();return b?b[a]:void 0}async function m(a){let b,c=await (0,d.c)();c.transaction(function(){let d=c.get("SELECT data FROM settings WHERE id = 1");b={...d?(0,e.q)(d.data,{}):{},...a},c.run("INSERT INTO settings(id, data) VALUES(1, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data",[(0,e.s)(b)])});let f=j(b);return h=f,{...f}}async function n(){return await g()}},49120:(a,b,c)=>{"use strict";c.d(b,{n:()=>l});var d=c(73024),e=c.n(d),f=c(33873),g=c.n(f),h=c(21820),i=c.n(h);let j="9router";function k(){return"win32"===process.platform?g().join(process.env.APPDATA||g().join(i().homedir(),"AppData","Roaming"),j):g().join(i().homedir(),`.${j}`)}let l=function(){let a=process.env.DATA_DIR;if(!a)return k();if("win32"===process.platform&&/^\//.test(a))return console.warn(`[DATA_DIR] '${a}' is a Unix path on Windows → fallback to default`),k();try{return e().mkdirSync(a,{recursive:!0}),a}catch(b){if(b?.code==="EACCES"||b?.code==="EPERM")return console.warn(`[DATA_DIR] '${a}' not writable → fallback ~/.${j}`),k();throw b}}()},62674:(a,b,c)=>{"use strict";function d(a,b,c=null){let e=a.get("SELECT value FROM _meta WHERE key = ?",[b]);return e?e.value:c}function e(a,b,c){a.run("INSERT INTO _meta(key, value) VALUES(?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value",[b,String(c)])}c.d(b,{dy:()=>d,np:()=>e}),c(36366)},74452:(a,b,c)=>{"use strict";c.r(b),c.d(b,{createApiKey:()=>l,deleteApiKey:()=>n,getApiKeyById:()=>j,getApiKeyByKey:()=>k,getApiKeys:()=>i,updateApiKey:()=>m,validateApiKey:()=>o});var d=c(94755),e=c(36366),f=c(33666),g=c(38606);function h(a){return a?{id:a.id,key:a.key,name:a.name,machineId:a.machineId,isActive:1===a.isActive||!0===a.isActive,createdAt:a.createdAt,access:(0,f.xE)(a.accessRestricted,a.accessAllow)}:null}async function i(){return(await (0,e.c)()).all("SELECT * FROM apiKeys ORDER BY createdAt ASC").map(h)}async function j(a){return h((await (0,e.c)()).get("SELECT * FROM apiKeys WHERE id = ?",[a]))}async function k(a){return a?h((await (0,e.c)()).get("SELECT * FROM apiKeys WHERE key = ?",[a])):null}async function l(a,b){if(!b)throw Error("machineId is required");let h=await (0,e.c)(),{generateApiKeyWithMachine:i}=await c.e(6844).then(c.bind(c,86844)),j=i(b),k={id:(0,d.A)(),name:a,key:j.key,machineId:b,isActive:!0,createdAt:new Date().toISOString(),access:{restricted:!1,allow:[]}},l=(0,f.aB)(g.M0);return h.run("INSERT INTO apiKeys(id, key, name, machineId, isActive, createdAt, accessRestricted, accessAllow) VALUES(?, ?, ?, ?, ?, ?, ?, ?)",[k.id,k.key,k.name,k.machineId,1,k.createdAt,l.accessRestricted,l.accessAllow]),k}async function m(a,b){let c=await (0,e.c)(),d=null;return c.transaction(()=>{let e=c.get("SELECT * FROM apiKeys WHERE id = ?",[a]);if(!e)return;let g={...h(e),...b},i=(0,f.aB)(g.access);c.run("UPDATE apiKeys SET key = ?, name = ?, machineId = ?, isActive = ?, accessRestricted = ?, accessAllow = ? WHERE id = ?",[g.key,g.name,g.machineId,+!!g.isActive,i.accessRestricted,i.accessAllow,a]),d=h(c.get("SELECT * FROM apiKeys WHERE id = ?",[a]))}),d}async function n(a){let b=(await (0,e.c)()).run("DELETE FROM apiKeys WHERE id = ?",[a]);return(b?.changes??0)>0}async function o(a){let b=(await (0,e.c)()).get("SELECT isActive FROM apiKeys WHERE key = ?",[a]);return!!b&&(1===b.isActive||!0===b.isActive)}},78335:()=>{},83192:(a,b,c)=>{"use strict";c.d(b,{S8:()=>u.S8,E5:()=>V,bI:()=>i.cleanupProviderConnections,Iq:()=>s.createApiKey,jd:()=>t.jd,iE:()=>i.createProviderConnection,i0:()=>j.createProviderNode,ZO:()=>p,Lh:()=>s.deleteApiKey,CG:()=>t.CG,uL:()=>u.uL,h1:()=>u.h1,fv:()=>u.fv,TZ:()=>u.TZ,fK:()=>i.deleteProviderConnection,op:()=>i.deleteProviderConnectionsByProvider,Pc:()=>j.deleteProviderNode,Yd:()=>r,tm:()=>y,oF:()=>z,zP:()=>ah,rg:()=>Q,yg:()=>s.getApiKeyById,PX:()=>s.getApiKeys,j$:()=>U,L:()=>t.L,Dj:()=>t.Dj,Uv:()=>t.Uv,uv:()=>u.uv,vF:()=>x,Lk:()=>af,c:()=>u.getMitmAlias,OM:()=>u.OM,r4:()=>v.r4,Mc:()=>i.getProviderConnectionById,P:()=>i.getProviderConnections,Qu:()=>j.getProviderNodeById,Fh:()=>j.getProviderNodes,hr:()=>o,ui:()=>n,Zx:()=>W,SL:()=>ae,mt:()=>f.getSettings,BY:()=>T,K1:()=>ai,VT:()=>v.VT,yF:()=>v.yF,ox:()=>ad,sZ:()=>R,L9:()=>u.L9,o5:()=>u.o5,_V:()=>I,uw:()=>P,XW:()=>s.updateApiKey,oG:()=>t.oG,KJ:()=>v.KJ,rj:()=>i.updateProviderConnection,ho:()=>j.updateProviderNode,Q_:()=>q,Xx:()=>f.Xx,ek:()=>s.validateApiKey});var d=c(36366),e=c(644),f=c(42655),g=c(33666),h=c(38606),i=c(5781),j=c(1129),k=c(94755);function l(a){return a?{...(0,e.q)(a.data,{}),id:a.id,isActive:1===a.isActive||!0===a.isActive,testStatus:a.testStatus,createdAt:a.createdAt,updatedAt:a.updatedAt}:null}function m(a,b){let c=function(a){let{id:b,isActive:c,testStatus:d,createdAt:f,updatedAt:g,...h}=a;return{id:b,isActive:+(!1!==c),testStatus:d??null,data:(0,e.s)(h),createdAt:f,updatedAt:g}}(b);a.run(`INSERT INTO proxyPools(id, isActive, testStatus, data, createdAt, updatedAt)
9
+ data=excluded.data, updatedAt=excluded.updatedAt`,[c.id,c.provider,c.authType,c.name,c.email,c.priority,c.isActive,c.data,c.createdAt,c.updatedAt])}async function k(a={}){let b=await (0,e.c)(),c=[],d=[];a.provider&&(c.push("provider = ?"),d.push(a.provider)),void 0!==a.isActive&&(c.push("isActive = ?"),d.push(+!!a.isActive));let f=`SELECT * FROM providerConnections${c.length?` WHERE ${c.join(" AND ")}`:""}`,g=b.all(f,d).map(i);return g.sort((a,b)=>(a.priority||999)-(b.priority||999)),g}async function l(a){return i((await (0,e.c)()).get("SELECT * FROM providerConnections WHERE id = ?",[a]))}function m(a,b){let c=a.all("SELECT * FROM providerConnections WHERE provider = ?",[b]).map(i);c.sort((a,b)=>{let c=(a.priority||0)-(b.priority||0);if(0!==c)return c;let d=new Date(b.updatedAt||0)-new Date(a.updatedAt||0);if(0!==d)return d;let e=new Date(b.createdAt||0)-new Date(a.createdAt||0);return 0!==e?e:a.id<b.id?-1:+(a.id>b.id)}),c.forEach((b,c)=>{let d=c+1;(b.priority||0)!==d&&a.run("UPDATE providerConnections SET priority = ? WHERE id = ?",[d,b.id])})}async function n(a){let b,c=await (0,e.c)(),f=new Date().toISOString();return c.transaction(()=>{var e;let k="apikey"===a.authType&&!!a.name,l=k?c.all("SELECT * FROM providerConnections WHERE provider = ? AND authType = ? AND name = ?",[a.provider,"apikey",a.name]).map(i):c.all("SELECT * FROM providerConnections WHERE provider = ?",[a.provider]).map(i),m=k?c.get("SELECT COUNT(*) AS n FROM providerConnections WHERE provider = ?",[a.provider])?.n??l.length:l.length,n=null;if("oauth"===a.authType&&a.email){let b=a.providerSpecificData?.username,c=a.providerSpecificData?.chatgptAccountId;n=l.find(d=>{if("oauth"!==d.authType||d.email!==a.email)return!1;if("codex"===a.provider){let a=d.providerSpecificData?.chatgptAccountId;return!!c&&!!a&&c===a}let e=d.providerSpecificData?.chatgptAccountId;if(c&&e)return c===e;if(c&&!e||!c&&e)return!1;let f=d.providerSpecificData?.username;return b&&f?b===f:!b&&!f})}else"apikey"===a.authType&&a.name&&(n=l.find(b=>"apikey"===b.authType&&b.name===a.name));if(n){if(!1===a.allowOverwrite){let b=Error(`A connection named "${n.name}" already exists for provider "${a.provider}". Pass allowOverwrite: true to replace it.`);throw b.code="PROVIDER_NAME_CONFLICT",b.existingId=n.id,b.existingName=n.name,b}let d=h(n,a),e={...n,...d,updatedAt:f};j(c,e),b=e;return}let o=a.name||null;o||"oauth"!==a.authType&&"access_token"!==a.authType||(e=a.email||`Account ${m+1}`,o="github"===a.provider&&(a.providerSpecificData?.githubLogin||a.providerSpecificData?.githubEmail||a.email||a.providerSpecificData?.githubName)||e);let p=a.priority;if(!p){let b=c.get("SELECT MAX(priority) AS m FROM providerConnections WHERE provider = ?",[a.provider]);p=(b?.m||0)+1}let q={id:(0,d.A)(),provider:a.provider,authType:a.authType||"oauth",name:o,priority:p,isActive:void 0===a.isActive||a.isActive,createdAt:f,updatedAt:f};for(let b of g)void 0!==a[b]&&null!==a[b]&&(q[b]=a[b]);a.providerSpecificData&&Object.keys(a.providerSpecificData).length>0&&(q.providerSpecificData=a.providerSpecificData),void 0!==a.email&&(q.email=a.email),j(c,q),b=q}),b}async function o(a,b){let c,d=await (0,e.c)();return d.transaction(()=>{let e=d.get("SELECT * FROM providerConnections WHERE id = ?",[a]);if(!e){c=null;return}let f=i(e),g=h(f,b),k={...f,...g,updatedAt:new Date().toISOString()};j(d,k),void 0!==b.priority&&m(d,f.provider),c=k}),c}async function p(a){let b=await (0,e.c)(),c=!1;return b.transaction(()=>{let d=b.get("SELECT provider FROM providerConnections WHERE id = ?",[a]);d&&(b.run("DELETE FROM providerConnections WHERE id = ?",[a]),m(b,d.provider),c=!0)}),c}async function q(a){let b=await (0,e.c)(),c=b.get("SELECT COUNT(*) AS n FROM providerConnections WHERE provider = ?",[a]);return b.run("DELETE FROM providerConnections WHERE provider = ?",[a]),c?.n||0}async function r(a){let b=await (0,e.c)();b.transaction(()=>m(b,a))}async function s(){let a=await (0,e.c)(),b=["displayName","email","globalPriority","defaultModel","accessToken","refreshToken","expiresAt","tokenType","scope","projectId","apiKey","testStatus","lastTested","lastError","lastErrorAt","rateLimitedUntil","expiresIn","consecutiveUseCount"],c=0;return a.transaction(()=>{for(let d of a.all("SELECT * FROM providerConnections")){let e=i(d),f=!1;for(let a of b)(null===e[a]||void 0===e[a])&&a in e&&(delete e[a],c++,f=!0);e.providerSpecificData&&0===Object.keys(e.providerSpecificData).length&&(delete e.providerSpecificData,c++,f=!0),f&&j(a,e)}}),c}},9460:(a,b,c)=>{"use strict";c.d(b,{L9:()=>u,OM:()=>j,S8:()=>p,TZ:()=>s,fv:()=>m,getMitmAlias:()=>t,h1:()=>r,o5:()=>l,uL:()=>q,uv:()=>o});var d=c(36366),e=c(644),f=c(22846);let g=(0,f.U)("modelAliases"),h=(0,f.U)("customModels"),i=(0,f.U)("mitmAlias");async function j(){let a=await g.getAll(),b={};for(let[c,d]of Object.entries(a)){let a=k(d);a&&(b[c]=a)}return b}function k(a){return"string"==typeof a?a.trim():a&&"object"==typeof a&&a.provider&&a.model?`${a.provider}/${a.model}`:""}async function l(a,b){if("string"!=typeof a||!a.trim()||"string"!=typeof b||!b.trim())throw Error(`invalid model alias ${JSON.stringify(a)} → ${JSON.stringify(b)}`);await g.set(a.trim(),b.trim())}async function m(a){await g.remove(a)}function n(a,b,c){return`${a}|${b}|${c}`}async function o(){return Object.values(await h.getAll())}async function p({providerAlias:a,id:b,type:c="llm",name:f,caps:g,transport:h}){let i=n(a,b,c),j=await (0,d.c)(),k=!1;return j.transaction(()=>{let d=j.get("SELECT value FROM kv WHERE scope = 'customModels' AND key = ?",[i]);if(d){let a={...(0,e.q)(d.value)||{},...f?{name:f}:{},...g?{caps:g}:{},...h?{transport:h}:{}};j.run("UPDATE kv SET value = ? WHERE scope = 'customModels' AND key = ?",[(0,e.s)(a),i]);return}let l=(0,e.s)({providerAlias:a,id:b,type:c,name:f||b,...g?{caps:g}:{},...h?{transport:h}:{}});j.run("INSERT INTO kv(scope, key, value) VALUES('customModels', ?, ?)",[i,l]),k=!0}),k}async function q({providerAlias:a,id:b,type:c="llm"}){await h.remove(n(a,b,c))}async function r(a){let b=[a].flat().filter(Boolean);if(!b.length)return 0;let c=await (0,d.c)(),e=0;return c.transaction(()=>{for(let{key:a}of c.all("SELECT key FROM kv WHERE scope = 'customModels'"))b.some(b=>a.startsWith(`${b}|`))&&(c.run("DELETE FROM kv WHERE scope = 'customModels' AND key = ?",[a]),e++)}),e}async function s(a){let b=[a].flat().filter(Boolean);if(!b.length)return 0;let c=await (0,d.c)(),f=0;return c.transaction(()=>{for(let{key:a,value:d}of c.all("SELECT key, value FROM kv WHERE scope = 'modelAliases'")){let g=k((0,e.q)(d,""));b.some(a=>g.startsWith(`${a}/`))&&(c.run("DELETE FROM kv WHERE scope = 'modelAliases' AND key = ?",[a]),f++)}}),f}async function t(a){return a?await i.get(a)||{}:await i.getAll()}async function u(a,b){await i.set(a,b||{})}},22846:(a,b,c)=>{"use strict";c.d(b,{U:()=>f});var d=c(36366),e=c(644);function f(a){return{async get(b,c=null){let f=(await (0,d.c)()).get("SELECT value FROM kv WHERE scope = ? AND key = ?",[a,b]);return f?(0,e.q)(f.value,c):c},async getAll(){let b=(await (0,d.c)()).all("SELECT key, value FROM kv WHERE scope = ?",[a]),c={};for(let a of b)c[a.key]=(0,e.q)(a.value);return c},async set(b,c){(await (0,d.c)()).run("INSERT INTO kv(scope, key, value) VALUES(?, ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value",[a,b,(0,e.s)(c)])},async setMany(b){let c=await (0,d.c)();c.transaction(()=>{for(let[d,f]of Object.entries(b))c.run("INSERT INTO kv(scope, key, value) VALUES(?, ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value",[a,d,(0,e.s)(f)])})},async remove(b){(await (0,d.c)()).run("DELETE FROM kv WHERE scope = ? AND key = ?",[a,b])},async clear(){(await (0,d.c)()).run("DELETE FROM kv WHERE scope = ?",[a])}}}},33666:(a,b,c)=>{"use strict";c.d(b,{M7:()=>h,aB:()=>g,xE:()=>f});var d=c(38606);function e(a){if(!Array.isArray(a))return[];let b=new Set,c=[];for(let d of a){if("string"!=typeof d)continue;let a=d.trim();if(!a)continue;let e=a.toLowerCase();b.has(e)||(b.add(e),c.push(a))}return c}function f(a,b){if(1!==a&&!0!==a)return{restricted:!1,allow:[]};let c=[];if("string"==typeof b&&b)try{c=JSON.parse(b)}catch{c=[]}return{restricted:!0,allow:e(c)}}function g(a){let b=a||d.M0;return{accessRestricted:+!!b.restricted,accessAllow:JSON.stringify(b.restricted?e(b.allow):[])}}function h(a){if(!a||"object"!=typeof a||Array.isArray(a))return{ok:!1,error:"access must be an object { restricted, allow }"};let b=Object.keys(a).filter(a=>"restricted"!==a&&"allow"!==a);if(b.length)return{ok:!1,error:`access: unexpected field(s) ${b.join(", ")}`};if("boolean"!=typeof a.restricted)return{ok:!1,error:"access.restricted must be a boolean"};let c=void 0===a.allow?[]:a.allow;return!Array.isArray(c)||c.some(a=>"string"!=typeof a)?{ok:!1,error:"access.allow must be an array of strings"}:c.length>d.lO?{ok:!1,error:`access.allow has more than ${d.lO} entries`}:c.some(a=>a.trim().length>d.AM)?{ok:!1,error:`access.allow entries must be at most ${d.AM} characters`}:{ok:!0,value:{restricted:a.restricted,allow:e(c)}}}},36366:(a,b,c)=>{"use strict";c.d(b,{c:()=>k});var d=c(95658);global._dbAdapter||(global._dbAdapter={instance:null,initPromise:null,logged:!1});let e=global._dbAdapter;async function f(){if(!process.versions.bun)return null;try{let{createBunSqliteAdapter:a}=await c.e(4739).then(c.bind(c,24739));return await a(d.AL)}catch(a){return console.warn(`[DB] bun:sqlite unavailable: ${a.message}`),null}}async function g(){if(process.versions.bun)return null;let[a]=process.versions.node.split(".").map(Number);if(a>=24)return null;try{let{createBetterSqliteAdapter:a}=await c.e(5258).then(c.bind(c,25258));return a(d.AL)}catch(a){return console.warn(`[DB] better-sqlite3 unavailable: ${a.message}`),null}}async function h(){if(process.versions.bun)return null;let[a,b]=process.versions.node.split(".").map(Number);if(a<22||22===a&&b<5)return null;try{let{createNodeSqliteAdapter:a}=await c.e(8520).then(c.bind(c,88520));return await a(d.AL)}catch(a){return console.warn(`[DB] node:sqlite unavailable: ${a.message}`),null}}async function i(){try{let{createSqlJsAdapter:a}=await c.e(3593).then(c.bind(c,53593));return await a(d.AL)}catch(a){return console.warn(`[DB] sql.js unavailable: ${a.message}`),null}}async function j(){(0,d.Jh)();let a=await f();if(a||(a=await g()),a||(a=await h()),a||(a=await i()),!a)throw Error("[DB] No SQLite driver available (bun/better/node/sql.js all failed)");e.logged||(console.log(`[DB] Driver: ${a.driver} | file: ${d.AL}`),e.logged=!0);let{runMigrationOnce:b}=await c.e(5217).then(c.bind(c,45217));return await b(a),a}async function k(){return e.instance?e.instance:(e.initPromise||(e.initPromise=j().then(a=>(e.instance=a,a))),e.initPromise)}},38606:(a,b,c)=>{"use strict";c.d(b,{AM:()=>e,Cq:()=>i,M0:()=>f,WR:()=>h,YR:()=>g,lO:()=>d});let d=200,e=256,f=Object.freeze({restricted:!1,allow:Object.freeze([])}),g=Object.freeze(["webSearch","webFetch"]),h="combo";function i(a){return`This API key is not allowed to use model "${a}"`}},42655:(a,b,c)=>{"use strict";c.d(b,{Xx:()=>m,exportSettings:()=>n,getRawSetting:()=>l,getSettings:()=>k,vZ:()=>i});var d=c(36366),e=c(644);let f={cloudEnabled:!1,tunnelEnabled:!1,tunnelUrl:"",tunnelProvider:"cloudflare",tailscaleEnabled:!1,tailscaleUrl:"",stickyRoundRobinLimit:3,providerStrategies:{},quotaVisibility:{},comboStrategy:"fallback",comboStickyRoundRobinLimit:1,comboStrategies:{},capacityAdapter:{vision:{enabled:!0,roundRobin:!1,models:[]},pdf:{enabled:!1,roundRobin:!1,models:[]},audioInput:{enabled:!0,roundRobin:!1,models:[]},videoInput:{enabled:!1,roundRobin:!1,models:[]}},requireLogin:!0,requireApiKey:!0,tunnelDashboardAccess:!0,authMode:"password",ssoType:"oidc",oidcIssuerUrl:"",oidcClientId:"",oidcClientSecret:"",oidcScopes:"openid profile email",oidcLoginLabel:"Sign in with OIDC",samlEntryPoint:"",samlIssuer:"urn:9router:sp",samlCert:"",samlLoginLabel:"Sign in with SAML SSO",samlAttributeEmail:"email",samlAttributeName:"name",enableObservability:!1,observabilityMaxRecords:1e3,observabilityBatchSize:20,observabilityFlushIntervalMs:5e3,observabilityMaxJsonSize:5,outboundProxyEnabled:!1,outboundProxyUrl:"",outboundNoProxy:"",mitmRouterBaseUrl:"http://localhost:20128",dnsToolEnabled:{},rtkEnabled:!0,headroomEnabled:!1,headroomUrl:process.env.HEADROOM_URL||"http://localhost:8787",headroomCompressUserMessages:!1,headroomTimeoutMs:3e3,cavemanEnabled:!1,cavemanLevel:"full",ponytailEnabled:!1,ponytailLevel:"full",pxpipeEnabled:!1,pxpipeAutoInstall:!0,pxpipeMinChars:25e3,pxpipeTimeoutMs:15e3,providerOverrides:{}};async function g(){let a=(await (0,d.c)()).get("SELECT data FROM settings WHERE id = 1");return a?(0,e.q)(a.data,{}):{}}let h=null;function i(){h=null}function j(a){let b={...f,...a||{}};for(let[a,c]of Object.entries(f))void 0===b[a]&&("outboundProxyEnabled"===a&&"string"==typeof b.outboundProxyUrl&&b.outboundProxyUrl.trim()?b[a]=!0:b[a]=c);if(b.capacityAdapter&&"object"==typeof b.capacityAdapter)for(let a of Object.keys(b.capacityAdapter)){let c=b.capacityAdapter[a];Array.isArray(c?.models)&&(c.models=c.models.map(a=>"oc/mimo-v2.5-free"===a?"oc/mimo-v2.6-flash-free":a))}return b}async function k(){return h||(h=j(await g())),{...h}}async function l(a){let b=await g();return b?b[a]:void 0}async function m(a){let b,c=await (0,d.c)();c.transaction(function(){let d=c.get("SELECT data FROM settings WHERE id = 1");b={...d?(0,e.q)(d.data,{}):{},...a},c.run("INSERT INTO settings(id, data) VALUES(1, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data",[(0,e.s)(b)])});let f=j(b);return h=f,{...f}}async function n(){return await g()}},49120:(a,b,c)=>{"use strict";c.d(b,{n:()=>l});var d=c(73024),e=c.n(d),f=c(33873),g=c.n(f),h=c(21820),i=c.n(h);let j="9router";function k(){return"win32"===process.platform?g().join(process.env.APPDATA||g().join(i().homedir(),"AppData","Roaming"),j):g().join(i().homedir(),`.${j}`)}let l=function(){let a=process.env.DATA_DIR;if(!a)return k();if("win32"===process.platform&&/^\//.test(a))return console.warn(`[DATA_DIR] '${a}' is a Unix path on Windows → fallback to default`),k();try{return e().mkdirSync(a,{recursive:!0}),a}catch(b){if(b?.code==="EACCES"||b?.code==="EPERM")return console.warn(`[DATA_DIR] '${a}' not writable → fallback ~/.${j}`),k();throw b}}()},62674:(a,b,c)=>{"use strict";function d(a,b,c=null){let e=a.get("SELECT value FROM _meta WHERE key = ?",[b]);return e?e.value:c}function e(a,b,c){a.run("INSERT INTO _meta(key, value) VALUES(?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value",[b,String(c)])}c.d(b,{dy:()=>d,np:()=>e}),c(36366)},74452:(a,b,c)=>{"use strict";c.r(b),c.d(b,{createApiKey:()=>l,deleteApiKey:()=>n,getApiKeyById:()=>j,getApiKeyByKey:()=>k,getApiKeys:()=>i,updateApiKey:()=>m,validateApiKey:()=>o});var d=c(94755),e=c(36366),f=c(33666),g=c(38606);function h(a){return a?{id:a.id,key:a.key,name:a.name,machineId:a.machineId,isActive:1===a.isActive||!0===a.isActive,createdAt:a.createdAt,access:(0,f.xE)(a.accessRestricted,a.accessAllow)}:null}async function i(){return(await (0,e.c)()).all("SELECT * FROM apiKeys ORDER BY createdAt ASC").map(h)}async function j(a){return h((await (0,e.c)()).get("SELECT * FROM apiKeys WHERE id = ?",[a]))}async function k(a){return a?h((await (0,e.c)()).get("SELECT * FROM apiKeys WHERE key = ?",[a])):null}async function l(a,b){if(!b)throw Error("machineId is required");let h=await (0,e.c)(),{generateApiKeyWithMachine:i}=await c.e(6844).then(c.bind(c,86844)),j=i(b),k={id:(0,d.A)(),name:a,key:j.key,machineId:b,isActive:!0,createdAt:new Date().toISOString(),access:{restricted:!1,allow:[]}},l=(0,f.aB)(g.M0);return h.run("INSERT INTO apiKeys(id, key, name, machineId, isActive, createdAt, accessRestricted, accessAllow) VALUES(?, ?, ?, ?, ?, ?, ?, ?)",[k.id,k.key,k.name,k.machineId,1,k.createdAt,l.accessRestricted,l.accessAllow]),k}async function m(a,b){let c=await (0,e.c)(),d=null;return c.transaction(()=>{let e=c.get("SELECT * FROM apiKeys WHERE id = ?",[a]);if(!e)return;let g={...h(e),...b},i=(0,f.aB)(g.access);c.run("UPDATE apiKeys SET key = ?, name = ?, machineId = ?, isActive = ?, accessRestricted = ?, accessAllow = ? WHERE id = ?",[g.key,g.name,g.machineId,+!!g.isActive,i.accessRestricted,i.accessAllow,a]),d=h(c.get("SELECT * FROM apiKeys WHERE id = ?",[a]))}),d}async function n(a){let b=(await (0,e.c)()).run("DELETE FROM apiKeys WHERE id = ?",[a]);return(b?.changes??0)>0}async function o(a){let b=(await (0,e.c)()).get("SELECT isActive FROM apiKeys WHERE key = ?",[a]);return!!b&&(1===b.isActive||!0===b.isActive)}},78335:()=>{},83192:(a,b,c)=>{"use strict";c.d(b,{S8:()=>u.S8,bI:()=>i.cleanupProviderConnections,Iq:()=>s.createApiKey,jd:()=>t.jd,iE:()=>i.createProviderConnection,i0:()=>j.createProviderNode,ZO:()=>p,Lh:()=>s.deleteApiKey,CG:()=>t.CG,uL:()=>u.uL,h1:()=>u.h1,fv:()=>u.fv,TZ:()=>u.TZ,fK:()=>i.deleteProviderConnection,op:()=>i.deleteProviderConnectionsByProvider,Pc:()=>j.deleteProviderNode,Yd:()=>r,tm:()=>y,oF:()=>z,zP:()=>ag,rg:()=>Q,yg:()=>s.getApiKeyById,PX:()=>s.getApiKeys,j$:()=>U,L:()=>t.L,Dj:()=>t.Dj,Uv:()=>t.Uv,uv:()=>u.uv,vF:()=>x,Lk:()=>ae,c:()=>u.getMitmAlias,OM:()=>u.OM,r4:()=>v.r4,Mc:()=>i.getProviderConnectionById,P:()=>i.getProviderConnections,Qu:()=>j.getProviderNodeById,Fh:()=>j.getProviderNodes,hr:()=>o,ui:()=>n,Zx:()=>V,SL:()=>ad,mt:()=>f.getSettings,BY:()=>T,K1:()=>ah,VT:()=>v.VT,yF:()=>v.yF,ox:()=>ac,sZ:()=>R,L9:()=>u.L9,o5:()=>u.o5,_V:()=>I,uw:()=>P,XW:()=>s.updateApiKey,oG:()=>t.oG,KJ:()=>v.KJ,rj:()=>i.updateProviderConnection,ho:()=>j.updateProviderNode,Q_:()=>q,Xx:()=>f.Xx,ek:()=>s.validateApiKey});var d=c(36366),e=c(644),f=c(42655),g=c(33666),h=c(38606),i=c(5781),j=c(1129),k=c(94755);function l(a){return a?{...(0,e.q)(a.data,{}),id:a.id,isActive:1===a.isActive||!0===a.isActive,testStatus:a.testStatus,createdAt:a.createdAt,updatedAt:a.updatedAt}:null}function m(a,b){let c=function(a){let{id:b,isActive:c,testStatus:d,createdAt:f,updatedAt:g,...h}=a;return{id:b,isActive:+(!1!==c),testStatus:d??null,data:(0,e.s)(h),createdAt:f,updatedAt:g}}(b);a.run(`INSERT INTO proxyPools(id, isActive, testStatus, data, createdAt, updatedAt)
10
10
  VALUES(?, ?, ?, ?, ?, ?)
11
11
  ON CONFLICT(id) DO UPDATE SET
12
12
  isActive=excluded.isActive, testStatus=excluded.testStatus,
@@ -18,4 +18,4 @@ exports.id=9100,exports.ids=[9100],exports.modules={644:(a,b,c)=>{"use strict";f
18
18
  AND COALESCE(apiKey, '') = COALESCE(?, '')
19
19
  AND promptTokens = ?
20
20
  AND completionTokens = ?
21
- ORDER BY id DESC LIMIT 1`,[a.timestamp,a.provider||null,a.model||null,a.connectionId||null,a.apiKey||null,f,g]);if(t){!t.endpoint&&a.endpoint&&b.run("UPDATE usageHistory SET endpoint = ? WHERE id = ?",[a.endpoint,t.id]);return}b.run("INSERT INTO usageHistory(timestamp, provider, model, connectionId, apiKey, endpoint, promptTokens, completionTokens, cost, status, tokens, meta) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",[a.timestamp,a.provider||null,a.model||null,a.connectionId||null,a.apiKey||null,a.endpoint||null,f,g,a.cost||0,a.status||"ok",(0,e.s)(c),(0,e.s)({})]);let u=(i=(d=a.timestamp)?new Date(d):new Date,`${i.getFullYear()}-${String(i.getMonth()+1).padStart(2,"0")}-${String(i.getDate()).padStart(2,"0")}`),v=b.get("SELECT data FROM usageDaily WHERE dateKey = ?",[u]),w=v?(0,e.q)(v.data,{}):{requests:0,promptTokens:0,completionTokens:0,cost:0,byProvider:{},byModel:{},byAccount:{},byApiKey:{},byEndpoint:{}};j=a.tokens?.prompt_tokens||a.tokens?.input_tokens||0,k=a.tokens?.completion_tokens||a.tokens?.output_tokens||0,l=a.tokens?.cached_tokens||a.tokens?.cache_read_input_tokens||0,n={promptTokens:j,completionTokens:k,cachedTokens:l,cost:m=a.cost||0},w.requests=(w.requests||0)+1,w.promptTokens=(w.promptTokens||0)+j,w.completionTokens=(w.completionTokens||0)+k,w.cachedTokens=(w.cachedTokens||0)+l,w.cost=(w.cost||0)+m,w.byProvider||={},w.byModel||={},w.byAccount||={},w.byApiKey||={},w.byEndpoint||={},a.provider&&K(w.byProvider,a.provider,n),o=a.provider?`${a.model}|${a.provider}`:a.model,K(w.byModel,o,{...n,meta:{rawModel:a.model,provider:a.provider}}),a.connectionId&&K(w.byAccount,a.connectionId,{...n,meta:{rawModel:a.model,provider:a.provider}}),p=a.apiKey&&"string"==typeof a.apiKey?a.apiKey:"local-no-key",q=`${p}|${a.model}|${a.provider||"unknown"}`,K(w.byApiKey,q,{...n,meta:{rawModel:a.model,provider:a.provider,apiKey:a.apiKey||null}}),r=a.endpoint||"Unknown",s=`${r}|${a.model}|${a.provider||"unknown"}`,K(w.byEndpoint,s,{...n,meta:{endpoint:r,rawModel:a.model,provider:a.provider}}),b.run("INSERT INTO usageDaily(dateKey, data) VALUES(?, ?) ON CONFLICT(dateKey) DO UPDATE SET data = excluded.data",[u,(0,e.s)(w)]);let x=b.get("SELECT value FROM _meta WHERE key = 'totalRequestsLifetime'"),y=(x?parseInt(x.value,10):0)+1;b.run("INSERT INTO _meta(key, value) VALUES('totalRequestsLifetime', ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value",[String(y)]),h=!0}),h)&&(F.items.push(a),F.items.length>50&&(F.items=F.items.slice(-50)),J("update",250))}catch(a){console.error("Failed to save usage stats:",a)}}function S(a,b){if(null==b)return a.all("SELECT dateKey, data FROM usageDaily ORDER BY dateKey ASC");let c=new Date,d=new Date(c.getFullYear(),c.getMonth(),c.getDate()-b+1),e=`${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,"0")}-${String(d.getDate()).padStart(2,"0")}`;return a.all("SELECT dateKey, data FROM usageDaily WHERE dateKey >= ? ORDER BY dateKey ASC",[e])}async function T(a="all"){let b=await (0,d.c)(),[{getProviderConnections:f},{getApiKeys:g},{getProviderNodes:h}]=await Promise.all([Promise.resolve().then(c.bind(c,5781)),Promise.resolve().then(c.bind(c,74452)),Promise.resolve().then(c.bind(c,1129))]),i=[];try{i=await f()}catch{}let j={};for(let a of i)j[a.id]=a.name||a.email||a.id;let k={};try{for(let a of(await h()))a.id&&a.name&&(k[a.id]=a.name)}catch{}let l=[];try{l=await g()}catch{}let m={};for(let a of l)m[a.key]={name:a.name,id:a.id,createdAt:a.createdAt};let n=b.all("SELECT timestamp, provider, model, tokens, status FROM usageHistory ORDER BY id DESC LIMIT 100"),o=new Set,p={totalRequests:0,totalPromptTokens:0,totalCompletionTokens:0,totalCachedTokens:0,totalCost:0,byProvider:{},byModel:{},byAccount:{},byApiKey:{},byEndpoint:{},last10Minutes:[],pending:C,activeRequests:[],recentRequests:n.map(a=>{let b=(0,e.q)(a.tokens,{})||{};return{timestamp:a.timestamp,model:a.model,provider:a.provider||"",promptTokens:b.prompt_tokens||b.input_tokens||0,completionTokens:b.completion_tokens||b.output_tokens||0,cachedTokens:b.cached_tokens||b.cache_read_input_tokens||0,status:a.status||"ok"}}).filter(a=>{if(0===a.promptTokens&&0===a.completionTokens&&"ok"===a.status)return!1;let b=a.timestamp?a.timestamp.slice(0,16):"",c=`${a.model}|${a.provider}|${a.promptTokens}|${a.completionTokens}|${b}`;return!o.has(c)&&(o.add(c),!0)}).slice(0,20),errorProvider:Date.now()-D.ts<1e4?D.provider:""};for(let[a,b]of Object.entries(C.byAccount))for(let[c,d]of Object.entries(b))if(d>0){let b=j[a]||`Account ${a.slice(0,8)}...`,e=c.match(/^(.*) \((.*)\)$/);p.activeRequests.push({model:e?e[1]:c,provider:e?e[2]:"unknown",account:b,count:d})}let q=new Date,r=new Date(6e4*Math.floor(q.getTime()/6e4)),s=new Date(r.getTime()-54e4),t={};for(let a=0;a<10;a++){let b=r.getTime()-(9-a)*6e4;t[b]={requests:0,promptTokens:0,completionTokens:0,cost:0},p.last10Minutes.push(t[b])}for(let a of b.all("SELECT timestamp, promptTokens, completionTokens, cost FROM usageHistory WHERE timestamp >= ? AND timestamp <= ?",[s.toISOString(),q.toISOString()])){let b=6e4*Math.floor(new Date(a.timestamp).getTime()/6e4);t[b]&&(t[b].requests++,t[b].promptTokens+=a.promptTokens||0,t[b].completionTokens+=a.completionTokens||0,t[b].cost+=a.cost||0)}if("24h"!==a&&"today"!==a){let c={"7d":7,"30d":30,"60d":60}[a]||null;for(let a of S(b,c)){let b=a.dateKey,c=(0,e.q)(a.data,{});for(let[a,b]of(p.totalPromptTokens+=c.promptTokens||0,p.totalCompletionTokens+=c.completionTokens||0,p.totalCachedTokens+=c.cachedTokens||0,p.totalCost+=c.cost||0,Object.entries(c.byProvider||{})))p.byProvider[a]||(p.byProvider[a]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0}),p.byProvider[a].requests+=b.requests||0,p.byProvider[a].promptTokens+=b.promptTokens||0,p.byProvider[a].completionTokens+=b.completionTokens||0,p.byProvider[a].cachedTokens+=b.cachedTokens||0,p.byProvider[a].cost+=b.cost||0;for(let[a,d]of Object.entries(c.byModel||{})){let c=d.rawModel||a.split("|")[0],e=d.provider||a.split("|")[1]||"",f=e?`${c} (${e})`:c,g=k[e]||e;p.byModel[f]||(p.byModel[f]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0,rawModel:c,provider:g,lastUsed:b}),p.byModel[f].requests+=d.requests||0,p.byModel[f].promptTokens+=d.promptTokens||0,p.byModel[f].completionTokens+=d.completionTokens||0,p.byModel[f].cachedTokens+=d.cachedTokens||0,p.byModel[f].cost+=d.cost||0,b>(p.byModel[f].lastUsed||"")&&(p.byModel[f].lastUsed=b)}for(let[a,d]of Object.entries(c.byAccount||{})){let c=j[a]||`Account ${a.slice(0,8)}...`,e=d.rawModel||"",f=d.provider||"",g=k[f]||f,h=`${e} (${f} - ${c})`;p.byAccount[h]||(p.byAccount[h]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0,rawModel:e,provider:g,connectionId:a,accountName:c,lastUsed:b}),p.byAccount[h].requests+=d.requests||0,p.byAccount[h].promptTokens+=d.promptTokens||0,p.byAccount[h].completionTokens+=d.completionTokens||0,p.byAccount[h].cachedTokens+=d.cachedTokens||0,p.byAccount[h].cost+=d.cost||0,b>(p.byAccount[h].lastUsed||"")&&(p.byAccount[h].lastUsed=b)}for(let[a,d]of Object.entries(c.byApiKey||{})){let c=d.rawModel||"",e=d.provider||"",f=k[e]||e,g=d.apiKey,h=g?m[g]:null,i=h?.name||(g?g.slice(0,8)+"...":"Local (No API Key)"),j=B(g),l=j||"local-no-key";p.byApiKey[a]||(p.byApiKey[a]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0,rawModel:c,provider:f,apiKeyMasked:j,keyName:i,apiKeyKey:l,lastUsed:b}),p.byApiKey[a].requests+=d.requests||0,p.byApiKey[a].promptTokens+=d.promptTokens||0,p.byApiKey[a].completionTokens+=d.completionTokens||0,p.byApiKey[a].cachedTokens+=d.cachedTokens||0,p.byApiKey[a].cost+=d.cost||0,b>(p.byApiKey[a].lastUsed||"")&&(p.byApiKey[a].lastUsed=b)}for(let[a,d]of Object.entries(c.byEndpoint||{})){let c=d.endpoint||a.split("|")[0]||"Unknown",e=d.rawModel||"",f=d.provider||"",g=k[f]||f;p.byEndpoint[a]||(p.byEndpoint[a]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0,endpoint:c,rawModel:e,provider:g,lastUsed:b}),p.byEndpoint[a].requests+=d.requests||0,p.byEndpoint[a].promptTokens+=d.promptTokens||0,p.byEndpoint[a].completionTokens+=d.completionTokens||0,p.byEndpoint[a].cachedTokens+=d.cachedTokens||0,p.byEndpoint[a].cost+=d.cost||0,b>(p.byEndpoint[a].lastUsed||"")&&(p.byEndpoint[a].lastUsed=b)}}let d=Math.max(c?Date.now()-864e5*c:0,Date.now()-1728e5);for(let a of b.all("SELECT timestamp, provider, model, connectionId, apiKey, endpoint FROM usageHistory WHERE timestamp >= ?",[new Date(d).toISOString()])){let b=a.timestamp,c=a.provider?`${a.model} (${a.provider})`:a.model;if(p.byModel[c]&&new Date(b)>new Date(p.byModel[c].lastUsed)&&(p.byModel[c].lastUsed=b),a.connectionId){let c=j[a.connectionId]||`Account ${a.connectionId.slice(0,8)}...`,d=`${a.model} (${a.provider} - ${c})`;p.byAccount[d]&&new Date(b)>new Date(p.byAccount[d].lastUsed)&&(p.byAccount[d].lastUsed=b)}let d=a.apiKey&&"string"==typeof a.apiKey?`${a.apiKey}|${a.model}|${a.provider||"unknown"}`:"local-no-key";p.byApiKey[d]&&new Date(b)>new Date(p.byApiKey[d].lastUsed)&&(p.byApiKey[d].lastUsed=b);let e=a.endpoint||"Unknown",f=`${e}|${a.model}|${a.provider||"unknown"}`;p.byEndpoint[f]&&new Date(b)>new Date(p.byEndpoint[f].lastUsed)&&(p.byEndpoint[f].lastUsed=b)}}else{let c;if("today"===a){let a=new Date;a.setHours(0,0,0,0),c=a.toISOString()}else c=new Date(Date.now()-864e5).toISOString();for(let a of b.all("SELECT timestamp, provider, model, connectionId, apiKey, endpoint, promptTokens, completionTokens, cost, tokens FROM usageHistory WHERE timestamp >= ?",[c])){let b=(0,e.q)(a.tokens,{})||{},c=b.prompt_tokens||0,d=b.completion_tokens||0,f=b.cached_tokens||b.cache_read_input_tokens||0,g=a.cost||0,h=k[a.provider]||a.provider;p.totalPromptTokens+=c,p.totalCompletionTokens+=d,p.totalCachedTokens+=f,p.totalCost+=g,p.byProvider[a.provider]||(p.byProvider[a.provider]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0}),p.byProvider[a.provider].requests++,p.byProvider[a.provider].promptTokens+=c,p.byProvider[a.provider].completionTokens+=d,p.byProvider[a.provider].cachedTokens+=f,p.byProvider[a.provider].cost+=g;let i=a.provider?`${a.model} (${a.provider})`:a.model;if(p.byModel[i]||(p.byModel[i]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0,rawModel:a.model,provider:h,lastUsed:a.timestamp}),p.byModel[i].requests++,p.byModel[i].promptTokens+=c,p.byModel[i].completionTokens+=d,p.byModel[i].cachedTokens+=f,p.byModel[i].cost+=g,new Date(a.timestamp)>new Date(p.byModel[i].lastUsed)&&(p.byModel[i].lastUsed=a.timestamp),a.connectionId){let b=j[a.connectionId]||`Account ${a.connectionId.slice(0,8)}...`,e=`${a.model} (${a.provider} - ${b})`;p.byAccount[e]||(p.byAccount[e]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0,rawModel:a.model,provider:h,connectionId:a.connectionId,accountName:b,lastUsed:a.timestamp}),p.byAccount[e].requests++,p.byAccount[e].promptTokens+=c,p.byAccount[e].completionTokens+=d,p.byAccount[e].cachedTokens+=f,p.byAccount[e].cost+=g,new Date(a.timestamp)>new Date(p.byAccount[e].lastUsed)&&(p.byAccount[e].lastUsed=a.timestamp)}if(a.apiKey&&"string"==typeof a.apiKey){let b=m[a.apiKey],e=b?.name||a.apiKey.slice(0,8)+"...",i=B(a.apiKey),j=`${a.apiKey}|${a.model}|${a.provider||"unknown"}`;p.byApiKey[j]||(p.byApiKey[j]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0,rawModel:a.model,provider:h,apiKeyMasked:i,keyName:e,apiKeyKey:i,lastUsed:a.timestamp});let k=p.byApiKey[j];k.requests++,k.promptTokens+=c,k.completionTokens+=d,k.cachedTokens+=f,k.cost+=g,new Date(a.timestamp)>new Date(k.lastUsed)&&(k.lastUsed=a.timestamp)}else{p.byApiKey["local-no-key"]||(p.byApiKey["local-no-key"]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0,rawModel:a.model,provider:h,apiKeyMasked:null,keyName:"Local (No API Key)",apiKeyKey:"local-no-key",lastUsed:a.timestamp});let b=p.byApiKey["local-no-key"];b.requests++,b.promptTokens+=c,b.completionTokens+=d,b.cachedTokens+=f,b.cost+=g,new Date(a.timestamp)>new Date(b.lastUsed)&&(b.lastUsed=a.timestamp)}let l=a.endpoint||"Unknown",n=`${l}|${a.model}|${a.provider||"unknown"}`;p.byEndpoint[n]||(p.byEndpoint[n]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0,endpoint:l,rawModel:a.model,provider:h,lastUsed:a.timestamp});let o=p.byEndpoint[n];o.requests++,o.promptTokens+=c,o.completionTokens+=d,o.cachedTokens+=f,o.cost+=g,new Date(a.timestamp)>new Date(o.lastUsed)&&(o.lastUsed=a.timestamp)}}return p.totalRequests=Object.values(p.byProvider).reduce((a,b)=>a+(b.requests||0),0),p}async function U(a="7d"){let b=await (0,d.c)(),c=Date.now();if("today"===a){let a=new Date;a.setHours(0,0,0,0);let c=a.getTime(),d=c+864e5,e=Array.from({length:24},(a,b)=>({label:new Date(c+36e5*b).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",hour12:!1}),tokens:0,cost:0,requests:0}));for(let a of b.all("SELECT timestamp, promptTokens, completionTokens, cost FROM usageHistory WHERE timestamp >= ?",[new Date(c).toISOString()])){let b=new Date(a.timestamp).getTime();if(b<c||b>=d)continue;let f=Math.floor((b-c)/36e5);f>=0&&f<24&&(e[f].tokens+=(a.promptTokens||0)+(a.completionTokens||0),e[f].cost+=a.cost||0,e[f].requests+=1)}return e}if("24h"===a){let a=c-864e5,d=Array.from({length:24},(b,c)=>({label:new Date(a+36e5*c).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",hour12:!1}),tokens:0,cost:0,requests:0}));for(let e of b.all("SELECT timestamp, promptTokens, completionTokens, cost FROM usageHistory WHERE timestamp >= ?",[new Date(a).toISOString()])){let b=new Date(e.timestamp).getTime();if(b<a||b>c)continue;let f=Math.min(Math.floor((b-a)/36e5),23);d[f].tokens+=(e.promptTokens||0)+(e.completionTokens||0),d[f].cost+=e.cost||0,d[f].requests+=1}return d}let f=a=>a.toLocaleDateString("en-US",{month:"short",day:"numeric"});if("all"===a){let a=S(b,null);if(!a.length)return[];let c={};for(let b of a)c[b.dateKey]=(0,e.q)(b.data,{});let d=new Date(a[0].dateKey+"T00:00:00"),g=new Date;return g.setHours(0,0,0,0),Array.from({length:Math.max(1,Math.round((g-d)/864e5)+1)},(a,b)=>{let e=new Date(d);e.setDate(e.getDate()+b);let g=c[`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`];return{label:f(e),tokens:g?(g.promptTokens||0)+(g.completionTokens||0):0,cost:g&&g.cost||0,requests:g&&g.requests||0}})}let g="7d"===a?7:"30d"===a?30:60,h=new Date,i=S(b,g),j={};for(let a of i)j[a.dateKey]=(0,e.q)(a.data,{});return Array.from({length:g},(a,b)=>{let c=new Date(h);c.setDate(c.getDate()-(g-1-b));let d=j[`${c.getFullYear()}-${String(c.getMonth()+1).padStart(2,"0")}-${String(c.getDate()).padStart(2,"0")}`];return{label:f(c),tokens:d?(d.promptTokens||0)+(d.completionTokens||0):0,cost:d&&d.cost||0,requests:d&&d.requests||0}})}async function V(){}async function W(a=200){try{let b=(await (0,d.c)()).all("SELECT timestamp, provider, model, connectionId, promptTokens, completionTokens, status, tokens FROM usageHistory ORDER BY id DESC LIMIT ?",[a]);if(!b.length)return[];let f={};try{let{getProviderConnections:a}=await Promise.resolve().then(c.bind(c,5781));for(let b of(await a()))f[b.id]=b.name||b.email||""}catch{}return b.map(a=>{let b=function(a=new Date){let b=a=>String(a).padStart(2,"0");return`${b(a.getDate())}-${b(a.getMonth()+1)}-${a.getFullYear()} ${b(a.getHours())}:${b(a.getMinutes())}:${b(a.getSeconds())}`}(new Date(a.timestamp)),c=a.provider?.toUpperCase()||"-",d=a.model||"-",g=f[a.connectionId]||(a.connectionId?a.connectionId.slice(0,8):"-"),h=a.tokens?(0,e.q)(a.tokens,{}):{},i=a.promptTokens??h.prompt_tokens??"-",j=a.completionTokens??h.completion_tokens??"-";return`${b} | ${d} | ${c} | ${g} | ${i} | ${j} | ${a.status||"-"}`})}catch(a){return console.error("[usageRepo] getRecentLogs failed:",a.message),[]}}let X=null,Y=0;async function Z(){if(X&&Date.now()-Y<5e3)return X;try{let{getSettings:a,getRawSetting:b}=await Promise.resolve().then(c.bind(c,42655)),d=await a(),e=process.env.ENABLE_REQUEST_LOGS;if(void 0!==e)return X={enabled:"true"===e.toLowerCase(),maxRecords:d.observabilityMaxRecords||parseInt(process.env.OBSERVABILITY_MAX_RECORDS||String(200),10),batchSize:d.observabilityBatchSize||parseInt(process.env.OBSERVABILITY_BATCH_SIZE||String(20),10),flushIntervalMs:d.observabilityFlushIntervalMs||parseInt(process.env.OBSERVABILITY_FLUSH_INTERVAL_MS||String(5e3),10),maxJsonSize:1024*(d.observabilityMaxJsonSize||parseInt(process.env.OBSERVABILITY_MAX_JSON_SIZE||"5",10))},Y=Date.now(),X;let f=await b("enableObservability");X={enabled:"boolean"==typeof f?f:void 0!==process.env.OBSERVABILITY_ENABLED&&!/^(false|0|no|off)$/i.test(process.env.OBSERVABILITY_ENABLED),maxRecords:d.observabilityMaxRecords||parseInt(process.env.OBSERVABILITY_MAX_RECORDS||String(200),10),batchSize:d.observabilityBatchSize||parseInt(process.env.OBSERVABILITY_BATCH_SIZE||String(20),10),flushIntervalMs:d.observabilityFlushIntervalMs||parseInt(process.env.OBSERVABILITY_FLUSH_INTERVAL_MS||String(5e3),10),maxJsonSize:1024*(d.observabilityMaxJsonSize||parseInt(process.env.OBSERVABILITY_MAX_JSON_SIZE||"5",10))}}catch{X={enabled:!1,maxRecords:200,batchSize:20,flushIntervalMs:5e3,maxJsonSize:5120}}return Y=Date.now(),X}let $=[],_=null,aa=!1;function ab(a,b){let c=JSON.stringify(a||{});return c.length>b?{_truncated:!0,_originalSize:c.length,_preview:c.substring(0,200)}:a||{}}async function ac(){if(!aa&&0!==$.length){aa=!0;try{for(;$.length>0;){let a=$.splice(0,$.length),b=await (0,d.c)(),c=await Z(),f=a.map(a=>{a.id||(a.id=function(a){let b=new Date().toISOString(),c=Math.random().toString(36).substring(2,8),d=a?a.replace(/[^a-zA-Z0-9-]/g,"-"):"unknown";return`${b}-${c}-${d}`}(a.model)),a.timestamp||(a.timestamp=new Date().toISOString()),a.request?.headers&&(a.request.headers=function(a){if(!a||"object"!=typeof a)return{};let b=["authorization","x-api-key","cookie","token","api-key"],c={...a};for(let a of Object.keys(c))b.some(b=>a.toLowerCase().includes(b))&&delete c[a];return c}(a.request.headers));let b={id:a.id,provider:a.provider||null,model:a.model||null,connectionId:a.connectionId||null,timestamp:a.timestamp,status:a.status||null,latency:a.latency||{},tokens:a.tokens||{},request:ab(a.request,c.maxJsonSize),providerRequest:ab(a.providerRequest,c.maxJsonSize),providerResponse:ab(a.providerResponse,c.maxJsonSize),response:ab(a.response,c.maxJsonSize),pxpipe:a.pxpipe||void 0};return[b.id,b.timestamp,b.provider,b.model,b.connectionId,b.status,(0,e.s)(b)]});b.transaction(()=>{for(let a of f)b.run("INSERT INTO requestDetails(id, timestamp, provider, model, connectionId, status, data) VALUES(?, ?, ?, ?, ?, ?, ?) ON CONFLICT(id) DO UPDATE SET timestamp = excluded.timestamp, provider = excluded.provider, model = excluded.model, connectionId = excluded.connectionId, status = excluded.status, data = excluded.data",a);let a=b.get("SELECT COUNT(*) as c FROM requestDetails");a&&a.c>c.maxRecords&&b.run("DELETE FROM requestDetails WHERE id IN (SELECT id FROM requestDetails ORDER BY timestamp ASC LIMIT ?)",[a.c-c.maxRecords])})}}catch(a){console.error("[requestDetailsRepo] Batch write failed:",a)}finally{aa=!1}}}async function ad(a){let b=await Z();b.enabled&&($.push(a),$.length>=b.batchSize?(_&&(clearTimeout(_),_=null),ac().catch(a=>console.error("[requestDetailsRepo] flush err:",a))):_||(_=setTimeout(()=>{_=null,ac().catch(()=>{})},b.flushIntervalMs)))}async function ae(a={}){let b=await (0,d.c)(),c=[],f=[];a.provider&&(c.push("provider = ?"),f.push(a.provider)),a.model&&(c.push("model = ?"),f.push(a.model)),a.connectionId&&(c.push("connectionId = ?"),f.push(a.connectionId)),a.status&&(c.push("status = ?"),f.push(a.status)),a.startDate&&(c.push("timestamp >= ?"),f.push(new Date(a.startDate).toISOString())),a.endDate&&(c.push("timestamp <= ?"),f.push(new Date(a.endDate).toISOString()));let g=c.length?`WHERE ${c.join(" AND ")}`:"",h=b.get(`SELECT COUNT(*) as c FROM requestDetails ${g}`,f),i=h?h.c:0,j=a.page||1,k=a.pageSize||50,l=Math.ceil(i/k);return{details:b.all(`SELECT data FROM requestDetails ${g} ORDER BY timestamp DESC LIMIT ? OFFSET ?`,[...f,k,(j-1)*k]).map(a=>(0,e.q)(a.data,{})),pagination:{page:j,pageSize:k,totalItems:i,totalPages:l,hasNext:j<l,hasPrev:j>1}}}async function af(){return(await (0,d.c)()).all("SELECT DISTINCT provider FROM requestDetails WHERE provider IS NOT NULL ORDER BY provider ASC").map(a=>a.provider)}let ag=async()=>{_&&(clearTimeout(_),_=null),$.length>0&&await ac()};async function ah(){let a=await (0,d.c)(),{exportSettings:b}=await Promise.resolve().then(c.bind(c,42655)),f={settings:await b(),providerConnections:a.all("SELECT * FROM providerConnections").map(a=>({...(0,e.q)(a.data,{}),id:a.id,provider:a.provider,authType:a.authType,name:a.name,email:a.email,priority:a.priority,isActive:1===a.isActive,createdAt:a.createdAt,updatedAt:a.updatedAt})),providerNodes:a.all("SELECT * FROM providerNodes").map(a=>({...(0,e.q)(a.data,{}),id:a.id,type:a.type,name:a.name,createdAt:a.createdAt,updatedAt:a.updatedAt})),proxyPools:a.all("SELECT * FROM proxyPools").map(a=>({...(0,e.q)(a.data,{}),id:a.id,isActive:1===a.isActive,testStatus:a.testStatus,createdAt:a.createdAt,updatedAt:a.updatedAt})),apiKeys:a.all("SELECT * FROM apiKeys").map(a=>({id:a.id,key:a.key,name:a.name,machineId:a.machineId,isActive:1===a.isActive,createdAt:a.createdAt,access:(0,g.xE)(a.accessRestricted,a.accessAllow)})),combos:a.all("SELECT * FROM combos").map(a=>({id:a.id,name:a.name,kind:a.kind,models:(0,e.q)(a.models,[]),createdAt:a.createdAt,updatedAt:a.updatedAt})),modelAliases:{},customModels:[],mitmAlias:{},pricing:{},disabledModels:{}};for(let b of a.all("SELECT key, value FROM kv WHERE scope = 'modelAliases'"))f.modelAliases[b.key]=(0,e.q)(b.value);for(let b of a.all("SELECT key, value FROM kv WHERE scope = 'customModels'"))f.customModels.push((0,e.q)(b.value));for(let b of a.all("SELECT key, value FROM kv WHERE scope = 'mitmAlias'"))f.mitmAlias[b.key]=(0,e.q)(b.value);for(let b of a.all("SELECT key, value FROM kv WHERE scope = 'pricing'"))f.pricing[b.key]=(0,e.q)(b.value);for(let b of a.all("SELECT key, value FROM kv WHERE scope = 'disabledModels'"))f.disabledModels[b.key]=(0,e.q)(b.value,[]);return f}async function ai(a){if(!a||"object"!=typeof a||Array.isArray(a))throw Error("Invalid database payload");let b=await (0,d.c)();return b.transaction(()=>{for(let c of(b.run("DELETE FROM settings"),b.run("DELETE FROM providerConnections"),b.run("DELETE FROM providerNodes"),b.run("DELETE FROM proxyPools"),b.run("DELETE FROM apiKeys"),b.run("DELETE FROM combos"),b.run("DELETE FROM kv WHERE scope IN ('modelAliases', 'customModels', 'mitmAlias', 'pricing', 'disabledModels')"),a.settings&&b.run("INSERT INTO settings(id, data) VALUES(1, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data",[(0,e.s)(a.settings)]),a.providerConnections||[])){let{id:a,provider:d,authType:f,name:g,email:h,priority:i,isActive:j,createdAt:k,updatedAt:l,...m}=c;b.run("INSERT OR REPLACE INTO providerConnections(id, provider, authType, name, email, priority, isActive, data, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",[a,d,f||"oauth",g||null,h||null,i||null,+(!1!==j),(0,e.s)(m),k||new Date().toISOString(),l||new Date().toISOString()])}for(let c of a.providerNodes||[]){let{id:a,type:d,name:f,createdAt:g,updatedAt:h,...i}=c;b.run("INSERT OR REPLACE INTO providerNodes(id, type, name, data, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)",[a,d||null,f||null,(0,e.s)(i),g||new Date().toISOString(),h||new Date().toISOString()])}for(let c of a.proxyPools||[]){let{id:a,isActive:d,testStatus:f,createdAt:g,updatedAt:h,...i}=c;b.run("INSERT OR REPLACE INTO proxyPools(id, isActive, testStatus, data, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)",[a,+(!1!==d),f||"unknown",(0,e.s)(i),g||new Date().toISOString(),h||new Date().toISOString()])}for(let c of a.apiKeys||[]){let a=h.M0;if(void 0!==c.access){let b=(0,g.M7)(c.access);if(!b.ok)throw Error(`apiKeys ${c.id}: ${b.error}`);a=b.value}let d=(0,g.aB)(a);b.run("INSERT OR REPLACE INTO apiKeys(id, key, name, machineId, isActive, createdAt, accessRestricted, accessAllow) VALUES(?, ?, ?, ?, ?, ?, ?, ?)",[c.id,c.key,c.name||null,c.machineId||null,+(!1!==c.isActive),c.createdAt||new Date().toISOString(),d.accessRestricted,d.accessAllow])}for(let c of a.combos||[])b.run("INSERT OR REPLACE INTO combos(id, name, kind, models, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)",[c.id,c.name,c.kind||null,(0,e.s)(c.models||[]),c.createdAt||new Date().toISOString(),c.updatedAt||new Date().toISOString()]);for(let[c,d]of Object.entries(a.modelAliases||{}))b.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('modelAliases', ?, ?)",[c,(0,e.s)(d)]);for(let c of a.customModels||[]){let a=`${c.providerAlias}|${c.id}|${c.type||"llm"}`;b.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('customModels', ?, ?)",[a,(0,e.s)(c)])}for(let[c,d]of Object.entries(a.mitmAlias||{}))b.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('mitmAlias', ?, ?)",[c,(0,e.s)(d||{})]);for(let[c,d]of Object.entries(a.pricing||{}))b.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('pricing', ?, ?)",[c,(0,e.s)(d||{})]);for(let[c,d]of Object.entries(a.disabledModels||{}))b.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('disabledModels', ?, ?)",[c,(0,e.s)(d||[])])}),(0,f.vZ)(),await ah()}process.off("beforeExit",ag),process.off("SIGINT",ag),process.off("SIGTERM",ag),process.off("exit",ag),process.on("beforeExit",ag),process.on("SIGINT",ag),process.on("SIGTERM",ag),process.on("exit",ag)},95658:(a,b,c)=>{"use strict";c.d(b,{AL:()=>j,HG:()=>i,Jh:()=>m,KQ:()=>k,Or:()=>l});var d=c(76760),e=c.n(d),f=c(73024),g=c.n(f),h=c(49120);let i=e().join(h.n,"db"),j=e().join(i,"data.sqlite"),k=e().join(i,"backups"),l={main:e().join(h.n,"db.json"),usage:e().join(h.n,"usage.json"),disabled:e().join(h.n,"disabledModels.json"),details:e().join(h.n,"request-details.json")};function m(){for(let a of[h.n,i,k])g().existsSync(a)||g().mkdirSync(a,{recursive:!0})}},96487:()=>{},97914:(a,b,c)=>{"use strict";c.d(b,{KJ:()=>l,VT:()=>n,getPricingForModel:()=>k,r4:()=>j,yF:()=>m});var d=c(36366),e=c(644);let f=(0,c(22846).U)("pricing"),g={value:null,expiresAt:0};function h(){g={value:null,expiresAt:0}}async function i(){return await f.getAll()}async function j(){let a=Date.now();if(g.value&&g.expiresAt>a)return g.value;let b=await i(),{PROVIDER_PRICING:d}=await c.e(8920).then(c.bind(c,58920)),e={};for(let[a,c]of Object.entries(d))if(e[a]={...c},b[a])for(let[c,d]of Object.entries(b[a]))e[a][c]=e[a][c]?{...e[a][c],...d}:d;for(let[a,c]of Object.entries(b))if(e[a])for(let[b,d]of Object.entries(c))e[a][b]||(e[a][b]=d);else e[a]={...c};return g={value:e,expiresAt:a+5e3},e}async function k(a,b){if(!b)return null;let d=await i();if(a&&d[a]?.[b])return d[a][b];let{getPricingForModel:e}=await c.e(8920).then(c.bind(c,58920));return e(a,b)}async function l(a){let b=await (0,d.c)();return b.transaction(()=>{for(let[c,d]of Object.entries(a)){let a=b.get("SELECT value FROM kv WHERE scope = 'pricing' AND key = ?",[c]),f={...a&&(0,e.q)(a.value,{})||{}};for(let[a,b]of Object.entries(d))f[a]=b;b.run("INSERT INTO kv(scope, key, value) VALUES('pricing', ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value",[c,(0,e.s)(f)])}}),h(),await i()}async function m(a,b){if(!a)return await i();let c=await (0,d.c)();return c.transaction(()=>{if(!b)return void c.run("DELETE FROM kv WHERE scope = 'pricing' AND key = ?",[a]);let d=c.get("SELECT value FROM kv WHERE scope = 'pricing' AND key = ?",[a]),f=d&&(0,e.q)(d.value,{})||{};delete f[b],0===Object.keys(f).length?c.run("DELETE FROM kv WHERE scope = 'pricing' AND key = ?",[a]):c.run("INSERT INTO kv(scope, key, value) VALUES('pricing', ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value",[a,(0,e.s)(f)])}),h(),await i()}async function n(){return await f.clear(),h(),{}}}};
21
+ ORDER BY id DESC LIMIT 1`,[a.timestamp,a.provider||null,a.model||null,a.connectionId||null,a.apiKey||null,f,g]);if(t){!t.endpoint&&a.endpoint&&b.run("UPDATE usageHistory SET endpoint = ? WHERE id = ?",[a.endpoint,t.id]);return}b.run("INSERT INTO usageHistory(timestamp, provider, model, connectionId, apiKey, endpoint, promptTokens, completionTokens, cost, status, tokens, meta) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",[a.timestamp,a.provider||null,a.model||null,a.connectionId||null,a.apiKey||null,a.endpoint||null,f,g,a.cost||0,a.status||"ok",(0,e.s)(c),(0,e.s)({})]);let u=(i=(d=a.timestamp)?new Date(d):new Date,`${i.getFullYear()}-${String(i.getMonth()+1).padStart(2,"0")}-${String(i.getDate()).padStart(2,"0")}`),v=b.get("SELECT data FROM usageDaily WHERE dateKey = ?",[u]),w=v?(0,e.q)(v.data,{}):{requests:0,promptTokens:0,completionTokens:0,cost:0,byProvider:{},byModel:{},byAccount:{},byApiKey:{},byEndpoint:{}};j=a.tokens?.prompt_tokens||a.tokens?.input_tokens||0,k=a.tokens?.completion_tokens||a.tokens?.output_tokens||0,l=a.tokens?.cached_tokens||a.tokens?.cache_read_input_tokens||0,n={promptTokens:j,completionTokens:k,cachedTokens:l,cost:m=a.cost||0},w.requests=(w.requests||0)+1,w.promptTokens=(w.promptTokens||0)+j,w.completionTokens=(w.completionTokens||0)+k,w.cachedTokens=(w.cachedTokens||0)+l,w.cost=(w.cost||0)+m,w.byProvider||={},w.byModel||={},w.byAccount||={},w.byApiKey||={},w.byEndpoint||={},a.provider&&K(w.byProvider,a.provider,n),o=a.provider?`${a.model}|${a.provider}`:a.model,K(w.byModel,o,{...n,meta:{rawModel:a.model,provider:a.provider}}),a.connectionId&&K(w.byAccount,a.connectionId,{...n,meta:{rawModel:a.model,provider:a.provider}}),p=a.apiKey&&"string"==typeof a.apiKey?a.apiKey:"local-no-key",q=`${p}|${a.model}|${a.provider||"unknown"}`,K(w.byApiKey,q,{...n,meta:{rawModel:a.model,provider:a.provider,apiKey:a.apiKey||null}}),r=a.endpoint||"Unknown",s=`${r}|${a.model}|${a.provider||"unknown"}`,K(w.byEndpoint,s,{...n,meta:{endpoint:r,rawModel:a.model,provider:a.provider}}),b.run("INSERT INTO usageDaily(dateKey, data) VALUES(?, ?) ON CONFLICT(dateKey) DO UPDATE SET data = excluded.data",[u,(0,e.s)(w)]);let x=b.get("SELECT value FROM _meta WHERE key = 'totalRequestsLifetime'"),y=(x?parseInt(x.value,10):0)+1;b.run("INSERT INTO _meta(key, value) VALUES('totalRequestsLifetime', ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value",[String(y)]),h=!0}),h)&&(F.items.push(a),F.items.length>50&&(F.items=F.items.slice(-50)),J("update",250))}catch(a){console.error("Failed to save usage stats:",a)}}function S(a,b){if(null==b)return a.all("SELECT dateKey, data FROM usageDaily ORDER BY dateKey ASC");let c=new Date,d=new Date(c.getFullYear(),c.getMonth(),c.getDate()-b+1),e=`${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,"0")}-${String(d.getDate()).padStart(2,"0")}`;return a.all("SELECT dateKey, data FROM usageDaily WHERE dateKey >= ? ORDER BY dateKey ASC",[e])}async function T(a="all"){let b=await (0,d.c)(),[{getProviderConnections:f},{getApiKeys:g},{getProviderNodes:h}]=await Promise.all([Promise.resolve().then(c.bind(c,5781)),Promise.resolve().then(c.bind(c,74452)),Promise.resolve().then(c.bind(c,1129))]),i=[];try{i=await f()}catch{}let j={};for(let a of i)j[a.id]=a.name||a.email||a.id;let k={};try{for(let a of(await h()))a.id&&a.name&&(k[a.id]=a.name)}catch{}let l=[];try{l=await g()}catch{}let m={};for(let a of l)m[a.key]={name:a.name,id:a.id,createdAt:a.createdAt};let n=b.all("SELECT timestamp, provider, model, tokens, status FROM usageHistory ORDER BY id DESC LIMIT 100"),o=new Set,p={totalRequests:0,totalPromptTokens:0,totalCompletionTokens:0,totalCachedTokens:0,totalCost:0,byProvider:{},byModel:{},byAccount:{},byApiKey:{},byEndpoint:{},last10Minutes:[],pending:C,activeRequests:[],recentRequests:n.map(a=>{let b=(0,e.q)(a.tokens,{})||{};return{timestamp:a.timestamp,model:a.model,provider:a.provider||"",promptTokens:b.prompt_tokens||b.input_tokens||0,completionTokens:b.completion_tokens||b.output_tokens||0,cachedTokens:b.cached_tokens||b.cache_read_input_tokens||0,status:a.status||"ok"}}).filter(a=>{if(0===a.promptTokens&&0===a.completionTokens&&"ok"===a.status)return!1;let b=a.timestamp?a.timestamp.slice(0,16):"",c=`${a.model}|${a.provider}|${a.promptTokens}|${a.completionTokens}|${b}`;return!o.has(c)&&(o.add(c),!0)}).slice(0,20),errorProvider:Date.now()-D.ts<1e4?D.provider:""};for(let[a,b]of Object.entries(C.byAccount))for(let[c,d]of Object.entries(b))if(d>0){let b=j[a]||`Account ${a.slice(0,8)}...`,e=c.match(/^(.*) \((.*)\)$/);p.activeRequests.push({model:e?e[1]:c,provider:e?e[2]:"unknown",account:b,count:d})}let q=new Date,r=new Date(6e4*Math.floor(q.getTime()/6e4)),s=new Date(r.getTime()-54e4),t={};for(let a=0;a<10;a++){let b=r.getTime()-(9-a)*6e4;t[b]={requests:0,promptTokens:0,completionTokens:0,cost:0},p.last10Minutes.push(t[b])}for(let a of b.all("SELECT timestamp, promptTokens, completionTokens, cost FROM usageHistory WHERE timestamp >= ? AND timestamp <= ?",[s.toISOString(),q.toISOString()])){let b=6e4*Math.floor(new Date(a.timestamp).getTime()/6e4);t[b]&&(t[b].requests++,t[b].promptTokens+=a.promptTokens||0,t[b].completionTokens+=a.completionTokens||0,t[b].cost+=a.cost||0)}if("24h"!==a&&"today"!==a){let c={"7d":7,"30d":30,"60d":60}[a]||null;for(let a of S(b,c)){let b=a.dateKey,c=(0,e.q)(a.data,{});for(let[a,b]of(p.totalPromptTokens+=c.promptTokens||0,p.totalCompletionTokens+=c.completionTokens||0,p.totalCachedTokens+=c.cachedTokens||0,p.totalCost+=c.cost||0,Object.entries(c.byProvider||{})))p.byProvider[a]||(p.byProvider[a]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0}),p.byProvider[a].requests+=b.requests||0,p.byProvider[a].promptTokens+=b.promptTokens||0,p.byProvider[a].completionTokens+=b.completionTokens||0,p.byProvider[a].cachedTokens+=b.cachedTokens||0,p.byProvider[a].cost+=b.cost||0;for(let[a,d]of Object.entries(c.byModel||{})){let c=d.rawModel||a.split("|")[0],e=d.provider||a.split("|")[1]||"",f=e?`${c} (${e})`:c,g=k[e]||e;p.byModel[f]||(p.byModel[f]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0,rawModel:c,provider:g,lastUsed:b}),p.byModel[f].requests+=d.requests||0,p.byModel[f].promptTokens+=d.promptTokens||0,p.byModel[f].completionTokens+=d.completionTokens||0,p.byModel[f].cachedTokens+=d.cachedTokens||0,p.byModel[f].cost+=d.cost||0,b>(p.byModel[f].lastUsed||"")&&(p.byModel[f].lastUsed=b)}for(let[a,d]of Object.entries(c.byAccount||{})){let c=j[a]||`Account ${a.slice(0,8)}...`,e=d.rawModel||"",f=d.provider||"",g=k[f]||f,h=`${e} (${f} - ${c})`;p.byAccount[h]||(p.byAccount[h]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0,rawModel:e,provider:g,connectionId:a,accountName:c,lastUsed:b}),p.byAccount[h].requests+=d.requests||0,p.byAccount[h].promptTokens+=d.promptTokens||0,p.byAccount[h].completionTokens+=d.completionTokens||0,p.byAccount[h].cachedTokens+=d.cachedTokens||0,p.byAccount[h].cost+=d.cost||0,b>(p.byAccount[h].lastUsed||"")&&(p.byAccount[h].lastUsed=b)}for(let[a,d]of Object.entries(c.byApiKey||{})){let c=d.rawModel||"",e=d.provider||"",f=k[e]||e,g=d.apiKey,h=g?m[g]:null,i=h?.name||(g?g.slice(0,8)+"...":"Local (No API Key)"),j=B(g),l=j||"local-no-key";p.byApiKey[a]||(p.byApiKey[a]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0,rawModel:c,provider:f,apiKeyMasked:j,keyName:i,apiKeyKey:l,lastUsed:b}),p.byApiKey[a].requests+=d.requests||0,p.byApiKey[a].promptTokens+=d.promptTokens||0,p.byApiKey[a].completionTokens+=d.completionTokens||0,p.byApiKey[a].cachedTokens+=d.cachedTokens||0,p.byApiKey[a].cost+=d.cost||0,b>(p.byApiKey[a].lastUsed||"")&&(p.byApiKey[a].lastUsed=b)}for(let[a,d]of Object.entries(c.byEndpoint||{})){let c=d.endpoint||a.split("|")[0]||"Unknown",e=d.rawModel||"",f=d.provider||"",g=k[f]||f;p.byEndpoint[a]||(p.byEndpoint[a]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0,endpoint:c,rawModel:e,provider:g,lastUsed:b}),p.byEndpoint[a].requests+=d.requests||0,p.byEndpoint[a].promptTokens+=d.promptTokens||0,p.byEndpoint[a].completionTokens+=d.completionTokens||0,p.byEndpoint[a].cachedTokens+=d.cachedTokens||0,p.byEndpoint[a].cost+=d.cost||0,b>(p.byEndpoint[a].lastUsed||"")&&(p.byEndpoint[a].lastUsed=b)}}let d=Math.max(c?Date.now()-864e5*c:0,Date.now()-1728e5);for(let a of b.all("SELECT timestamp, provider, model, connectionId, apiKey, endpoint FROM usageHistory WHERE timestamp >= ?",[new Date(d).toISOString()])){let b=a.timestamp,c=a.provider?`${a.model} (${a.provider})`:a.model;if(p.byModel[c]&&new Date(b)>new Date(p.byModel[c].lastUsed)&&(p.byModel[c].lastUsed=b),a.connectionId){let c=j[a.connectionId]||`Account ${a.connectionId.slice(0,8)}...`,d=`${a.model} (${a.provider} - ${c})`;p.byAccount[d]&&new Date(b)>new Date(p.byAccount[d].lastUsed)&&(p.byAccount[d].lastUsed=b)}let d=a.apiKey&&"string"==typeof a.apiKey?`${a.apiKey}|${a.model}|${a.provider||"unknown"}`:"local-no-key";p.byApiKey[d]&&new Date(b)>new Date(p.byApiKey[d].lastUsed)&&(p.byApiKey[d].lastUsed=b);let e=a.endpoint||"Unknown",f=`${e}|${a.model}|${a.provider||"unknown"}`;p.byEndpoint[f]&&new Date(b)>new Date(p.byEndpoint[f].lastUsed)&&(p.byEndpoint[f].lastUsed=b)}}else{let c;if("today"===a){let a=new Date;a.setHours(0,0,0,0),c=a.toISOString()}else c=new Date(Date.now()-864e5).toISOString();for(let a of b.all("SELECT timestamp, provider, model, connectionId, apiKey, endpoint, promptTokens, completionTokens, cost, tokens FROM usageHistory WHERE timestamp >= ?",[c])){let b=(0,e.q)(a.tokens,{})||{},c=b.prompt_tokens||0,d=b.completion_tokens||0,f=b.cached_tokens||b.cache_read_input_tokens||0,g=a.cost||0,h=k[a.provider]||a.provider;p.totalPromptTokens+=c,p.totalCompletionTokens+=d,p.totalCachedTokens+=f,p.totalCost+=g,p.byProvider[a.provider]||(p.byProvider[a.provider]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0}),p.byProvider[a.provider].requests++,p.byProvider[a.provider].promptTokens+=c,p.byProvider[a.provider].completionTokens+=d,p.byProvider[a.provider].cachedTokens+=f,p.byProvider[a.provider].cost+=g;let i=a.provider?`${a.model} (${a.provider})`:a.model;if(p.byModel[i]||(p.byModel[i]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0,rawModel:a.model,provider:h,lastUsed:a.timestamp}),p.byModel[i].requests++,p.byModel[i].promptTokens+=c,p.byModel[i].completionTokens+=d,p.byModel[i].cachedTokens+=f,p.byModel[i].cost+=g,new Date(a.timestamp)>new Date(p.byModel[i].lastUsed)&&(p.byModel[i].lastUsed=a.timestamp),a.connectionId){let b=j[a.connectionId]||`Account ${a.connectionId.slice(0,8)}...`,e=`${a.model} (${a.provider} - ${b})`;p.byAccount[e]||(p.byAccount[e]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0,rawModel:a.model,provider:h,connectionId:a.connectionId,accountName:b,lastUsed:a.timestamp}),p.byAccount[e].requests++,p.byAccount[e].promptTokens+=c,p.byAccount[e].completionTokens+=d,p.byAccount[e].cachedTokens+=f,p.byAccount[e].cost+=g,new Date(a.timestamp)>new Date(p.byAccount[e].lastUsed)&&(p.byAccount[e].lastUsed=a.timestamp)}if(a.apiKey&&"string"==typeof a.apiKey){let b=m[a.apiKey],e=b?.name||a.apiKey.slice(0,8)+"...",i=B(a.apiKey),j=`${a.apiKey}|${a.model}|${a.provider||"unknown"}`;p.byApiKey[j]||(p.byApiKey[j]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0,rawModel:a.model,provider:h,apiKeyMasked:i,keyName:e,apiKeyKey:i,lastUsed:a.timestamp});let k=p.byApiKey[j];k.requests++,k.promptTokens+=c,k.completionTokens+=d,k.cachedTokens+=f,k.cost+=g,new Date(a.timestamp)>new Date(k.lastUsed)&&(k.lastUsed=a.timestamp)}else{p.byApiKey["local-no-key"]||(p.byApiKey["local-no-key"]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0,rawModel:a.model,provider:h,apiKeyMasked:null,keyName:"Local (No API Key)",apiKeyKey:"local-no-key",lastUsed:a.timestamp});let b=p.byApiKey["local-no-key"];b.requests++,b.promptTokens+=c,b.completionTokens+=d,b.cachedTokens+=f,b.cost+=g,new Date(a.timestamp)>new Date(b.lastUsed)&&(b.lastUsed=a.timestamp)}let l=a.endpoint||"Unknown",n=`${l}|${a.model}|${a.provider||"unknown"}`;p.byEndpoint[n]||(p.byEndpoint[n]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0,endpoint:l,rawModel:a.model,provider:h,lastUsed:a.timestamp});let o=p.byEndpoint[n];o.requests++,o.promptTokens+=c,o.completionTokens+=d,o.cachedTokens+=f,o.cost+=g,new Date(a.timestamp)>new Date(o.lastUsed)&&(o.lastUsed=a.timestamp)}}return p.totalRequests=Object.values(p.byProvider).reduce((a,b)=>a+(b.requests||0),0),p}async function U(a="7d"){let b=await (0,d.c)(),c=Date.now();if("today"===a){let a=new Date;a.setHours(0,0,0,0);let c=a.getTime(),d=c+864e5,e=Array.from({length:24},(a,b)=>({label:new Date(c+36e5*b).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",hour12:!1}),tokens:0,cost:0,requests:0}));for(let a of b.all("SELECT timestamp, promptTokens, completionTokens, cost FROM usageHistory WHERE timestamp >= ?",[new Date(c).toISOString()])){let b=new Date(a.timestamp).getTime();if(b<c||b>=d)continue;let f=Math.floor((b-c)/36e5);f>=0&&f<24&&(e[f].tokens+=(a.promptTokens||0)+(a.completionTokens||0),e[f].cost+=a.cost||0,e[f].requests+=1)}return e}if("24h"===a){let a=c-864e5,d=Array.from({length:24},(b,c)=>({label:new Date(a+36e5*c).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",hour12:!1}),tokens:0,cost:0,requests:0}));for(let e of b.all("SELECT timestamp, promptTokens, completionTokens, cost FROM usageHistory WHERE timestamp >= ?",[new Date(a).toISOString()])){let b=new Date(e.timestamp).getTime();if(b<a||b>c)continue;let f=Math.min(Math.floor((b-a)/36e5),23);d[f].tokens+=(e.promptTokens||0)+(e.completionTokens||0),d[f].cost+=e.cost||0,d[f].requests+=1}return d}let f=a=>a.toLocaleDateString("en-US",{month:"short",day:"numeric"});if("all"===a){let a=S(b,null);if(!a.length)return[];let c={};for(let b of a)c[b.dateKey]=(0,e.q)(b.data,{});let d=new Date(a[0].dateKey+"T00:00:00"),g=new Date;return g.setHours(0,0,0,0),Array.from({length:Math.max(1,Math.round((g-d)/864e5)+1)},(a,b)=>{let e=new Date(d);e.setDate(e.getDate()+b);let g=c[`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`];return{label:f(e),tokens:g?(g.promptTokens||0)+(g.completionTokens||0):0,cost:g&&g.cost||0,requests:g&&g.requests||0}})}let g="7d"===a?7:"30d"===a?30:60,h=new Date,i=S(b,g),j={};for(let a of i)j[a.dateKey]=(0,e.q)(a.data,{});return Array.from({length:g},(a,b)=>{let c=new Date(h);c.setDate(c.getDate()-(g-1-b));let d=j[`${c.getFullYear()}-${String(c.getMonth()+1).padStart(2,"0")}-${String(c.getDate()).padStart(2,"0")}`];return{label:f(c),tokens:d?(d.promptTokens||0)+(d.completionTokens||0):0,cost:d&&d.cost||0,requests:d&&d.requests||0}})}async function V(a=200){try{let b=(await (0,d.c)()).all("SELECT timestamp, provider, model, connectionId, promptTokens, completionTokens, status, tokens FROM usageHistory ORDER BY id DESC LIMIT ?",[a]);if(!b.length)return[];let f={};try{let{getProviderConnections:a}=await Promise.resolve().then(c.bind(c,5781));for(let b of(await a()))f[b.id]=b.name||b.email||""}catch{}return b.map(a=>{let b=function(a=new Date){let b=a=>String(a).padStart(2,"0");return`${b(a.getDate())}-${b(a.getMonth()+1)}-${a.getFullYear()} ${b(a.getHours())}:${b(a.getMinutes())}:${b(a.getSeconds())}`}(new Date(a.timestamp)),c=a.provider?.toUpperCase()||"-",d=a.model||"-",g=f[a.connectionId]||(a.connectionId?a.connectionId.slice(0,8):"-"),h=a.tokens?(0,e.q)(a.tokens,{}):{},i=a.promptTokens??h.prompt_tokens??"-",j=a.completionTokens??h.completion_tokens??"-";return`${b} | ${d} | ${c} | ${g} | ${i} | ${j} | ${a.status||"-"}`})}catch(a){return console.error("[usageRepo] getRecentLogs failed:",a.message),[]}}let W=null,X=0;async function Y(){if(W&&Date.now()-X<5e3)return W;try{let{getSettings:a,getRawSetting:b}=await Promise.resolve().then(c.bind(c,42655)),d=await a(),e=process.env.ENABLE_REQUEST_LOGS;if(void 0!==e)return W={enabled:"true"===e.toLowerCase(),maxRecords:d.observabilityMaxRecords||parseInt(process.env.OBSERVABILITY_MAX_RECORDS||String(200),10),batchSize:d.observabilityBatchSize||parseInt(process.env.OBSERVABILITY_BATCH_SIZE||String(20),10),flushIntervalMs:d.observabilityFlushIntervalMs||parseInt(process.env.OBSERVABILITY_FLUSH_INTERVAL_MS||String(5e3),10),maxJsonSize:1024*(d.observabilityMaxJsonSize||parseInt(process.env.OBSERVABILITY_MAX_JSON_SIZE||"5",10))},X=Date.now(),W;let f=await b("enableObservability");W={enabled:"boolean"==typeof f?f:void 0!==process.env.OBSERVABILITY_ENABLED&&!/^(false|0|no|off)$/i.test(process.env.OBSERVABILITY_ENABLED),maxRecords:d.observabilityMaxRecords||parseInt(process.env.OBSERVABILITY_MAX_RECORDS||String(200),10),batchSize:d.observabilityBatchSize||parseInt(process.env.OBSERVABILITY_BATCH_SIZE||String(20),10),flushIntervalMs:d.observabilityFlushIntervalMs||parseInt(process.env.OBSERVABILITY_FLUSH_INTERVAL_MS||String(5e3),10),maxJsonSize:1024*(d.observabilityMaxJsonSize||parseInt(process.env.OBSERVABILITY_MAX_JSON_SIZE||"5",10))}}catch{W={enabled:!1,maxRecords:200,batchSize:20,flushIntervalMs:5e3,maxJsonSize:5120}}return X=Date.now(),W}let Z=[],$=null,_=!1;function aa(a,b){let c=JSON.stringify(a||{});return c.length>b?{_truncated:!0,_originalSize:c.length,_preview:c.substring(0,200)}:a||{}}async function ab(){if(!_&&0!==Z.length){_=!0;try{for(;Z.length>0;){let a=Z.splice(0,Z.length),b=await (0,d.c)(),c=await Y(),f=a.map(a=>{a.id||(a.id=function(a){let b=new Date().toISOString(),c=Math.random().toString(36).substring(2,8),d=a?a.replace(/[^a-zA-Z0-9-]/g,"-"):"unknown";return`${b}-${c}-${d}`}(a.model)),a.timestamp||(a.timestamp=new Date().toISOString()),a.request?.headers&&(a.request.headers=function(a){if(!a||"object"!=typeof a)return{};let b=["authorization","x-api-key","cookie","token","api-key"],c={...a};for(let a of Object.keys(c))b.some(b=>a.toLowerCase().includes(b))&&delete c[a];return c}(a.request.headers));let b={id:a.id,provider:a.provider||null,model:a.model||null,connectionId:a.connectionId||null,timestamp:a.timestamp,status:a.status||null,latency:a.latency||{},tokens:a.tokens||{},request:aa(a.request,c.maxJsonSize),providerRequest:aa(a.providerRequest,c.maxJsonSize),providerResponse:aa(a.providerResponse,c.maxJsonSize),response:aa(a.response,c.maxJsonSize),pxpipe:a.pxpipe||void 0};return[b.id,b.timestamp,b.provider,b.model,b.connectionId,b.status,(0,e.s)(b)]});b.transaction(()=>{for(let a of f)b.run("INSERT INTO requestDetails(id, timestamp, provider, model, connectionId, status, data) VALUES(?, ?, ?, ?, ?, ?, ?) ON CONFLICT(id) DO UPDATE SET timestamp = excluded.timestamp, provider = excluded.provider, model = excluded.model, connectionId = excluded.connectionId, status = excluded.status, data = excluded.data",a);let a=b.get("SELECT COUNT(*) as c FROM requestDetails");a&&a.c>c.maxRecords&&b.run("DELETE FROM requestDetails WHERE id IN (SELECT id FROM requestDetails ORDER BY timestamp ASC LIMIT ?)",[a.c-c.maxRecords])})}}catch(a){console.error("[requestDetailsRepo] Batch write failed:",a)}finally{_=!1}}}async function ac(a){let b=await Y();b.enabled&&(Z.push(a),Z.length>=b.batchSize?($&&(clearTimeout($),$=null),ab().catch(a=>console.error("[requestDetailsRepo] flush err:",a))):$||($=setTimeout(()=>{$=null,ab().catch(()=>{})},b.flushIntervalMs)))}async function ad(a={}){let b=await (0,d.c)(),c=[],f=[];a.provider&&(c.push("provider = ?"),f.push(a.provider)),a.model&&(c.push("model = ?"),f.push(a.model)),a.connectionId&&(c.push("connectionId = ?"),f.push(a.connectionId)),a.status&&(c.push("status = ?"),f.push(a.status)),a.startDate&&(c.push("timestamp >= ?"),f.push(new Date(a.startDate).toISOString())),a.endDate&&(c.push("timestamp <= ?"),f.push(new Date(a.endDate).toISOString()));let g=c.length?`WHERE ${c.join(" AND ")}`:"",h=b.get(`SELECT COUNT(*) as c FROM requestDetails ${g}`,f),i=h?h.c:0,j=a.page||1,k=a.pageSize||50,l=Math.ceil(i/k);return{details:b.all(`SELECT data FROM requestDetails ${g} ORDER BY timestamp DESC LIMIT ? OFFSET ?`,[...f,k,(j-1)*k]).map(a=>(0,e.q)(a.data,{})),pagination:{page:j,pageSize:k,totalItems:i,totalPages:l,hasNext:j<l,hasPrev:j>1}}}async function ae(){return(await (0,d.c)()).all("SELECT DISTINCT provider FROM requestDetails WHERE provider IS NOT NULL ORDER BY provider ASC").map(a=>a.provider)}let af=async()=>{$&&(clearTimeout($),$=null),Z.length>0&&await ab()};async function ag(){let a=await (0,d.c)(),{exportSettings:b}=await Promise.resolve().then(c.bind(c,42655)),f={settings:await b(),providerConnections:a.all("SELECT * FROM providerConnections").map(a=>({...(0,e.q)(a.data,{}),id:a.id,provider:a.provider,authType:a.authType,name:a.name,email:a.email,priority:a.priority,isActive:1===a.isActive,createdAt:a.createdAt,updatedAt:a.updatedAt})),providerNodes:a.all("SELECT * FROM providerNodes").map(a=>({...(0,e.q)(a.data,{}),id:a.id,type:a.type,name:a.name,createdAt:a.createdAt,updatedAt:a.updatedAt})),proxyPools:a.all("SELECT * FROM proxyPools").map(a=>({...(0,e.q)(a.data,{}),id:a.id,isActive:1===a.isActive,testStatus:a.testStatus,createdAt:a.createdAt,updatedAt:a.updatedAt})),apiKeys:a.all("SELECT * FROM apiKeys").map(a=>({id:a.id,key:a.key,name:a.name,machineId:a.machineId,isActive:1===a.isActive,createdAt:a.createdAt,access:(0,g.xE)(a.accessRestricted,a.accessAllow)})),combos:a.all("SELECT * FROM combos").map(a=>({id:a.id,name:a.name,kind:a.kind,models:(0,e.q)(a.models,[]),createdAt:a.createdAt,updatedAt:a.updatedAt})),modelAliases:{},customModels:[],mitmAlias:{},pricing:{},disabledModels:{}};for(let b of a.all("SELECT key, value FROM kv WHERE scope = 'modelAliases'"))f.modelAliases[b.key]=(0,e.q)(b.value);for(let b of a.all("SELECT key, value FROM kv WHERE scope = 'customModels'"))f.customModels.push((0,e.q)(b.value));for(let b of a.all("SELECT key, value FROM kv WHERE scope = 'mitmAlias'"))f.mitmAlias[b.key]=(0,e.q)(b.value);for(let b of a.all("SELECT key, value FROM kv WHERE scope = 'pricing'"))f.pricing[b.key]=(0,e.q)(b.value);for(let b of a.all("SELECT key, value FROM kv WHERE scope = 'disabledModels'"))f.disabledModels[b.key]=(0,e.q)(b.value,[]);return f}async function ah(a){if(!a||"object"!=typeof a||Array.isArray(a))throw Error("Invalid database payload");let b=await (0,d.c)();return b.transaction(()=>{for(let c of(b.run("DELETE FROM settings"),b.run("DELETE FROM providerConnections"),b.run("DELETE FROM providerNodes"),b.run("DELETE FROM proxyPools"),b.run("DELETE FROM apiKeys"),b.run("DELETE FROM combos"),b.run("DELETE FROM kv WHERE scope IN ('modelAliases', 'customModels', 'mitmAlias', 'pricing', 'disabledModels')"),a.settings&&b.run("INSERT INTO settings(id, data) VALUES(1, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data",[(0,e.s)(a.settings)]),a.providerConnections||[])){let{id:a,provider:d,authType:f,name:g,email:h,priority:i,isActive:j,createdAt:k,updatedAt:l,...m}=c;b.run("INSERT OR REPLACE INTO providerConnections(id, provider, authType, name, email, priority, isActive, data, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",[a,d,f||"oauth",g||null,h||null,i||null,+(!1!==j),(0,e.s)(m),k||new Date().toISOString(),l||new Date().toISOString()])}for(let c of a.providerNodes||[]){let{id:a,type:d,name:f,createdAt:g,updatedAt:h,...i}=c;b.run("INSERT OR REPLACE INTO providerNodes(id, type, name, data, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)",[a,d||null,f||null,(0,e.s)(i),g||new Date().toISOString(),h||new Date().toISOString()])}for(let c of a.proxyPools||[]){let{id:a,isActive:d,testStatus:f,createdAt:g,updatedAt:h,...i}=c;b.run("INSERT OR REPLACE INTO proxyPools(id, isActive, testStatus, data, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)",[a,+(!1!==d),f||"unknown",(0,e.s)(i),g||new Date().toISOString(),h||new Date().toISOString()])}for(let c of a.apiKeys||[]){let a=h.M0;if(void 0!==c.access){let b=(0,g.M7)(c.access);if(!b.ok)throw Error(`apiKeys ${c.id}: ${b.error}`);a=b.value}let d=(0,g.aB)(a);b.run("INSERT OR REPLACE INTO apiKeys(id, key, name, machineId, isActive, createdAt, accessRestricted, accessAllow) VALUES(?, ?, ?, ?, ?, ?, ?, ?)",[c.id,c.key,c.name||null,c.machineId||null,+(!1!==c.isActive),c.createdAt||new Date().toISOString(),d.accessRestricted,d.accessAllow])}for(let c of a.combos||[])b.run("INSERT OR REPLACE INTO combos(id, name, kind, models, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)",[c.id,c.name,c.kind||null,(0,e.s)(c.models||[]),c.createdAt||new Date().toISOString(),c.updatedAt||new Date().toISOString()]);for(let[c,d]of Object.entries(a.modelAliases||{}))b.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('modelAliases', ?, ?)",[c,(0,e.s)(d)]);for(let c of a.customModels||[]){let a=`${c.providerAlias}|${c.id}|${c.type||"llm"}`;b.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('customModels', ?, ?)",[a,(0,e.s)(c)])}for(let[c,d]of Object.entries(a.mitmAlias||{}))b.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('mitmAlias', ?, ?)",[c,(0,e.s)(d||{})]);for(let[c,d]of Object.entries(a.pricing||{}))b.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('pricing', ?, ?)",[c,(0,e.s)(d||{})]);for(let[c,d]of Object.entries(a.disabledModels||{}))b.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('disabledModels', ?, ?)",[c,(0,e.s)(d||[])])}),(0,f.vZ)(),await ag()}process.off("beforeExit",af),process.off("SIGINT",af),process.off("SIGTERM",af),process.off("exit",af),process.on("beforeExit",af),process.on("SIGINT",af),process.on("SIGTERM",af),process.on("exit",af)},95658:(a,b,c)=>{"use strict";c.d(b,{AL:()=>j,HG:()=>i,Jh:()=>m,KQ:()=>k,Or:()=>l});var d=c(76760),e=c.n(d),f=c(73024),g=c.n(f),h=c(49120);let i=e().join(h.n,"db"),j=e().join(i,"data.sqlite"),k=e().join(i,"backups"),l={main:e().join(h.n,"db.json"),usage:e().join(h.n,"usage.json"),disabled:e().join(h.n,"disabledModels.json"),details:e().join(h.n,"request-details.json")};function m(){for(let a of[h.n,i,k])g().existsSync(a)||g().mkdirSync(a,{recursive:!0})}},96487:()=>{},97914:(a,b,c)=>{"use strict";c.d(b,{KJ:()=>l,VT:()=>n,getPricingForModel:()=>k,r4:()=>j,yF:()=>m});var d=c(36366),e=c(644);let f=(0,c(22846).U)("pricing"),g={value:null,expiresAt:0};function h(){g={value:null,expiresAt:0}}async function i(){return await f.getAll()}async function j(){let a=Date.now();if(g.value&&g.expiresAt>a)return g.value;let b=await i(),{PROVIDER_PRICING:d}=await c.e(8920).then(c.bind(c,58920)),e={};for(let[a,c]of Object.entries(d))if(e[a]={...c},b[a])for(let[c,d]of Object.entries(b[a]))e[a][c]=e[a][c]?{...e[a][c],...d}:d;for(let[a,c]of Object.entries(b))if(e[a])for(let[b,d]of Object.entries(c))e[a][b]||(e[a][b]=d);else e[a]={...c};return g={value:e,expiresAt:a+5e3},e}async function k(a,b){if(!b)return null;let d=await i();if(a&&d[a]?.[b])return d[a][b];let{getPricingForModel:e}=await c.e(8920).then(c.bind(c,58920));return e(a,b)}async function l(a){let b=await (0,d.c)();return b.transaction(()=>{for(let[c,d]of Object.entries(a)){let a=b.get("SELECT value FROM kv WHERE scope = 'pricing' AND key = ?",[c]),f={...a&&(0,e.q)(a.value,{})||{}};for(let[a,b]of Object.entries(d))f[a]=b;b.run("INSERT INTO kv(scope, key, value) VALUES('pricing', ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value",[c,(0,e.s)(f)])}}),h(),await i()}async function m(a,b){if(!a)return await i();let c=await (0,d.c)();return c.transaction(()=>{if(!b)return void c.run("DELETE FROM kv WHERE scope = 'pricing' AND key = ?",[a]);let d=c.get("SELECT value FROM kv WHERE scope = 'pricing' AND key = ?",[a]),f=d&&(0,e.q)(d.value,{})||{};delete f[b],0===Object.keys(f).length?c.run("DELETE FROM kv WHERE scope = 'pricing' AND key = ?",[a]):c.run("INSERT INTO kv(scope, key, value) VALUES('pricing', ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value",[a,(0,e.s)(f)])}),h(),await i()}async function n(){return await f.clear(),h(),{}}}};
@@ -1 +1 @@
1
- "use strict";exports.id=9604,exports.ids=[615,9604],exports.modules={7803:(a,b,c)=>{c.r(b),c.d(b,{debug:()=>o,error:()=>r,errorLine:()=>l,fmtThink:()=>m,info:()=>p,line:()=>k,maskKey:()=>v,nextTag:()=>i,request:()=>s,response:()=>t,stream:()=>u,tagForSession:()=>j,warn:()=>q});let d={DEBUG:0,INFO:1,WARN:2,ERROR:3},e=d[process.env.LOG_LEVEL?.toUpperCase?.()]??d.INFO;function f(){return new Date().toLocaleTimeString("en-US",{hour12:!1})}let g=["\uD83D\uDFE2","\uD83D\uDD35","\uD83D\uDFE3","\uD83D\uDFE1","\uD83D\uDFE0","\uD83D\uDD34","⚪","\uD83D\uDFE4"],h=0;function i(){let a=g[h%g.length];return h++,a}function j(a){if(!a)return i();let b=0;for(let c=0;c<a.length;c++)b=31*b+a.charCodeAt(c)|0;return g[Math.abs(b)%g.length]}function k(a,b,c){e>d.INFO||console.log(`[${f()}] ${a} ${b} ${c}`)}function l(a,b,c){console.log(`[${f()}] ${a} ${b} ${c}`)}function m(a){return a&&a.mode?"none"===a.mode?"off":"auto"===a.mode?"auto":"budget"===a.mode?a.budget>=1e3?`${Math.round(a.budget/1e3)}k`:`${a.budget}`:"level"===a.mode?a.level:null:null}function n(a){if(!a)return"";if("string"==typeof a)return a;try{return JSON.stringify(a)}catch{return String(a)}}function o(a,b,c){if(e<=d.DEBUG){let d=c?` ${n(c)}`:"";console.log(`[${f()}] 🔍 [${a}] ${b}${d}`)}}function p(a,b,c){if(e<=d.INFO){let d=c?` ${n(c)}`:"";console.log(`[${f()}] ℹ️ [${a}] ${b}${d}`)}}function q(a,b,c){if(e<=d.WARN){let d=c?` ${n(c)}`:"";console.warn(`[${f()}] ⚠️ [${a}] ${b}${d}`)}}function r(a,b,c){if(e<=d.ERROR){let d=c?` ${n(c)}`:"";console.log(`[${f()}] ❌ [${a}] ${b}${d}`)}}function s(a,b,c){let d=c?` ${n(c)}`:"";console.log(`\x1b[36m[${f()}] 📥 ${a} ${b}${d}\x1b[0m`)}function t(a,b,c){let d=c?` ${n(c)}`:"";console.log(`[${f()}] ${a<400?"\uD83D\uDCE4":"\uD83D\uDCA5"} ${a} (${b}ms)${d}`)}function u(a,b){let c=b?` ${n(b)}`:"";console.log(`[${f()}] 🌊 [STREAM] ${a}${c}`)}function v(a){return!a||a.length<8?"***":`${a.slice(0,4)}...${a.slice(-4)}`}},27811:(a,b,c)=>{c.d(b,{Ge:()=>v,QU:()=>s,TM:()=>n,cI:()=>r,cZ:()=>u,dR:()=>t,j:()=>w});var d=c(74452),e=c(1541),f=c(38775),g=c(40615),h=c(38606),i=c(43659),j=c(41004),k=c(7803);let l=a=>String(a).toLowerCase(),m=(a,b)=>l(`${a}/${b}`);async function n(a){let b=function(a){let b=a?.headers;if(!b?.get)return null;let c=b.get("Authorization");if(c?.startsWith("Bearer "))return c.slice(7);let d=b.get("x-api-key");if(d)return d;let e=b.get("x-goog-api-key");if(e)return e;try{return new URL(a.url).searchParams.get("key")||null}catch{return null}}(a);if(!b)return null;let c=await (0,d.getApiKeyByKey)(b);return c?.access?.restricted?{keyId:c.id,keyName:c.name||c.id,allow:c.access.allow||[],_sets:null}:null}async function o(a){if(a._sets)return a._sets;let b=new Set((await (0,e.Uv)()).map(a=>l(a.name))),c=new Set,d=new Set,h=new Set,i=new Set;for(let e of a.allow){let a=l(e);if(b.has(a)){c.add(a);continue}let j=await (0,f.mA)(e);j?.provider&&j.model&&(d.add(m(j.provider,j.model)),i.add(l(j.provider))),e.includes("/")||h.add(l((0,g.rs)(e)))}return a._sets={combos:c,models:d,providers:h,modelProviders:i},a._sets}async function p(a,b){let c=await o(a),d=await (0,f.mA)(b);return d?.provider?c.models.has(m(d.provider,d.model)):c.combos.has(l(b))}function q(a,b){return k.warn("AUTH",`key-access: key "${a.keyName}" denied "${b}"`),(0,i.yj)(j.gx.FORBIDDEN,(0,h.Cq)(b))}async function r(a,b){if(!a)return null;if("string"!=typeof b||!b)return q(a,String(b??""));let c=await o(a);return(await (0,f.d_)(b)?c.combos.has(l(b)):await p(a,b))?null:q(a,b)}async function s(a,b,c,d){if(!a)return null;let e=b||(c?`${c}/${d??""}`:"");return c&&d&&(await o(a)).models.has(m(c,d))?null:q(a,e)}async function t(a,b,c){if(!a)return null;if("string"!=typeof b||!b)return q(a,String(b??""));let d=await o(a);return(c?d.combos.has(l(b)):d.providers.has(l((0,g.rs)(b))))?null:q(a,b)}async function u(a,b){if(!a)return null;let c=await o(a),d=l(b||"");return c.providers.has(d)||c.modelProviders.has(d)?null:q(a,b||"")}async function v(a,b,c){if(!a||!Array.isArray(b))return b;let d=new Set(c||[]),e=[];for(let c of b)d.has(c)||await p(a,c)?e.push(c):k.info("AUTH",`key-access: key "${a.keyName}" skips adapter model "${c}" (not allowed)`);return e}async function w(a,b){if(!a||!Array.isArray(b))return b;let c=await o(a),d=[];for(let a of b){if(!a?.id)continue;if(a.owned_by===h.WR){c.combos.has(l(a.id))&&d.push(a);continue}let b=await (0,f.mA)(a.id);if(b?.provider){if(h.YR.includes(a.kind)){c.providers.has(l(b.provider))&&d.push(a);continue}c.models.has(m(b.provider,b.model))&&d.push(a)}}return d}},38775:(a,b,c)=>{c.d(b,{d_:()=>j,mA:()=>i});var d=c(89718),e=c(40669),f=c(72375);let g={xmtp:"xiaomi-tokenplan","xiaomi-tokenplan":"xiaomi-tokenplan"},h=new Set(Object.keys(g));for(let a of f.default)for(let b of(h.add(a.id),a.alias&&h.add(a.alias),a.aliases||[]))h.add(b);async function i(a){let b,c=(b=(0,e.Xh)(a),b?.providerAlias&&g[b.providerAlias]?{...b,provider:g[b.providerAlias]}:b);if(!c.isAlias){if(!h.has(c.providerAlias)){let a=(await (0,d.Fh)({type:"openai-compatible"})).find(a=>a.prefix===c.providerAlias);if(a)return{provider:a.id,model:c.model};let b=(await (0,d.Fh)({type:"anthropic-compatible"})).find(a=>a.prefix===c.providerAlias);if(b)return{provider:b.id,model:c.model};let e=(await (0,d.Fh)({type:"custom-embedding"})).find(a=>a.prefix===c.providerAlias);if(e)return{provider:e.id,model:c.model}}return{provider:c.provider,model:c.model}}return await (0,d.Dj)(c.model)?{provider:null,model:c.model}:(0,e.js)(a,d.OM)}async function j(a){if(a.includes("/"))return null;let b=await (0,d.Dj)(a);return b&&b.models&&b.models.length>0?b.models:null}},39006:a=>{a.exports={rE:"0.6.8"}},40615:(a,b,c)=>{c.d(b,{AI_PROVIDERS:()=>s,js:()=>w,DI:()=>n,fg:()=>k,Pd:()=>o,IS:()=>h,nJ:()=>i,zN:()=>j,JH:()=>m,jO:()=>A,wb:()=>z,br:()=>l,wG:()=>v,zt:()=>t,gb:()=>q,gC:()=>r,mq:()=>p,HQ:()=>y,rs:()=>u});var d=c(72375);let e="⚠️ Risk Notice: This provider uses a subscription/OAuth session not officially licensed for proxy/router use. Account may be restricted or banned. Use at your own risk.";Object.fromEntries(d.default.filter(a=>a.display).map(a=>{let b;return[a.id,"RISK_NOTICE"===(b=a.display).deprecationNotice?{...b,deprecationNotice:e}:b]}));let f=["serviceKinds","ttsConfig","sttConfig","embeddingConfig","imageConfig","imageToTextConfig","videoConfig","musicConfig","searchViaChat","searchConfig","fetchConfig","credentialFallback","systemoneConfig","modelsFetcher","mediaPriority","hiddenKinds"],g=a=>Object.fromEntries(d.default.filter(b=>b.category===a).map(a=>[a.id,function(a){let b={};for(let c of(a.media&&Object.assign(b,a.media),f))void 0!==a[c]&&(b[c]=a[c]);let c={...a.display||{}};return"RISK_NOTICE"===c.deprecationNotice&&(c.deprecationNotice=e),{...c,id:a.id,alias:a.uiAlias||a.alias,...a.hidden?{hidden:!0}:{},...b,...void 0!==a.priority?{priority:a.priority}:{},...a.hasFree?{hasFree:!0}:{},...a.thinkingConfig?{thinkingConfig:a.thinkingConfig}:{},...a.regions?{regions:a.regions,defaultRegion:a.defaultRegion}:{},...a.hasProviderSpecificData?{hasProviderSpecificData:!0}:{},...a.noAuth?{noAuth:!0}:{},...a.passthroughModels?{passthroughModels:!0}:{},...a.hasOAuth?{hasOAuth:!0}:{},...a.authModes?{authModes:a.authModes}:{},...a.authType?{authType:a.authType}:{},...a.authHint?{authHint:a.authHint}:{},...a.apiKeyOptionalWith?{apiKeyOptionalWith:a.apiKeyOptionalWith}:{},...a.credentialForm?{credentialForm:a.credentialForm}:{}}}(a)])),h=g("free"),i=g("freeTier"),j=g("oauth"),k=g("apikey"),l=g("webCookie"),m="openai-compatible-",n="anthropic-compatible-",o="custom-embedding-";function p(a){return"string"==typeof a&&a.startsWith(m)}function q(a){return"string"==typeof a&&a.startsWith(n)}function r(a){return"string"==typeof a&&a.startsWith(o)}let s={...h,...i,...j,...k,...l};function t(a){for(let b of Object.values(s))if(b.alias===a||b.id===a)return b;return null}function u(a){let b=t(a);return b?.id||a}function v(a){let b=s[a];return b?.alias||a}let w=Object.values(s).reduce((a,b)=>(a[b.alias]=b.id,a),{});Object.values(s).reduce((a,b)=>(a[b.id]=b.alias,a),{});let x=new Set;for(let a of d.default)for(let b of[a.id,a.alias,a.uiAlias,...a.aliases||[]])b&&x.add(b);function y(a){return x.has(a)}let z=d.default.filter(a=>a.features?.usage).map(a=>a.id),A=d.default.filter(a=>a.features?.usageApikey).map(a=>a.id)},43659:(a,b,c)=>{c.d(b,{A1:()=>h,lR:()=>j,wO:()=>i,xJ:()=>e,yj:()=>f,zL:()=>g});var d=c(3662);function e(a,b){let c=d.LY[a]||(a>=500?{type:"server_error",code:"internal_server_error"}:{type:"invalid_request_error",code:""});return{error:{message:b||d.O[a]||"An error occurred",type:c.type,code:c.code}}}function f(a,b,c=null){return new Response(JSON.stringify(e(a,b)),{status:a,headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*",...c}})}async function g(a,b=null){let c="";try{c=await a.text()}catch{c=""}if(b&&"function"==typeof b.parseError)try{let e=b.parseError(a,c);if(e&&"object"==typeof e){let b=e.message||d.O[a.status]||`Upstream error: ${a.status}`;return{statusCode:e.status||a.status,message:b,resetsAtMs:e.resetsAtMs}}}catch{}let e="";try{let a=JSON.parse(c);e=a.error?.message||a.message||a.error||c}catch{e=c}let f=("string"==typeof e?e:JSON.stringify(e))||d.O[a.status]||`Upstream error: ${a.status}`;return{statusCode:a.status,message:f}}function h(a,b,c,d=null){return{success:!1,status:a,error:b,resetsAtMs:c,response:f(a,b,d)}}function i(a,b,c,d,e=null){let f=Math.max(Math.ceil((new Date(c).getTime()-Date.now())/1e3),1);return new Response(JSON.stringify({error:{message:`${b} (${d})`}}),{status:a,headers:{...e,"Content-Type":"application/json","retry-after":String(f)}})}function j(a,b,c,d){let e=d||a.code||"FETCH_FAILED",f=a.message||"Unknown error",g=a.cause?.code,h=a.cause?.message,i=g||h?` (cause: ${[g,h].filter(Boolean).join(": ")})`:"";return`[${e}]: ${f}${i}`}},89718:(a,b,c)=>{c.d(b,{CG:()=>d.CG,Dj:()=>d.Dj,Fh:()=>d.Fh,Iq:()=>d.Iq,K1:()=>d.K1,KJ:()=>d.KJ,L:()=>d.L,L9:()=>d.L9,Lh:()=>d.Lh,Mc:()=>d.Mc,OM:()=>d.OM,PX:()=>d.PX,Pc:()=>d.Pc,Q_:()=>d.Q_,Qu:()=>d.Qu,S8:()=>d.S8,TZ:()=>d.TZ,Uv:()=>d.Uv,VT:()=>d.VT,XW:()=>d.XW,Xx:()=>d.Xx,Yd:()=>d.Yd,ZO:()=>d.ZO,bI:()=>d.bI,c:()=>d.c,ek:()=>d.ek,fK:()=>d.fK,fv:()=>d.fv,getProviderConnections:()=>d.P,h1:()=>d.h1,ho:()=>d.ho,hr:()=>d.hr,i0:()=>d.i0,iE:()=>d.iE,jd:()=>d.jd,mt:()=>d.mt,o5:()=>d.o5,oF:()=>d.oF,oG:()=>d.oG,op:()=>d.op,r4:()=>d.r4,uL:()=>d.uL,ui:()=>d.ui,updateProviderConnection:()=>d.rj,uv:()=>d.uv,yF:()=>d.yF,yg:()=>d.yg,zP:()=>d.zP});var d=c(83192)}};
1
+ "use strict";exports.id=9604,exports.ids=[615,9604],exports.modules={7803:(a,b,c)=>{c.r(b),c.d(b,{debug:()=>o,error:()=>r,errorLine:()=>l,fmtThink:()=>m,info:()=>p,line:()=>k,maskKey:()=>v,nextTag:()=>i,request:()=>s,response:()=>t,stream:()=>u,tagForSession:()=>j,warn:()=>q});let d={DEBUG:0,INFO:1,WARN:2,ERROR:3},e=d[process.env.LOG_LEVEL?.toUpperCase?.()]??d.INFO;function f(){return new Date().toLocaleTimeString("en-US",{hour12:!1})}let g=["\uD83D\uDFE2","\uD83D\uDD35","\uD83D\uDFE3","\uD83D\uDFE1","\uD83D\uDFE0","\uD83D\uDD34","⚪","\uD83D\uDFE4"],h=0;function i(){let a=g[h%g.length];return h++,a}function j(a){if(!a)return i();let b=0;for(let c=0;c<a.length;c++)b=31*b+a.charCodeAt(c)|0;return g[Math.abs(b)%g.length]}function k(a,b,c){e>d.INFO||console.log(`[${f()}] ${a} ${b} ${c}`)}function l(a,b,c){console.log(`[${f()}] ${a} ${b} ${c}`)}function m(a){return a&&a.mode?"none"===a.mode?"off":"auto"===a.mode?"auto":"budget"===a.mode?a.budget>=1e3?`${Math.round(a.budget/1e3)}k`:`${a.budget}`:"level"===a.mode?a.level:null:null}function n(a){if(!a)return"";if("string"==typeof a)return a;try{return JSON.stringify(a)}catch{return String(a)}}function o(a,b,c){if(e<=d.DEBUG){let d=c?` ${n(c)}`:"";console.log(`[${f()}] 🔍 [${a}] ${b}${d}`)}}function p(a,b,c){if(e<=d.INFO){let d=c?` ${n(c)}`:"";console.log(`[${f()}] ℹ️ [${a}] ${b}${d}`)}}function q(a,b,c){if(e<=d.WARN){let d=c?` ${n(c)}`:"";console.warn(`[${f()}] ⚠️ [${a}] ${b}${d}`)}}function r(a,b,c){if(e<=d.ERROR){let d=c?` ${n(c)}`:"";console.log(`[${f()}] ❌ [${a}] ${b}${d}`)}}function s(a,b,c){let d=c?` ${n(c)}`:"";console.log(`\x1b[36m[${f()}] 📥 ${a} ${b}${d}\x1b[0m`)}function t(a,b,c){let d=c?` ${n(c)}`:"";console.log(`[${f()}] ${a<400?"\uD83D\uDCE4":"\uD83D\uDCA5"} ${a} (${b}ms)${d}`)}function u(a,b){let c=b?` ${n(b)}`:"";console.log(`[${f()}] 🌊 [STREAM] ${a}${c}`)}function v(a){return!a||a.length<8?"***":`${a.slice(0,4)}...${a.slice(-4)}`}},27811:(a,b,c)=>{c.d(b,{Ge:()=>v,QU:()=>s,TM:()=>n,cI:()=>r,cZ:()=>u,dR:()=>t,j:()=>w});var d=c(74452),e=c(1541),f=c(38775),g=c(40615),h=c(38606),i=c(43659),j=c(41004),k=c(7803);let l=a=>String(a).toLowerCase(),m=(a,b)=>l(`${a}/${b}`);async function n(a){let b=function(a){let b=a?.headers;if(!b?.get)return null;let c=b.get("Authorization");if(c?.startsWith("Bearer "))return c.slice(7);let d=b.get("x-api-key");if(d)return d;let e=b.get("x-goog-api-key");if(e)return e;try{return new URL(a.url).searchParams.get("key")||null}catch{return null}}(a);if(!b)return null;let c=await (0,d.getApiKeyByKey)(b);return c?.access?.restricted?{keyId:c.id,keyName:c.name||c.id,allow:c.access.allow||[],_sets:null}:null}async function o(a){if(a._sets)return a._sets;let b=new Set((await (0,e.Uv)()).map(a=>l(a.name))),c=new Set,d=new Set,h=new Set,i=new Set;for(let e of a.allow){let a=l(e);if(b.has(a)){c.add(a);continue}let j=await (0,f.mA)(e);j?.provider&&j.model&&(d.add(m(j.provider,j.model)),i.add(l(j.provider))),e.includes("/")||h.add(l((0,g.rs)(e)))}return a._sets={combos:c,models:d,providers:h,modelProviders:i},a._sets}async function p(a,b){let c=await o(a),d=await (0,f.mA)(b);return d?.provider?c.models.has(m(d.provider,d.model)):c.combos.has(l(b))}function q(a,b){return k.warn("AUTH",`key-access: key "${a.keyName}" denied "${b}"`),(0,i.yj)(j.gx.FORBIDDEN,(0,h.Cq)(b))}async function r(a,b){if(!a)return null;if("string"!=typeof b||!b)return q(a,String(b??""));let c=await o(a);return(await (0,f.d_)(b)?c.combos.has(l(b)):await p(a,b))?null:q(a,b)}async function s(a,b,c,d){if(!a)return null;let e=b||(c?`${c}/${d??""}`:"");return c&&d&&(await o(a)).models.has(m(c,d))?null:q(a,e)}async function t(a,b,c){if(!a)return null;if("string"!=typeof b||!b)return q(a,String(b??""));let d=await o(a);return(c?d.combos.has(l(b)):d.providers.has(l((0,g.rs)(b))))?null:q(a,b)}async function u(a,b){if(!a)return null;let c=await o(a),d=l(b||"");return c.providers.has(d)||c.modelProviders.has(d)?null:q(a,b||"")}async function v(a,b,c){if(!a||!Array.isArray(b))return b;let d=new Set(c||[]),e=[];for(let c of b)d.has(c)||await p(a,c)?e.push(c):k.info("AUTH",`key-access: key "${a.keyName}" skips adapter model "${c}" (not allowed)`);return e}async function w(a,b){if(!a||!Array.isArray(b))return b;let c=await o(a),d=[];for(let a of b){if(!a?.id)continue;if(a.owned_by===h.WR){c.combos.has(l(a.id))&&d.push(a);continue}let b=await (0,f.mA)(a.id);if(b?.provider){if(h.YR.includes(a.kind)){c.providers.has(l(b.provider))&&d.push(a);continue}c.models.has(m(b.provider,b.model))&&d.push(a)}}return d}},38775:(a,b,c)=>{c.d(b,{d_:()=>j,mA:()=>i});var d=c(89718),e=c(40669),f=c(72375);let g={xmtp:"xiaomi-tokenplan","xiaomi-tokenplan":"xiaomi-tokenplan"},h=new Set(Object.keys(g));for(let a of f.default)for(let b of(h.add(a.id),a.alias&&h.add(a.alias),a.aliases||[]))h.add(b);async function i(a){let b,c=(b=(0,e.Xh)(a),b?.providerAlias&&g[b.providerAlias]?{...b,provider:g[b.providerAlias]}:b);if(!c.isAlias){if(!h.has(c.providerAlias)){let a=(await (0,d.Fh)({type:"openai-compatible"})).find(a=>a.prefix===c.providerAlias);if(a)return{provider:a.id,model:c.model};let b=(await (0,d.Fh)({type:"anthropic-compatible"})).find(a=>a.prefix===c.providerAlias);if(b)return{provider:b.id,model:c.model};let e=(await (0,d.Fh)({type:"custom-embedding"})).find(a=>a.prefix===c.providerAlias);if(e)return{provider:e.id,model:c.model}}return{provider:c.provider,model:c.model}}return await (0,d.Dj)(c.model)?{provider:null,model:c.model}:(0,e.js)(a,d.OM)}async function j(a){if(a.includes("/"))return null;let b=await (0,d.Dj)(a);return b&&b.models&&b.models.length>0?b.models:null}},39006:a=>{a.exports={rE:"0.6.10"}},40615:(a,b,c)=>{c.d(b,{AI_PROVIDERS:()=>s,js:()=>w,DI:()=>n,fg:()=>k,Pd:()=>o,IS:()=>h,nJ:()=>i,zN:()=>j,JH:()=>m,jO:()=>A,wb:()=>z,br:()=>l,wG:()=>v,zt:()=>t,gb:()=>q,gC:()=>r,mq:()=>p,HQ:()=>y,rs:()=>u});var d=c(72375);let e="⚠️ Risk Notice: This provider uses a subscription/OAuth session not officially licensed for proxy/router use. Account may be restricted or banned. Use at your own risk.";Object.fromEntries(d.default.filter(a=>a.display).map(a=>{let b;return[a.id,"RISK_NOTICE"===(b=a.display).deprecationNotice?{...b,deprecationNotice:e}:b]}));let f=["serviceKinds","ttsConfig","sttConfig","embeddingConfig","imageConfig","imageToTextConfig","videoConfig","musicConfig","searchViaChat","searchConfig","fetchConfig","credentialFallback","systemoneConfig","modelsFetcher","mediaPriority","hiddenKinds"],g=a=>Object.fromEntries(d.default.filter(b=>b.category===a).map(a=>[a.id,function(a){let b={};for(let c of(a.media&&Object.assign(b,a.media),f))void 0!==a[c]&&(b[c]=a[c]);let c={...a.display||{}};return"RISK_NOTICE"===c.deprecationNotice&&(c.deprecationNotice=e),{...c,id:a.id,alias:a.uiAlias||a.alias,...a.hidden?{hidden:!0}:{},...b,...void 0!==a.priority?{priority:a.priority}:{},...a.hasFree?{hasFree:!0}:{},...a.thinkingConfig?{thinkingConfig:a.thinkingConfig}:{},...a.regions?{regions:a.regions,defaultRegion:a.defaultRegion}:{},...a.hasProviderSpecificData?{hasProviderSpecificData:!0}:{},...a.noAuth?{noAuth:!0}:{},...a.passthroughModels?{passthroughModels:!0}:{},...a.hasOAuth?{hasOAuth:!0}:{},...a.authModes?{authModes:a.authModes}:{},...a.authType?{authType:a.authType}:{},...a.authHint?{authHint:a.authHint}:{},...a.apiKeyOptionalWith?{apiKeyOptionalWith:a.apiKeyOptionalWith}:{},...a.credentialForm?{credentialForm:a.credentialForm}:{}}}(a)])),h=g("free"),i=g("freeTier"),j=g("oauth"),k=g("apikey"),l=g("webCookie"),m="openai-compatible-",n="anthropic-compatible-",o="custom-embedding-";function p(a){return"string"==typeof a&&a.startsWith(m)}function q(a){return"string"==typeof a&&a.startsWith(n)}function r(a){return"string"==typeof a&&a.startsWith(o)}let s={...h,...i,...j,...k,...l};function t(a){for(let b of Object.values(s))if(b.alias===a||b.id===a)return b;return null}function u(a){let b=t(a);return b?.id||a}function v(a){let b=s[a];return b?.alias||a}let w=Object.values(s).reduce((a,b)=>(a[b.alias]=b.id,a),{});Object.values(s).reduce((a,b)=>(a[b.id]=b.alias,a),{});let x=new Set;for(let a of d.default)for(let b of[a.id,a.alias,a.uiAlias,...a.aliases||[]])b&&x.add(b);function y(a){return x.has(a)}let z=d.default.filter(a=>a.features?.usage).map(a=>a.id),A=d.default.filter(a=>a.features?.usageApikey).map(a=>a.id)},43659:(a,b,c)=>{c.d(b,{A1:()=>h,lR:()=>j,wO:()=>i,xJ:()=>e,yj:()=>f,zL:()=>g});var d=c(3662);function e(a,b){let c=d.LY[a]||(a>=500?{type:"server_error",code:"internal_server_error"}:{type:"invalid_request_error",code:""});return{error:{message:b||d.O[a]||"An error occurred",type:c.type,code:c.code}}}function f(a,b,c=null){return new Response(JSON.stringify(e(a,b)),{status:a,headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*",...c}})}async function g(a,b=null){let c="";try{c=await a.text()}catch{c=""}if(b&&"function"==typeof b.parseError)try{let e=b.parseError(a,c);if(e&&"object"==typeof e){let b=e.message||d.O[a.status]||`Upstream error: ${a.status}`;return{statusCode:e.status||a.status,message:b,resetsAtMs:e.resetsAtMs}}}catch{}let e="";try{let a=JSON.parse(c);e=a.error?.message||a.message||a.error||c}catch{e=c}let f=("string"==typeof e?e:JSON.stringify(e))||d.O[a.status]||`Upstream error: ${a.status}`;return{statusCode:a.status,message:f}}function h(a,b,c,d=null){return{success:!1,status:a,error:b,resetsAtMs:c,response:f(a,b,d)}}function i(a,b,c,d,e=null){let f=Math.max(Math.ceil((new Date(c).getTime()-Date.now())/1e3),1);return new Response(JSON.stringify({error:{message:`${b} (${d})`}}),{status:a,headers:{...e,"Content-Type":"application/json","retry-after":String(f)}})}function j(a,b,c,d){let e=d||a.code||"FETCH_FAILED",f=a.message||"Unknown error",g=a.cause?.code,h=a.cause?.message,i=g||h?` (cause: ${[g,h].filter(Boolean).join(": ")})`:"";return`[${e}]: ${f}${i}`}},89718:(a,b,c)=>{c.d(b,{CG:()=>d.CG,Dj:()=>d.Dj,Fh:()=>d.Fh,Iq:()=>d.Iq,K1:()=>d.K1,KJ:()=>d.KJ,L:()=>d.L,L9:()=>d.L9,Lh:()=>d.Lh,Mc:()=>d.Mc,OM:()=>d.OM,PX:()=>d.PX,Pc:()=>d.Pc,Q_:()=>d.Q_,Qu:()=>d.Qu,S8:()=>d.S8,TZ:()=>d.TZ,Uv:()=>d.Uv,VT:()=>d.VT,XW:()=>d.XW,Xx:()=>d.Xx,Yd:()=>d.Yd,ZO:()=>d.ZO,bI:()=>d.bI,c:()=>d.c,ek:()=>d.ek,fK:()=>d.fK,fv:()=>d.fv,getProviderConnections:()=>d.P,h1:()=>d.h1,ho:()=>d.ho,hr:()=>d.hr,i0:()=>d.i0,iE:()=>d.iE,jd:()=>d.jd,mt:()=>d.mt,o5:()=>d.o5,oF:()=>d.oF,oG:()=>d.oG,op:()=>d.op,r4:()=>d.r4,uL:()=>d.uL,ui:()=>d.ui,updateProviderConnection:()=>d.rj,uv:()=>d.uv,yF:()=>d.yF,yg:()=>d.yg,zP:()=>d.zP});var d=c(83192)}};
@@ -1 +1 @@
1
- "use strict";exports.id=9609,exports.ids=[9609],exports.modules={3662:(a,b,c)=>{c.d(b,{EQ:()=>f,LY:()=>d,O:()=>e,fh:()=>h,t2:()=>i,wf:()=>g});let d={400:{type:"invalid_request_error",code:"bad_request"},401:{type:"authentication_error",code:"invalid_api_key"},402:{type:"billing_error",code:"payment_required"},403:{type:"permission_error",code:"insufficient_quota"},404:{type:"invalid_request_error",code:"model_not_found"},406:{type:"invalid_request_error",code:"model_not_supported"},429:{type:"rate_limit_error",code:"rate_limit_exceeded"},500:{type:"server_error",code:"internal_server_error"},502:{type:"server_error",code:"bad_gateway"},503:{type:"server_error",code:"service_unavailable"},504:{type:"server_error",code:"gateway_timeout"}},e={400:"Bad request",401:"Invalid API key provided",402:"Payment required",403:"You exceeded your current quota",404:"Model not found",406:"Model not supported",429:"Rate limit exceeded",500:"Internal server error",502:"Bad gateway - upstream provider error",503:"Service temporarily unavailable",504:"Gateway timeout"},f={base:2e3,max:3e5,maxLevel:15},g=3e4,h=18e5,i=[{provider:"codex",text:"model is not supported when using codex with a chatgpt account",cooldownMs:18e5},{text:"no credentials",cooldownMs:12e4},{text:"request not allowed",cooldownMs:5e3},{text:"improperly formed request",cooldownMs:12e4},{text:"rate limit",backoff:!0},{text:"too many requests",backoff:!0},{text:"quota exceeded",backoff:!0},{text:"capacity",backoff:!0},{text:"overloaded",backoff:!0},{status:401,cooldownMs:12e4},{status:402,cooldownMs:12e4},{status:403,cooldownMs:12e4},{status:404,cooldownMs:12e4},{status:429,backoff:!0}]},39609:(a,b,c)=>{c.r(b),c.d(b,{default:()=>A,normalizeProxyUrl:()=>q,proxyAwareFetch:()=>y});var d=c(27910),e=c(55591),f=c.n(e),g=c(41004);let h=globalThis.fetch,i=new Map,j=new Map,k=new Set(["SELF_SIGNED_CERT_IN_CHAIN","DEPTH_ZERO_SELF_SIGNED_CERT","UNABLE_TO_VERIFY_LEAF_SIGNATURE","UNABLE_TO_GET_ISSUER_CERT","UNABLE_TO_GET_ISSUER_CERT_LOCALLY","CERT_HAS_EXPIRED","ERR_TLS_CERT_ALTNAME_INVALID"]),l=["cloudcode-pa.googleapis.com","daily-cloudcode-pa.googleapis.com","api.individual.githubcopilot.com","q.us-east-1.amazonaws.com","codewhisperer.us-east-1.amazonaws.com","api2.cursor.sh"],m=["8.8.8.8","8.8.4.4"];function n(a){return null==a?"":String(a).trim()}async function o(a){let b=j.get(a);if(b&&Date.now()<b.expiry)return b.ip;try{let b=await Promise.resolve().then(c.t.bind(c,14985,23)),{promisify:d}=await Promise.resolve().then(c.t.bind(c,28354,23)),e=new b.Resolver;e.setServers(m);let f=d(e.resolve4.bind(e)),h=await f(a);return j.set(a,{ip:h[0],expiry:Date.now()+g.v1.dnsCacheTtlMs}),h[0]}catch(b){return console.warn(`[ProxyFetch] DNS resolve failed for ${a}:`,b.message),null}}function p(a,b){let c,d=n(b);if(!d)return!1;try{c=new URL(a).hostname.toLowerCase()}catch{return!1}return d.split(",").map(a=>a.trim().toLowerCase()).filter(Boolean).some(a=>"*"===a||(a.startsWith(".")?c.endsWith(a)||c===a.slice(1):c===a||c.endsWith(`.${a}`)))}function q(a){let b=n(a);if(!b)return null;try{return new URL(b),b}catch{return`http://${b}`}}let r={keepAliveTimeout:g.o_,keepAliveMaxTimeout:g.z9},s=null;async function t(){if(!s){let{Agent:a}=await c.e(7774).then(c.t.bind(c,47774,19));s=new a(r)}return s}async function u(a,b=!1){let d=q(a);if(!d&&!b)return await t();let e=`${d||"direct"}::${b?"insecure":"secure"}`;if(!i.has(e)){if(i.size>=g.v1.proxyDispatchersMaxSize){let[a,b]=i.entries().next().value;i.delete(a),Promise.resolve(b?.close?.()).catch(()=>{})}let{Agent:a,ProxyAgent:f}=await c.e(7774).then(c.t.bind(c,47774,19)),h=b?{rejectUnauthorized:!1}:void 0,j=d?new f({uri:d,...r,...b?{requestTls:h}:{}}):new a({...r,connect:h});i.set(e,j)}return i.get(e)}async function v(a,b,c){try{let d=c||!b.dispatcher?await u(c):b.dispatcher;return await h(a,{...b,dispatcher:d})}catch(e){let d;if("true"!==process.env.STRICT_SSL&&"1"!==process.env.STRICT_SSL&&(d=e?.cause?.code||e?.code,k.has(d))){if(b.body&&"function"==typeof b.body.getReader&&b.body.locked)throw e;console.warn(`[ProxyFetch] TLS cert verification failed (${e.cause?.code||e.code}), retrying with insecure TLS: ${a}`);let d=await u(c,!0);return await h(a,{...b,dispatcher:d})}throw e}}let w=new(f()).Agent({keepAlive:!0});async function x(a,b,c){return new Promise((e,g)=>{let h={agent:w,host:b,port:443,servername:a.hostname,path:a.pathname+a.search,method:c.method||"POST",headers:{...c.headers,Host:a.hostname}},i=()=>j.destroy(new DOMException("Aborted","AbortError"));if(c.signal?.aborted)return g(new DOMException("Aborted","AbortError"));let j=f().request(h,a=>{let b={ok:a.statusCode>=200&&a.statusCode<300,status:a.statusCode,statusText:a.statusMessage,headers:new Map(Object.entries(a.headers)),body:d.Readable.toWeb(a),text:async()=>{let b=[];for await(let c of a)b.push(c);return Buffer.concat(b).toString()},json:async()=>JSON.parse(await b.text())};a.once("close",()=>{c.signal&&c.signal.removeEventListener("abort",i)}),e(b)});c.signal&&c.signal.addEventListener("abort",i,{once:!0}),j.on("error",a=>{c.signal&&c.signal.removeEventListener("abort",i),g(a)}),c.body&&j.write("string"==typeof c.body?c.body:JSON.stringify(c.body)),j.end()})}async function y(a,b={},c=null){let d="string"==typeof a?a:a.toString(),e=n(c?.vercelRelayUrl);if(e){let a=new URL(d),c={...b.headers instanceof Headers?Object.fromEntries(b.headers.entries()):{...b.headers||{}},"x-relay-target":`${a.protocol}//${a.host}`,"x-relay-path":`${a.pathname}${a.search}`};return h(e,{...b,headers:c})}let f=function(a,b){if(b?.enabled!==!0&&b?.connectionProxyEnabled!==!0)return null;let c=n(b?.url??b?.connectionProxyUrl);if(!c)return null;let d=n(b?.noProxy??b?.connectionNoProxy);return d&&p(a,d)?null:q(c)}(d,c),g=f?null:q(function(a){let b;if(p(a,process.env.NO_PROXY||process.env.no_proxy))return null;try{b=new URL(a).protocol}catch{return null}return"https:"===b?process.env.HTTPS_PROXY||process.env.https_proxy||process.env.ALL_PROXY||process.env.all_proxy:process.env.HTTP_PROXY||process.env.http_proxy||process.env.ALL_PROXY||process.env.all_proxy}(d)),i=f||g;if(function(a){try{let b=new URL(a).hostname;return l.some(a=>b.includes(a))}catch{return!1}}(d)){if(i)try{return await v(a,b,i)}catch(a){if(c?.strictProxy===!0)throw Error(`[ProxyFetch] Proxy required but failed (strictProxy=true): ${a.message}`);console.warn(`[ProxyFetch] Proxy failed, falling back to direct bypass: ${a.message}`)}try{let a=new URL(d),c=await o(a.hostname);if(c)return await x(a,c,b)}catch(a){if(a?.name==="AbortError"||a?.code==="ABORT_ERR")throw a;console.warn(`[ProxyFetch] MITM bypass failed: ${a.message}`)}}if(i)try{return await v(a,b,i)}catch(d){if(c?.strictProxy===!0)throw Error(`[ProxyFetch] Proxy required but failed (strictProxy=true): ${d.message}`);return console.warn(`[ProxyFetch] Proxy failed, falling back to direct: ${d.message}`),v(a,b,null)}let j=c?.proxyPoolId||c?.enabled===!0||c?.connectionProxyEnabled===!0||!!n(c?.url??c?.connectionProxyUrl);if(c?.strictProxy===!0&&j)throw Error("[ProxyFetch] Proxy required but none resolved (strictProxy=true)");return v(a,b,null)}async function z(a,b={}){return y(a,b,null)}globalThis.fetch!==z&&(globalThis.fetch=z);let A=z},41004:(a,b,c)=>{c.d(b,{C8:()=>v,DR:()=>t,IK:()=>o,Ps:()=>g,SA:()=>r,SW:()=>m,Uc:()=>p,Z1:()=>i,bK:()=>n,cI:()=>s,eo:()=>q,gx:()=>d,o_:()=>k,pD:()=>u,pH:()=>j,v1:()=>e,xM:()=>h,z9:()=>l}),c(3662);let d={BAD_REQUEST:400,UNAUTHORIZED:401,PAYMENT_REQUIRED:402,FORBIDDEN:403,NOT_FOUND:404,NOT_ACCEPTABLE:406,REQUEST_TIMEOUT:408,RATE_LIMITED:429,CLIENT_CLOSED_REQUEST:499,SERVER_ERROR:500,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504},e={sessionTtlMs:72e5,sessionCleanupIntervalMs:18e5,dnsCacheTtlMs:3e5,proxyDispatchersMaxSize:20};function f(a,b){let c=process.env[a];if(null==c||""===c)return b;let d=parseInt(c,10);return Number.isFinite(d)&&d>0?d:b}let g=process.env.SEARXNG_URL?.trim()||"http://localhost:8888/search",h=f("STREAM_STALL_TIMEOUT_MS",36e4),i=f("STREAM_FIRST_CHUNK_TIMEOUT_MS",2e5),j=f("FETCH_CONNECT_TIMEOUT_MS",6e4),k=f("UPSTREAM_KEEPALIVE_TIMEOUT_MS",6e4),l=f("UPSTREAM_KEEPALIVE_MAX_MS",6e5),m={idleMs:f("OPENCODE_CLI_IDLE_TIMEOUT_MS",18e4),totalMs:f("OPENCODE_CLI_TOTAL_TIMEOUT_MS",3e5),versionProbeMs:f("OPENCODE_CLI_PROBE_TIMEOUT_MS",8e3),killGraceMs:f("OPENCODE_CLI_KILL_GRACE_MS",2e3),availabilityTtlMs:f("OPENCODE_CLI_PROBE_TTL_MS",6e5)},n=f("SSE_PEEK_BUFFER_LIMIT",262144),o=f("GEMINI_NATIVE_TTS_FETCH_TIMEOUT_MS",45e3),p=64e3,q=32e3,r="x-9router-token-saver",s={429:{attempts:0,delayMs:0},502:{attempts:3,delayMs:3e3},503:{attempts:3,delayMs:2e3},504:{attempts:2,delayMs:3e3}};function t(a){return null==a?{attempts:0,delayMs:2e3}:"number"==typeof a?{attempts:a,delayMs:2e3}:{attempts:a.attempts||0,delayMs:null!=a.delayMs?a.delayMs:2e3}}function u(a,b){return a>0?Math.round(Math.random()*Math.min(3e4,a*2**Math.max(0,b-1))):0}let v=["Please write a 5-10 word title for the following conversation:"]}};
1
+ "use strict";exports.id=9609,exports.ids=[9609],exports.modules={3662:(a,b,c)=>{c.d(b,{EQ:()=>f,LY:()=>d,O:()=>e,fh:()=>h,t2:()=>i,wf:()=>g});let d={400:{type:"invalid_request_error",code:"bad_request"},401:{type:"authentication_error",code:"invalid_api_key"},402:{type:"billing_error",code:"payment_required"},403:{type:"permission_error",code:"insufficient_quota"},404:{type:"invalid_request_error",code:"model_not_found"},406:{type:"invalid_request_error",code:"model_not_supported"},429:{type:"rate_limit_error",code:"rate_limit_exceeded"},500:{type:"server_error",code:"internal_server_error"},502:{type:"server_error",code:"bad_gateway"},503:{type:"server_error",code:"service_unavailable"},504:{type:"server_error",code:"gateway_timeout"}},e={400:"Bad request",401:"Invalid API key provided",402:"Payment required",403:"You exceeded your current quota",404:"Model not found",406:"Model not supported",429:"Rate limit exceeded",500:"Internal server error",502:"Bad gateway - upstream provider error",503:"Service temporarily unavailable",504:"Gateway timeout"},f={base:2e3,max:3e5,maxLevel:15},g=3e4,h=18e5,i=[{provider:"codex",text:"model is not supported when using codex with a chatgpt account",cooldownMs:18e5},{text:"no credentials",cooldownMs:12e4},{text:"request not allowed",cooldownMs:5e3},{text:"improperly formed request",cooldownMs:12e4},{text:"rate limit",backoff:!0},{text:"too many requests",backoff:!0},{text:"quota exceeded",backoff:!0},{text:"capacity",backoff:!0},{text:"overloaded",backoff:!0},{status:401,cooldownMs:12e4},{status:402,cooldownMs:12e4},{status:403,cooldownMs:12e4},{status:404,cooldownMs:12e4},{status:429,backoff:!0}]},39609:(a,b,c)=>{c.r(b),c.d(b,{default:()=>A,normalizeProxyUrl:()=>q,proxyAwareFetch:()=>y});var d=c(27910),e=c(55591),f=c.n(e),g=c(41004);let h=globalThis.fetch,i=new Map,j=new Map,k=new Set(["SELF_SIGNED_CERT_IN_CHAIN","DEPTH_ZERO_SELF_SIGNED_CERT","UNABLE_TO_VERIFY_LEAF_SIGNATURE","UNABLE_TO_GET_ISSUER_CERT","UNABLE_TO_GET_ISSUER_CERT_LOCALLY","CERT_HAS_EXPIRED","ERR_TLS_CERT_ALTNAME_INVALID"]),l=["cloudcode-pa.googleapis.com","daily-cloudcode-pa.googleapis.com","api.individual.githubcopilot.com","q.us-east-1.amazonaws.com","codewhisperer.us-east-1.amazonaws.com","api2.cursor.sh"],m=["8.8.8.8","8.8.4.4"];function n(a){return null==a?"":String(a).trim()}async function o(a){let b=j.get(a);if(b&&Date.now()<b.expiry)return b.ip;try{let b=await Promise.resolve().then(c.t.bind(c,14985,23)),{promisify:d}=await Promise.resolve().then(c.t.bind(c,28354,23)),e=new b.Resolver;e.setServers(m);let f=d(e.resolve4.bind(e)),h=await f(a);return j.set(a,{ip:h[0],expiry:Date.now()+g.v1.dnsCacheTtlMs}),h[0]}catch(b){return console.warn(`[ProxyFetch] DNS resolve failed for ${a}:`,b.message),null}}function p(a,b){let c,d=n(b);if(!d)return!1;try{c=new URL(a).hostname.toLowerCase()}catch{return!1}return d.split(",").map(a=>a.trim().toLowerCase()).filter(Boolean).some(a=>"*"===a||(a.startsWith(".")?c.endsWith(a)||c===a.slice(1):c===a||c.endsWith(`.${a}`)))}function q(a){let b=n(a);if(!b)return null;try{return new URL(b),b}catch{return`http://${b}`}}let r={keepAliveTimeout:g.o_,keepAliveMaxTimeout:g.z9},s=null;async function t(){if(!s){let{Agent:a}=await c.e(7774).then(c.t.bind(c,47774,19));s=new a(r)}return s}async function u(a,b=!1){let d=q(a);if(!d&&!b)return await t();let e=`${d||"direct"}::${b?"insecure":"secure"}`;if(!i.has(e)){if(i.size>=g.v1.proxyDispatchersMaxSize){let[a,b]=i.entries().next().value;i.delete(a),Promise.resolve(b?.close?.()).catch(()=>{})}let{Agent:a,ProxyAgent:f}=await c.e(7774).then(c.t.bind(c,47774,19)),h=b?{rejectUnauthorized:!1}:void 0,j=d?new f({uri:d,...r,...b?{requestTls:h}:{}}):new a({...r,connect:h});i.set(e,j)}return i.get(e)}async function v(a,b,c){try{let d=c||!b.dispatcher?await u(c):b.dispatcher;return await h(a,{...b,dispatcher:d})}catch(e){let d;if("true"!==process.env.STRICT_SSL&&"1"!==process.env.STRICT_SSL&&(d=e?.cause?.code||e?.code,k.has(d))){if(b.body&&"function"==typeof b.body.getReader&&b.body.locked)throw e;console.warn(`[ProxyFetch] TLS cert verification failed (${e.cause?.code||e.code}), retrying with insecure TLS: ${a}`);let d=await u(c,!0);return await h(a,{...b,dispatcher:d})}throw e}}let w=new(f()).Agent({keepAlive:!0});async function x(a,b,c){return new Promise((e,g)=>{let h={agent:w,host:b,port:443,servername:a.hostname,path:a.pathname+a.search,method:c.method||"POST",headers:{...c.headers,Host:a.hostname}},i=()=>j.destroy(new DOMException("Aborted","AbortError"));if(c.signal?.aborted)return g(new DOMException("Aborted","AbortError"));let j=f().request(h,a=>{let b={ok:a.statusCode>=200&&a.statusCode<300,status:a.statusCode,statusText:a.statusMessage,headers:new Map(Object.entries(a.headers)),body:d.Readable.toWeb(a),text:async()=>{let b=[];for await(let c of a)b.push(c);return Buffer.concat(b).toString()},json:async()=>JSON.parse(await b.text())};a.once("close",()=>{c.signal&&c.signal.removeEventListener("abort",i)}),e(b)});c.signal&&c.signal.addEventListener("abort",i,{once:!0}),j.on("error",a=>{c.signal&&c.signal.removeEventListener("abort",i),g(a)}),c.body&&j.write("string"==typeof c.body?c.body:JSON.stringify(c.body)),j.end()})}async function y(a,b={},c=null){let d="string"==typeof a?a:a.toString(),e=n(c?.vercelRelayUrl);if(e){let a=new URL(d),c={...b.headers instanceof Headers?Object.fromEntries(b.headers.entries()):{...b.headers||{}},"x-relay-target":`${a.protocol}//${a.host}`,"x-relay-path":`${a.pathname}${a.search}`};return h(e,{...b,headers:c})}let f=function(a,b){if(b?.enabled!==!0&&b?.connectionProxyEnabled!==!0)return null;let c=n(b?.url??b?.connectionProxyUrl);if(!c)return null;let d=n(b?.noProxy??b?.connectionNoProxy);return d&&p(a,d)?null:q(c)}(d,c),g=f?null:q(function(a){let b;if(p(a,process.env.NO_PROXY||process.env.no_proxy))return null;try{b=new URL(a).protocol}catch{return null}return"https:"===b?process.env.HTTPS_PROXY||process.env.https_proxy||process.env.ALL_PROXY||process.env.all_proxy:process.env.HTTP_PROXY||process.env.http_proxy||process.env.ALL_PROXY||process.env.all_proxy}(d)),i=f||g;if(function(a){try{let b=new URL(a).hostname;return l.some(a=>b.includes(a))}catch{return!1}}(d)){if(i)try{return await v(a,b,i)}catch(a){if(c?.strictProxy===!0)throw Error(`[ProxyFetch] Proxy required but failed (strictProxy=true): ${a.message}`);console.warn(`[ProxyFetch] Proxy failed, falling back to direct bypass: ${a.message}`)}try{let a=new URL(d),c=await o(a.hostname);if(c)return await x(a,c,b)}catch(a){if(a?.name==="AbortError"||a?.code==="ABORT_ERR")throw a;console.warn(`[ProxyFetch] MITM bypass failed: ${a.message}`)}}if(i)try{return await v(a,b,i)}catch(d){if(c?.strictProxy===!0)throw Error(`[ProxyFetch] Proxy required but failed (strictProxy=true): ${d.message}`);return console.warn(`[ProxyFetch] Proxy failed, falling back to direct: ${d.message}`),v(a,b,null)}let j=c?.proxyPoolId||c?.enabled===!0||c?.connectionProxyEnabled===!0||!!n(c?.url??c?.connectionProxyUrl);if(c?.strictProxy===!0&&j)throw Error("[ProxyFetch] Proxy required but none resolved (strictProxy=true)");return v(a,b,null)}async function z(a,b={}){return y(a,b,null)}globalThis.fetch!==z&&(globalThis.fetch=z);let A=z},41004:(a,b,c)=>{c.d(b,{C8:()=>v,DR:()=>t,IK:()=>o,Ps:()=>g,SA:()=>r,SW:()=>m,Uc:()=>p,Z1:()=>i,bK:()=>n,cI:()=>s,eo:()=>q,gx:()=>d,o_:()=>k,pD:()=>u,pH:()=>j,v1:()=>e,xM:()=>h,z9:()=>l}),c(3662);let d={BAD_REQUEST:400,UNAUTHORIZED:401,PAYMENT_REQUIRED:402,FORBIDDEN:403,NOT_FOUND:404,NOT_ACCEPTABLE:406,REQUEST_TIMEOUT:408,RATE_LIMITED:429,CLIENT_CLOSED_REQUEST:499,SERVER_ERROR:500,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504},e={sessionTtlMs:72e5,sessionCleanupIntervalMs:18e5,dnsCacheTtlMs:3e5,proxyDispatchersMaxSize:20};function f(a,b){let c=process.env[a];if(null==c||""===c)return b;let d=parseInt(c,10);return Number.isFinite(d)&&d>0?d:b}let g=process.env.SEARXNG_URL?.trim()||"http://localhost:8888/search",h=f("STREAM_STALL_TIMEOUT_MS",36e4),i=f("STREAM_FIRST_CHUNK_TIMEOUT_MS",2e5),j=f("FETCH_CONNECT_TIMEOUT_MS",6e4),k=f("UPSTREAM_KEEPALIVE_TIMEOUT_MS",6e4),l=f("UPSTREAM_KEEPALIVE_MAX_MS",6e5),m={idleMs:f("OPENCODE_CLI_IDLE_TIMEOUT_MS",18e4),totalMs:f("OPENCODE_CLI_TOTAL_TIMEOUT_MS",3e5),versionProbeMs:f("OPENCODE_CLI_PROBE_TIMEOUT_MS",8e3),killGraceMs:f("OPENCODE_CLI_KILL_GRACE_MS",2e3),availabilityTtlMs:f("OPENCODE_CLI_PROBE_TTL_MS",6e5),heartbeatMs:f("OPENCODE_CLI_HEARTBEAT_MS",15e3),peekMs:f("OPENCODE_CLI_PEEK_MS",2500)},n=f("SSE_PEEK_BUFFER_LIMIT",262144),o=f("GEMINI_NATIVE_TTS_FETCH_TIMEOUT_MS",45e3),p=64e3,q=32e3,r="x-9router-token-saver",s={429:{attempts:0,delayMs:0},502:{attempts:3,delayMs:3e3},503:{attempts:3,delayMs:2e3},504:{attempts:2,delayMs:3e3}};function t(a){return null==a?{attempts:0,delayMs:2e3}:"number"==typeof a?{attempts:a,delayMs:2e3}:{attempts:a.attempts||0,delayMs:null!=a.delayMs?a.delayMs:2e3}}function u(a,b){return a>0?Math.round(Math.random()*Math.min(3e4,a*2**Math.max(0,b-1))):0}let v=["Please write a 5-10 word title for the following conversation:"]}};
@@ -4,4 +4,4 @@ data: ${JSON.stringify(c)}
4
4
 
5
5
  `:`data: ${JSON.stringify(c)}
6
6
 
7
- `;a.enqueue(d.encode(e))},l=(a,c)=>!j&&(j=!0,b?.error?.("BEDROCK",`${a}: ${c}`),k("error",this.isClaudeWire?{type:"error",error:{type:a,message:c}}:{error:{type:a,message:c,code:a}}),!1),n=()=>{for(;g.byteLength>=12;){let a,c,d=new DataView(g.buffer,g.byteOffset,g.byteLength);if(d.getUint32(8,!1)!==(0,m.QR)(g.subarray(0,8)))return l("api_error","Bedrock EventStream prelude CRC mismatch");let i=d.getUint32(0,!1),j=d.getUint32(4,!1);if(i<16||i>f.bJ.maxMessageBytes||j>f.bJ.maxHeadersBytes||j>i-16)return l("api_error","Bedrock EventStream frame bounds are invalid");if(g.byteLength<i)break;let n=g.slice(0,i);g=g.slice(i);try{a=(0,m.xc)(n)}catch(a){return l("api_error",a.message)}let o=a.headers[":message-type"];if("exception"===o||"error"===o)return l(a.headers[":exception-type"]||a.headers[":error-code"]||"api_error",a.payload?.message||a.payload?.Message||a.headers[":error-message"]||`Bedrock returned an EventStream ${o}`);if(a.headers[":event-type"]!==f.TV.chunkEventName){b?.warn?.("BEDROCK",`skipped unrecognised EventStream event type ${JSON.stringify(a.headers[":event-type"])}`);continue}let p=a.payload?.bytes;if(!p)return l("api_error","Bedrock chunk frame carried no payload bytes");try{c=JSON.parse(e.decode(Buffer.from(p,"base64")))}catch(a){return l("api_error",`Bedrock chunk was not valid JSON (${a.message})`)}if(this.isClaudeWire){if(!c?.type)return l("api_error","Bedrock chunk decoded to an event with no type");k(c.type,c),c.type===f.TV.terminalEventType&&(h=!0)}else{if(!Array.isArray(c?.choices))return l("api_error","Bedrock chunk decoded without a `choices` array");k(null,c),c.choices.some(a=>a?.finish_reason)&&(h=!0)}}return!0};for(;;){let a;try{a=await c.read()}catch(a){l("api_error",`Bedrock stream read failed: ${a.message}`);break}if(a.done)break;let b=a.value;if(b?.byteLength){if(0===g.byteLength)g=b;else{let a=new Uint8Array(g.byteLength+b.byteLength);a.set(g),a.set(b,g.byteLength),g=a}if(!n())break}}i||(!j&&g.byteLength?l("api_error","Bedrock stream ended mid-frame"):j||h||l("api_error",this.isClaudeWire?`Bedrock stream ended before ${f.TV.terminalEventType}`:"Bedrock stream ended before any choice reported a finish_reason"),this.isClaudeWire||j||a.enqueue(d.encode(u.$U)),a.close()),await c.cancel().catch(a=>b?.debug?.("BEDROCK",`upstream cancel failed: ${a.message}`)),c.releaseLock?.()},cancel:a=>(i=!0,c.cancel(a))})}}async function y(a,b){let c,d;try{c=await l(a)}catch(a){return{valid:!1,error:a.message}}let e=`https://bedrock.${c.region}.amazonaws.com/${f.TV.probePath}`,g=r({method:"GET",url:e,headers:{Accept:"application/json"},region:c.region,service:f.TV.service,credentials:c}),h=new AbortController,i=setTimeout(()=>h.abort(Error("AWS credential probe timed out")),f.TV.probeTimeoutMs);try{d=await b(e,{method:"GET",headers:g,redirect:"error",signal:h.signal})}catch(a){if(h.signal.aborted)return{valid:!1,error:"AWS credential probe timed out"};throw a}finally{clearTimeout(i)}if(d.ok)return{valid:!0,error:null};let j=(d.headers.get(f.TV.errorTypeHeader)||"").split(":")[0];if(j===f.TV.accessDeniedErrorType)return{valid:!0,error:null};let k=(await d.json().catch(()=>null))?.message;return{valid:!1,error:`AWS rejected the credentials (${j||`HTTP ${d.status}`})${k?`: ${k}`:""}`}}},68421:(a,b,c)=>{c.d(b,{EC:()=>f,ID:()=>e,KP:()=>d,Ll:()=>i,TV:()=>l,W9:()=>g,Yi:()=>h,bJ:()=>m,y:()=>k,yx:()=>j});let d={algorithm:"AWS4-HMAC-SHA256",terminator:"aws4_request",keyPrefix:"AWS4",dateHeader:"x-amz-date",securityTokenHeader:"x-amz-security-token"},e={STATIC:"static",PROFILE:"profile"},f=3e5,g=6e4,h=/^[a-z0-9][a-z0-9-]{0,30}$/,i=/^[\w@+.%: -]{1,64}$/,j=1e4,k="@aws-sdk/credential-providers",l={service:"bedrock",defaultRegion:"us-east-1",anthropicVersion:"bedrock-2023-05-31",streamPath:"invoke-with-response-stream",invokePath:"invoke",chunkEventName:"chunk",modelFamilyPatterns:{claude:/(^|[./])anthropic\./,openai:/(^|[./])xai\./},modelFamilyHints:{claude:'an Anthropic model, e.g. "us.anthropic.claude-sonnet-4-5-20250929-v1:0"',openai:'an xAI model, e.g. "us.xai.grok-4.6"'},terminalEventType:"message_stop",probePath:"foundation-models",probeTimeoutMs:8e3,errorTypeHeader:"x-amzn-errortype",accessDeniedErrorType:"AccessDeniedException"},m={maxMessageBytes:0x1800000,maxHeadersBytes:131072}},78959:(a,b,c)=>{c.d(b,{$U:()=>d,RK:()=>g,pb:()=>e,uB:()=>f});let d="data: [DONE]\n\n",e={"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"},f={"Content-Type":"text/event-stream","Cache-Control":"no-cache","X-Accel-Buffering":"no"},g={"Content-Type":"text/event-stream","Cache-Control":"no-cache, no-transform","X-Accel-Buffering":"no",Connection:"keep-alive","Access-Control-Allow-Origin":"*"}}};
7
+ `;a.enqueue(d.encode(e))},l=(a,c)=>!j&&(j=!0,b?.error?.("BEDROCK",`${a}: ${c}`),k("error",this.isClaudeWire?{type:"error",error:{type:a,message:c}}:{error:{type:a,message:c,code:a}}),!1),n=()=>{for(;g.byteLength>=12;){let a,c,d=new DataView(g.buffer,g.byteOffset,g.byteLength);if(d.getUint32(8,!1)!==(0,m.QR)(g.subarray(0,8)))return l("api_error","Bedrock EventStream prelude CRC mismatch");let i=d.getUint32(0,!1),j=d.getUint32(4,!1);if(i<16||i>f.bJ.maxMessageBytes||j>f.bJ.maxHeadersBytes||j>i-16)return l("api_error","Bedrock EventStream frame bounds are invalid");if(g.byteLength<i)break;let n=g.slice(0,i);g=g.slice(i);try{a=(0,m.xc)(n)}catch(a){return l("api_error",a.message)}let o=a.headers[":message-type"];if("exception"===o||"error"===o)return l(a.headers[":exception-type"]||a.headers[":error-code"]||"api_error",a.payload?.message||a.payload?.Message||a.headers[":error-message"]||`Bedrock returned an EventStream ${o}`);if(a.headers[":event-type"]!==f.TV.chunkEventName){b?.warn?.("BEDROCK",`skipped unrecognised EventStream event type ${JSON.stringify(a.headers[":event-type"])}`);continue}let p=a.payload?.bytes;if(!p)return l("api_error","Bedrock chunk frame carried no payload bytes");try{c=JSON.parse(e.decode(Buffer.from(p,"base64")))}catch(a){return l("api_error",`Bedrock chunk was not valid JSON (${a.message})`)}if(this.isClaudeWire){if(!c?.type)return l("api_error","Bedrock chunk decoded to an event with no type");k(c.type,c),c.type===f.TV.terminalEventType&&(h=!0)}else{if(!Array.isArray(c?.choices))return l("api_error","Bedrock chunk decoded without a `choices` array");k(null,c),c.choices.some(a=>a?.finish_reason)&&(h=!0)}}return!0};for(;;){let a;try{a=await c.read()}catch(a){l("api_error",`Bedrock stream read failed: ${a.message}`);break}if(a.done)break;let b=a.value;if(b?.byteLength){if(0===g.byteLength)g=b;else{let a=new Uint8Array(g.byteLength+b.byteLength);a.set(g),a.set(b,g.byteLength),g=a}if(!n())break}}i||(!j&&g.byteLength?l("api_error","Bedrock stream ended mid-frame"):j||h||l("api_error",this.isClaudeWire?`Bedrock stream ended before ${f.TV.terminalEventType}`:"Bedrock stream ended before any choice reported a finish_reason"),this.isClaudeWire||j||a.enqueue(d.encode(u.$U)),a.close()),await c.cancel().catch(a=>b?.debug?.("BEDROCK",`upstream cancel failed: ${a.message}`)),c.releaseLock?.()},cancel:a=>(i=!0,c.cancel(a))})}}async function y(a,b){let c,d;try{c=await l(a)}catch(a){return{valid:!1,error:a.message}}let e=`https://bedrock.${c.region}.amazonaws.com/${f.TV.probePath}`,g=r({method:"GET",url:e,headers:{Accept:"application/json"},region:c.region,service:f.TV.service,credentials:c}),h=new AbortController,i=setTimeout(()=>h.abort(Error("AWS credential probe timed out")),f.TV.probeTimeoutMs);try{d=await b(e,{method:"GET",headers:g,redirect:"error",signal:h.signal})}catch(a){if(h.signal.aborted)return{valid:!1,error:"AWS credential probe timed out"};throw a}finally{clearTimeout(i)}if(d.ok)return{valid:!0,error:null};let j=(d.headers.get(f.TV.errorTypeHeader)||"").split(":")[0];if(j===f.TV.accessDeniedErrorType)return{valid:!0,error:null};let k=(await d.json().catch(()=>null))?.message;return{valid:!1,error:`AWS rejected the credentials (${j||`HTTP ${d.status}`})${k?`: ${k}`:""}`}}},68421:(a,b,c)=>{c.d(b,{EC:()=>f,ID:()=>e,KP:()=>d,Ll:()=>i,TV:()=>l,W9:()=>g,Yi:()=>h,bJ:()=>m,y:()=>k,yx:()=>j});let d={algorithm:"AWS4-HMAC-SHA256",terminator:"aws4_request",keyPrefix:"AWS4",dateHeader:"x-amz-date",securityTokenHeader:"x-amz-security-token"},e={STATIC:"static",PROFILE:"profile"},f=3e5,g=6e4,h=/^[a-z0-9][a-z0-9-]{0,30}$/,i=/^[\w@+.%: -]{1,64}$/,j=1e4,k="@aws-sdk/credential-providers",l={service:"bedrock",defaultRegion:"us-east-1",anthropicVersion:"bedrock-2023-05-31",streamPath:"invoke-with-response-stream",invokePath:"invoke",chunkEventName:"chunk",modelFamilyPatterns:{claude:/(^|[./])anthropic\./,openai:/(^|[./])xai\./},modelFamilyHints:{claude:'an Anthropic model, e.g. "us.anthropic.claude-sonnet-4-5-20250929-v1:0"',openai:'an xAI model, e.g. "us.xai.grok-4.6"'},terminalEventType:"message_stop",probePath:"foundation-models",probeTimeoutMs:8e3,errorTypeHeader:"x-amzn-errortype",accessDeniedErrorType:"AccessDeniedException"},m={maxMessageBytes:0x1800000,maxHeadersBytes:131072}}};
@@ -1 +1 @@
1
- {"version":1,"files":["../package.json","chunks/1051.js","chunks/1220.js","chunks/1260.js","chunks/1306.js","chunks/1350.js","chunks/1455.js","chunks/1679.js","chunks/1757.js","chunks/1813.js","chunks/1998.js","chunks/2132.js","chunks/2214.js","chunks/2220.js","chunks/2329.js","chunks/2375.js","chunks/2391.js","chunks/24.js","chunks/2409.js","chunks/241.js","chunks/2430.js","chunks/2750.js","chunks/2760.js","chunks/2970.js","chunks/3016.js","chunks/3210.js","chunks/3225.js","chunks/3449.js","chunks/3459.js","chunks/3535.js","chunks/3546.js","chunks/3593.js","chunks/3711.js","chunks/3726.js","chunks/3943.js","chunks/3966.js","chunks/4049.js","chunks/4055.js","chunks/412.js","chunks/4123.js","chunks/4125.js","chunks/4152.js","chunks/4190.js","chunks/4199.js","chunks/4293.js","chunks/436.js","chunks/4730.js","chunks/4739.js","chunks/4780.js","chunks/4798.js","chunks/4882.js","chunks/4957.js","chunks/5026.js","chunks/507.js","chunks/5081.js","chunks/5182.js","chunks/5217.js","chunks/5258.js","chunks/5299.js","chunks/5330.js","chunks/5433.js","chunks/5573.js","chunks/5615.js","chunks/562.js","chunks/5827.js","chunks/595.js","chunks/6070.js","chunks/614.js","chunks/6140.js","chunks/615.js","chunks/6249.js","chunks/6457.js","chunks/6555.js","chunks/6708.js","chunks/6763.js","chunks/6777.js","chunks/6844.js","chunks/6877.js","chunks/6921.js","chunks/6922.js","chunks/698.js","chunks/7066.js","chunks/7121.js","chunks/7211.js","chunks/7247.js","chunks/7525.js","chunks/7552.js","chunks/7557.js","chunks/7716.js","chunks/7774.js","chunks/7828.js","chunks/7843.js","chunks/7911.js","chunks/7913.js","chunks/7965.js","chunks/7995.js","chunks/8251.js","chunks/8292.js","chunks/8363.js","chunks/8402.js","chunks/8416.js","chunks/8499.js","chunks/8520.js","chunks/8635.js","chunks/869.js","chunks/8895.js","chunks/8910.js","chunks/8920.js","chunks/9055.js","chunks/9100.js","chunks/915.js","chunks/936.js","chunks/9604.js","chunks/9609.js","chunks/9696.js","webpack-runtime.js"]}
1
+ {"version":1,"files":["../package.json","chunks/1051.js","chunks/1220.js","chunks/1260.js","chunks/1306.js","chunks/1350.js","chunks/1455.js","chunks/1679.js","chunks/1757.js","chunks/1813.js","chunks/1836.js","chunks/1998.js","chunks/2132.js","chunks/2214.js","chunks/2220.js","chunks/2329.js","chunks/2375.js","chunks/2391.js","chunks/24.js","chunks/2409.js","chunks/241.js","chunks/2430.js","chunks/2750.js","chunks/2760.js","chunks/2970.js","chunks/3016.js","chunks/3210.js","chunks/3225.js","chunks/3449.js","chunks/3459.js","chunks/3535.js","chunks/3546.js","chunks/3593.js","chunks/3711.js","chunks/3726.js","chunks/3811.js","chunks/3943.js","chunks/3966.js","chunks/4049.js","chunks/4055.js","chunks/412.js","chunks/4123.js","chunks/4125.js","chunks/4152.js","chunks/4190.js","chunks/4199.js","chunks/4293.js","chunks/436.js","chunks/4730.js","chunks/4739.js","chunks/4780.js","chunks/4798.js","chunks/4882.js","chunks/5026.js","chunks/507.js","chunks/5081.js","chunks/5182.js","chunks/5217.js","chunks/5258.js","chunks/5299.js","chunks/5330.js","chunks/5433.js","chunks/5573.js","chunks/5615.js","chunks/562.js","chunks/5827.js","chunks/595.js","chunks/6070.js","chunks/614.js","chunks/6140.js","chunks/615.js","chunks/6171.js","chunks/6457.js","chunks/6555.js","chunks/6708.js","chunks/6763.js","chunks/6777.js","chunks/6844.js","chunks/6877.js","chunks/6921.js","chunks/6922.js","chunks/698.js","chunks/7066.js","chunks/7121.js","chunks/7211.js","chunks/7247.js","chunks/7525.js","chunks/7557.js","chunks/7716.js","chunks/7774.js","chunks/7828.js","chunks/7843.js","chunks/7911.js","chunks/7913.js","chunks/7965.js","chunks/7995.js","chunks/8251.js","chunks/8292.js","chunks/8363.js","chunks/8402.js","chunks/8416.js","chunks/8499.js","chunks/8520.js","chunks/8635.js","chunks/869.js","chunks/8895.js","chunks/8910.js","chunks/8920.js","chunks/9055.js","chunks/9100.js","chunks/915.js","chunks/936.js","chunks/9604.js","chunks/9609.js","chunks/9696.js","webpack-runtime.js"]}
@@ -1 +1 @@
1
- globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/Lcce6agtXL-TudJa8EdML/_buildManifest.js","static/Lcce6agtXL-TudJa8EdML/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-f32df626b66ad66c.js","static/chunks/4bd1b696-8cd12253b448cc13.js","static/chunks/3794-04350b0fcecd82e5.js","static/chunks/main-app-6b83f9262ea4869d.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
1
+ globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/1OwkUVIMD7I3wwdhcBzuQ/_buildManifest.js","static/1OwkUVIMD7I3wwdhcBzuQ/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-f32df626b66ad66c.js","static/chunks/4bd1b696-8cd12253b448cc13.js","static/chunks/3794-04350b0fcecd82e5.js","static/chunks/main-app-6b83f9262ea4869d.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
@@ -1 +1 @@
1
- {"version":1,"files":["../../node_modules/@swc/helpers/_/_interop_require_default/package.json","../../node_modules/@swc/helpers/cjs/_interop_require_default.cjs","../../node_modules/@swc/helpers/esm/_interop_require_default.js","../../node_modules/@swc/helpers/package.json","../../node_modules/better-sqlite3/build/Release/better_sqlite3.node","../../node_modules/better-sqlite3/lib/database.js","../../node_modules/better-sqlite3/lib/index.js","../../node_modules/better-sqlite3/lib/methods/aggregate.js","../../node_modules/better-sqlite3/lib/methods/backup.js","../../node_modules/better-sqlite3/lib/methods/function.js","../../node_modules/better-sqlite3/lib/methods/inspect.js","../../node_modules/better-sqlite3/lib/methods/pragma.js","../../node_modules/better-sqlite3/lib/methods/serialize.js","../../node_modules/better-sqlite3/lib/methods/table.js","../../node_modules/better-sqlite3/lib/methods/transaction.js","../../node_modules/better-sqlite3/lib/methods/wrappers.js","../../node_modules/better-sqlite3/lib/sqlite-error.js","../../node_modules/better-sqlite3/lib/util.js","../../node_modules/better-sqlite3/package.json","../../node_modules/bindings/bindings.js","../../node_modules/bindings/package.json","../../node_modules/file-uri-to-path/index.js","../../node_modules/file-uri-to-path/package.json","../../node_modules/next/dist/build/adapter/setup-node-env.external.js","../../node_modules/next/dist/client/components/hooks-server-context.js","../../node_modules/next/dist/client/components/static-generation-bailout.js","../../node_modules/next/dist/client/lib/console.js","../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../node_modules/next/dist/compiled/hash.js/sha256/256.js","../../node_modules/next/dist/compiled/hash.js/sha256/package.json","../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../node_modules/next/dist/compiled/source-map/package.json","../../node_modules/next/dist/compiled/source-map/source-map.js","../../node_modules/next/dist/compiled/stacktrace-parser/package.json","../../node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js","../../node_modules/next/dist/compiled/ws/index.js","../../node_modules/next/dist/compiled/ws/package.json","../../node_modules/next/dist/lib/client-and-server-references.js","../../node_modules/next/dist/lib/constants.js","../../node_modules/next/dist/lib/framework/boundary-constants.js","../../node_modules/next/dist/lib/interop-default.js","../../node_modules/next/dist/lib/is-error.js","../../node_modules/next/dist/lib/picocolors.js","../../node_modules/next/dist/lib/scheduler.js","../../node_modules/next/dist/lib/semver-noop.js","../../node_modules/next/dist/server/app-render/action-async-storage-instance.js","../../node_modules/next/dist/server/app-render/action-async-storage.external.js","../../node_modules/next/dist/server/app-render/after-task-async-storage-instance.js","../../node_modules/next/dist/server/app-render/after-task-async-storage.external.js","../../node_modules/next/dist/server/app-render/async-local-storage.js","../../node_modules/next/dist/server/app-render/blocking-route-messages.js","../../node_modules/next/dist/server/app-render/cache-signal.js","../../node_modules/next/dist/server/app-render/console-async-storage-instance.js","../../node_modules/next/dist/server/app-render/console-async-storage.external.js","../../node_modules/next/dist/server/app-render/dynamic-rendering.js","../../node_modules/next/dist/server/app-render/instant-validation/boundary-constants.js","../../node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.js","../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.external.js","../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.instance.js","../../node_modules/next/dist/server/app-render/segment-config/ensure-static.js","../../node_modules/next/dist/server/app-render/staged-rendering.js","../../node_modules/next/dist/server/app-render/sync-io-messages.js","../../node_modules/next/dist/server/app-render/work-async-storage-instance.js","../../node_modules/next/dist/server/app-render/work-async-storage.external.js","../../node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js","../../node_modules/next/dist/server/app-render/work-unit-async-storage.external.js","../../node_modules/next/dist/server/dev/browser-logs/file-logger.js","../../node_modules/next/dist/server/dynamic-rendering-utils.js","../../node_modules/next/dist/server/lib/app-dir-module.js","../../node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js","../../node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js","../../node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js","../../node_modules/next/dist/server/lib/lru-cache.js","../../node_modules/next/dist/server/lib/parse-stack.js","../../node_modules/next/dist/server/lib/route-cache-key.js","../../node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js","../../node_modules/next/dist/server/lib/router-utils/instrumentation-node-extensions.js","../../node_modules/next/dist/server/lib/source-maps.js","../../node_modules/next/dist/server/lib/trace/constants.js","../../node_modules/next/dist/server/lib/trace/tracer.js","../../node_modules/next/dist/server/load-manifest.external.js","../../node_modules/next/dist/server/node-environment-baseline.js","../../node_modules/next/dist/server/node-environment-extensions/console-dim.external.js","../../node_modules/next/dist/server/node-environment-extensions/console-exit.js","../../node_modules/next/dist/server/node-environment-extensions/console-file.js","../../node_modules/next/dist/server/node-environment-extensions/date.js","../../node_modules/next/dist/server/node-environment-extensions/error-inspect.js","../../node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.js","../../node_modules/next/dist/server/node-environment-extensions/io-utils.js","../../node_modules/next/dist/server/node-environment-extensions/node-crypto.js","../../node_modules/next/dist/server/node-environment-extensions/random.js","../../node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.js","../../node_modules/next/dist/server/node-environment-extensions/web-crypto.js","../../node_modules/next/dist/server/node-environment.js","../../node_modules/next/dist/server/node-polyfill-crypto.js","../../node_modules/next/dist/server/normalizers/built/app/app-pathname-normalizer.js","../../node_modules/next/dist/server/normalizers/normalizers.js","../../node_modules/next/dist/server/normalizers/underscore-normalizer.js","../../node_modules/next/dist/server/normalizers/wrap-normalizer-fn.js","../../node_modules/next/dist/server/patch-error-inspect.js","../../node_modules/next/dist/server/require-hook.js","../../node_modules/next/dist/server/response-cache/types.js","../../node_modules/next/dist/server/route-kind.js","../../node_modules/next/dist/server/runtime-reacts.external.js","../../node_modules/next/dist/shared/lib/deep-freeze.js","../../node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js","../../node_modules/next/dist/shared/lib/instant-messages.js","../../node_modules/next/dist/shared/lib/invariant-error.js","../../node_modules/next/dist/shared/lib/is-plain-object.js","../../node_modules/next/dist/shared/lib/is-thenable.js","../../node_modules/next/dist/shared/lib/lazy-dynamic/react-browser-bailout.js","../../node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js","../../node_modules/next/dist/shared/lib/page-path/normalize-page-path.js","../../node_modules/next/dist/shared/lib/promise-with-resolvers.js","../../node_modules/next/dist/shared/lib/router/utils/app-paths.js","../../node_modules/next/dist/shared/lib/router/utils/index.js","../../node_modules/next/dist/shared/lib/router/utils/interception-routes.js","../../node_modules/next/dist/shared/lib/router/utils/is-dynamic.js","../../node_modules/next/dist/shared/lib/router/utils/parse-loader-tree.js","../../node_modules/next/dist/shared/lib/router/utils/sorted-routes.js","../../node_modules/next/dist/shared/lib/segment.js","../../node_modules/next/dist/shared/lib/server-reference-info.js","../../node_modules/next/dist/shared/lib/utils.js","../../node_modules/next/package.json","../../node_modules/react/cjs/react.development.js","../../node_modules/react/cjs/react.production.js","../../node_modules/react/index.js","../../node_modules/react/package.json","../../node_modules/sql.js/dist/sql-wasm.js","../../node_modules/sql.js/package.json","../../package.json","../package.json","chunks/1051.js","chunks/1220.js","chunks/1260.js","chunks/1306.js","chunks/1350.js","chunks/1455.js","chunks/1679.js","chunks/1757.js","chunks/1813.js","chunks/1998.js","chunks/2132.js","chunks/2214.js","chunks/2220.js","chunks/2329.js","chunks/2375.js","chunks/2391.js","chunks/24.js","chunks/2409.js","chunks/241.js","chunks/2430.js","chunks/2750.js","chunks/2760.js","chunks/2970.js","chunks/3016.js","chunks/3210.js","chunks/3225.js","chunks/3449.js","chunks/3459.js","chunks/3535.js","chunks/3546.js","chunks/3593.js","chunks/3711.js","chunks/3726.js","chunks/3943.js","chunks/3966.js","chunks/4049.js","chunks/4055.js","chunks/412.js","chunks/4123.js","chunks/4125.js","chunks/4152.js","chunks/4190.js","chunks/4199.js","chunks/4293.js","chunks/436.js","chunks/4730.js","chunks/4739.js","chunks/4780.js","chunks/4798.js","chunks/4882.js","chunks/4957.js","chunks/5026.js","chunks/507.js","chunks/5081.js","chunks/5182.js","chunks/5217.js","chunks/5258.js","chunks/5299.js","chunks/5330.js","chunks/5433.js","chunks/5573.js","chunks/5615.js","chunks/562.js","chunks/5827.js","chunks/595.js","chunks/6070.js","chunks/614.js","chunks/6140.js","chunks/615.js","chunks/6249.js","chunks/6457.js","chunks/6555.js","chunks/6708.js","chunks/6763.js","chunks/6777.js","chunks/6844.js","chunks/6877.js","chunks/6921.js","chunks/6922.js","chunks/698.js","chunks/7066.js","chunks/7121.js","chunks/7211.js","chunks/7247.js","chunks/7525.js","chunks/7552.js","chunks/7557.js","chunks/7716.js","chunks/7774.js","chunks/7828.js","chunks/7843.js","chunks/7911.js","chunks/7913.js","chunks/7965.js","chunks/7995.js","chunks/8251.js","chunks/8292.js","chunks/8363.js","chunks/8402.js","chunks/8416.js","chunks/8499.js","chunks/8520.js","chunks/8635.js","chunks/869.js","chunks/8895.js","chunks/8910.js","chunks/8920.js","chunks/9055.js","chunks/9100.js","chunks/915.js","chunks/936.js","chunks/9604.js","chunks/9609.js","chunks/9696.js","webpack-runtime.js"]}
1
+ {"version":1,"files":["../../node_modules/@swc/helpers/_/_interop_require_default/package.json","../../node_modules/@swc/helpers/cjs/_interop_require_default.cjs","../../node_modules/@swc/helpers/esm/_interop_require_default.js","../../node_modules/@swc/helpers/package.json","../../node_modules/better-sqlite3/build/Release/better_sqlite3.node","../../node_modules/better-sqlite3/lib/database.js","../../node_modules/better-sqlite3/lib/index.js","../../node_modules/better-sqlite3/lib/methods/aggregate.js","../../node_modules/better-sqlite3/lib/methods/backup.js","../../node_modules/better-sqlite3/lib/methods/function.js","../../node_modules/better-sqlite3/lib/methods/inspect.js","../../node_modules/better-sqlite3/lib/methods/pragma.js","../../node_modules/better-sqlite3/lib/methods/serialize.js","../../node_modules/better-sqlite3/lib/methods/table.js","../../node_modules/better-sqlite3/lib/methods/transaction.js","../../node_modules/better-sqlite3/lib/methods/wrappers.js","../../node_modules/better-sqlite3/lib/sqlite-error.js","../../node_modules/better-sqlite3/lib/util.js","../../node_modules/better-sqlite3/package.json","../../node_modules/bindings/bindings.js","../../node_modules/bindings/package.json","../../node_modules/file-uri-to-path/index.js","../../node_modules/file-uri-to-path/package.json","../../node_modules/next/dist/build/adapter/setup-node-env.external.js","../../node_modules/next/dist/client/components/hooks-server-context.js","../../node_modules/next/dist/client/components/static-generation-bailout.js","../../node_modules/next/dist/client/lib/console.js","../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../node_modules/next/dist/compiled/hash.js/sha256/256.js","../../node_modules/next/dist/compiled/hash.js/sha256/package.json","../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../node_modules/next/dist/compiled/source-map/package.json","../../node_modules/next/dist/compiled/source-map/source-map.js","../../node_modules/next/dist/compiled/stacktrace-parser/package.json","../../node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js","../../node_modules/next/dist/compiled/ws/index.js","../../node_modules/next/dist/compiled/ws/package.json","../../node_modules/next/dist/lib/client-and-server-references.js","../../node_modules/next/dist/lib/constants.js","../../node_modules/next/dist/lib/framework/boundary-constants.js","../../node_modules/next/dist/lib/interop-default.js","../../node_modules/next/dist/lib/is-error.js","../../node_modules/next/dist/lib/picocolors.js","../../node_modules/next/dist/lib/scheduler.js","../../node_modules/next/dist/lib/semver-noop.js","../../node_modules/next/dist/server/app-render/action-async-storage-instance.js","../../node_modules/next/dist/server/app-render/action-async-storage.external.js","../../node_modules/next/dist/server/app-render/after-task-async-storage-instance.js","../../node_modules/next/dist/server/app-render/after-task-async-storage.external.js","../../node_modules/next/dist/server/app-render/async-local-storage.js","../../node_modules/next/dist/server/app-render/blocking-route-messages.js","../../node_modules/next/dist/server/app-render/cache-signal.js","../../node_modules/next/dist/server/app-render/console-async-storage-instance.js","../../node_modules/next/dist/server/app-render/console-async-storage.external.js","../../node_modules/next/dist/server/app-render/dynamic-rendering.js","../../node_modules/next/dist/server/app-render/instant-validation/boundary-constants.js","../../node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.js","../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.external.js","../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.instance.js","../../node_modules/next/dist/server/app-render/segment-config/ensure-static.js","../../node_modules/next/dist/server/app-render/staged-rendering.js","../../node_modules/next/dist/server/app-render/sync-io-messages.js","../../node_modules/next/dist/server/app-render/work-async-storage-instance.js","../../node_modules/next/dist/server/app-render/work-async-storage.external.js","../../node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js","../../node_modules/next/dist/server/app-render/work-unit-async-storage.external.js","../../node_modules/next/dist/server/dev/browser-logs/file-logger.js","../../node_modules/next/dist/server/dynamic-rendering-utils.js","../../node_modules/next/dist/server/lib/app-dir-module.js","../../node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js","../../node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js","../../node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js","../../node_modules/next/dist/server/lib/lru-cache.js","../../node_modules/next/dist/server/lib/parse-stack.js","../../node_modules/next/dist/server/lib/route-cache-key.js","../../node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js","../../node_modules/next/dist/server/lib/router-utils/instrumentation-node-extensions.js","../../node_modules/next/dist/server/lib/source-maps.js","../../node_modules/next/dist/server/lib/trace/constants.js","../../node_modules/next/dist/server/lib/trace/tracer.js","../../node_modules/next/dist/server/load-manifest.external.js","../../node_modules/next/dist/server/node-environment-baseline.js","../../node_modules/next/dist/server/node-environment-extensions/console-dim.external.js","../../node_modules/next/dist/server/node-environment-extensions/console-exit.js","../../node_modules/next/dist/server/node-environment-extensions/console-file.js","../../node_modules/next/dist/server/node-environment-extensions/date.js","../../node_modules/next/dist/server/node-environment-extensions/error-inspect.js","../../node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.js","../../node_modules/next/dist/server/node-environment-extensions/io-utils.js","../../node_modules/next/dist/server/node-environment-extensions/node-crypto.js","../../node_modules/next/dist/server/node-environment-extensions/random.js","../../node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.js","../../node_modules/next/dist/server/node-environment-extensions/web-crypto.js","../../node_modules/next/dist/server/node-environment.js","../../node_modules/next/dist/server/node-polyfill-crypto.js","../../node_modules/next/dist/server/normalizers/built/app/app-pathname-normalizer.js","../../node_modules/next/dist/server/normalizers/normalizers.js","../../node_modules/next/dist/server/normalizers/underscore-normalizer.js","../../node_modules/next/dist/server/normalizers/wrap-normalizer-fn.js","../../node_modules/next/dist/server/patch-error-inspect.js","../../node_modules/next/dist/server/require-hook.js","../../node_modules/next/dist/server/response-cache/types.js","../../node_modules/next/dist/server/route-kind.js","../../node_modules/next/dist/server/runtime-reacts.external.js","../../node_modules/next/dist/shared/lib/deep-freeze.js","../../node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js","../../node_modules/next/dist/shared/lib/instant-messages.js","../../node_modules/next/dist/shared/lib/invariant-error.js","../../node_modules/next/dist/shared/lib/is-plain-object.js","../../node_modules/next/dist/shared/lib/is-thenable.js","../../node_modules/next/dist/shared/lib/lazy-dynamic/react-browser-bailout.js","../../node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js","../../node_modules/next/dist/shared/lib/page-path/normalize-page-path.js","../../node_modules/next/dist/shared/lib/promise-with-resolvers.js","../../node_modules/next/dist/shared/lib/router/utils/app-paths.js","../../node_modules/next/dist/shared/lib/router/utils/index.js","../../node_modules/next/dist/shared/lib/router/utils/interception-routes.js","../../node_modules/next/dist/shared/lib/router/utils/is-dynamic.js","../../node_modules/next/dist/shared/lib/router/utils/parse-loader-tree.js","../../node_modules/next/dist/shared/lib/router/utils/sorted-routes.js","../../node_modules/next/dist/shared/lib/segment.js","../../node_modules/next/dist/shared/lib/server-reference-info.js","../../node_modules/next/dist/shared/lib/utils.js","../../node_modules/next/package.json","../../node_modules/react/cjs/react.development.js","../../node_modules/react/cjs/react.production.js","../../node_modules/react/index.js","../../node_modules/react/package.json","../../node_modules/sql.js/dist/sql-wasm.js","../../node_modules/sql.js/package.json","../../package.json","../package.json","chunks/1051.js","chunks/1220.js","chunks/1260.js","chunks/1306.js","chunks/1350.js","chunks/1455.js","chunks/1679.js","chunks/1757.js","chunks/1813.js","chunks/1836.js","chunks/1998.js","chunks/2132.js","chunks/2214.js","chunks/2220.js","chunks/2329.js","chunks/2375.js","chunks/2391.js","chunks/24.js","chunks/2409.js","chunks/241.js","chunks/2430.js","chunks/2750.js","chunks/2760.js","chunks/2970.js","chunks/3016.js","chunks/3210.js","chunks/3225.js","chunks/3449.js","chunks/3459.js","chunks/3535.js","chunks/3546.js","chunks/3593.js","chunks/3711.js","chunks/3726.js","chunks/3811.js","chunks/3943.js","chunks/3966.js","chunks/4049.js","chunks/4055.js","chunks/412.js","chunks/4123.js","chunks/4125.js","chunks/4152.js","chunks/4190.js","chunks/4199.js","chunks/4293.js","chunks/436.js","chunks/4730.js","chunks/4739.js","chunks/4780.js","chunks/4798.js","chunks/4882.js","chunks/5026.js","chunks/507.js","chunks/5081.js","chunks/5182.js","chunks/5217.js","chunks/5258.js","chunks/5299.js","chunks/5330.js","chunks/5433.js","chunks/5573.js","chunks/5615.js","chunks/562.js","chunks/5827.js","chunks/595.js","chunks/6070.js","chunks/614.js","chunks/6140.js","chunks/615.js","chunks/6171.js","chunks/6457.js","chunks/6555.js","chunks/6708.js","chunks/6763.js","chunks/6777.js","chunks/6844.js","chunks/6877.js","chunks/6921.js","chunks/6922.js","chunks/698.js","chunks/7066.js","chunks/7121.js","chunks/7211.js","chunks/7247.js","chunks/7525.js","chunks/7557.js","chunks/7716.js","chunks/7774.js","chunks/7828.js","chunks/7843.js","chunks/7911.js","chunks/7913.js","chunks/7965.js","chunks/7995.js","chunks/8251.js","chunks/8292.js","chunks/8363.js","chunks/8402.js","chunks/8416.js","chunks/8499.js","chunks/8520.js","chunks/8635.js","chunks/869.js","chunks/8895.js","chunks/8910.js","chunks/8920.js","chunks/9055.js","chunks/9100.js","chunks/915.js","chunks/936.js","chunks/9604.js","chunks/9609.js","chunks/9696.js","webpack-runtime.js"]}
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/2e1a9a933f2e668f.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/9744bf52995548d4.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-f32df626b66ad66c.js"/><script src="/_next/static/chunks/4bd1b696-8cd12253b448cc13.js" async=""></script><script src="/_next/static/chunks/3794-04350b0fcecd82e5.js" async=""></script><script src="/_next/static/chunks/main-app-6b83f9262ea4869d.js" async=""></script><script src="/_next/static/chunks/763-dc08dca9e6f220af.js" async=""></script><script src="/_next/static/chunks/1321-fdac938522ce514f.js" async=""></script><script src="/_next/static/chunks/705-116ff303348e2154.js" async=""></script><script src="/_next/static/chunks/5497-35a0641d4dcc62d5.js" async=""></script><script src="/_next/static/chunks/app/(dashboard)/layout-95805ef9f057450e.js" async=""></script><script src="/_next/static/chunks/8982-d321f5a7b4ecd757.js" async=""></script><script src="/_next/static/chunks/app/layout-00c8624593ca90e2.js" async=""></script><link rel="preload" href="https://www.googletagmanager.com/gtag/js?id=G-LC959F603F" as="script"/><meta name="robots" content="noindex"/><meta name="theme-color" content="#0a0a0a"/><title>9Router - AI Infrastructure Management</title><meta name="description" content="One endpoint for all your AI providers. Manage keys, monitor usage, and scale effortlessly."/><link rel="manifest" href="/manifest.webmanifest"/><link rel="icon" href="/favicon.ico?603d046c9a6fdfbb" type="image/x-icon" sizes="16x16"/><link rel="icon" href="/favicon.svg"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><script>(function(){try{var s=localStorage.getItem('theme');var t=s?(JSON.parse(s).state||{}).theme:'system';t=t||'system';var m=window.matchMedia('(prefers-color-scheme: dark)').matches;if(t==='dark'||(t==='system'&&m)){document.documentElement.classList.add('dark')}}catch(e){}})();</script><script>var d=document,r=d.documentElement,f=function(){r.classList.add('fonts-loaded')};if(d.fonts&&d.fonts.load){d.fonts.load('24px "Material Symbols Outlined"').then(f).catch(f);setTimeout(f,3000)}else{f()}</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_d8ebd1 font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-f32df626b66ad66c.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:\"static/chunks/763-dc08dca9e6f220af.js\"\n3:\"static/chunks/1321-fdac938522ce514f.js\"\n4:\"static/chunks/705-116ff303348e2154.js\"\n5:\"static/chunks/5497-35a0641d4dcc62d5.js\"\n6:\"static/chunks/app/(dashboard)/layout-95805ef9f057450e.js\"\n7:I[21110,[\"763\",\"$2\",\"1321\",\"$3\",\"705\",\"$4\",\"5497\",\"$5\",\"9305\",\"$6\"],\"ThemeProvider\"]\n8:\"static/chunks/8982-d321f5a7b4ecd757.js\"\n9:\"static/chunks/app/layout-00c8624593ca90e2.js\"\na:\"RuntimeI18nProvider\"\nb:I[94635,[\"8982\",\"$8\",\"1321\",\"$3\",\"7177\",\"$9\"],\"$a\"]\nc:I[57121,[],\"\"]\nd:I[74581,[],\"\"]\ne:I[30565,[\"8982\",\"$8\",\"1321\",\"$3\",\"7177\",\"$9\"],\"GoogleAnalytics\"]\n12:I[90484,[],\"OutletBoundary\"]\n13:\"$Sreact.suspense\"\n15:\"ViewportBoundary\"\n16:I[90484,[],\"$15\"]\n18:\"MetadataBoundary\"\n19:I[90484,[],\"$18\"]\n1b:I[27123,[],\"default\",1]\n:HL[\"/_next/static/media/e4af272ccee01ff0-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/2e1a9a933f2e668f.css\",\"style\"]\n:HL[\"/_next/static/css/9744bf52995548d4.css\",\"style\"]\n10:X\n11:[[\"children\",{\"s\":\"__PAGE__\",\"h\":512,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L12\",null,{\"children\":[\"$\",\"$13\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@14\"}]}]]}],\"p\":false,\"v\":null}}]]\nf:[[\"children\",{\"s\":\"_not-found\",\"h\":512,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Ld\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],\"p\":false,\"v\":\"$10\"},\"c\":\"$Q11\"}]]\n0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"t\":{\"t\":{\"s\":\"\",\"h\":528,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/2e1a9a933f2e668f.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/9744bf52995548d4.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"(function(){try{var s=localStorage.getItem('theme');var t=s?(JSON.parse(s).state||{}).theme:'system';t=t||'system';var m=window.matchMedia('(prefers-color-scheme: dark)').matches;if(t==='dark'||(t==='system'\u0026\u0026m)){document.documentElement.classList.add('dark')}}catch(e){}})();\"}}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"var d=document,r=d.documentElement,f=function(){r.classList.add('fonts-loaded')};if(d.fonts\u0026\u0026d.fonts.load){d.fonts.load('24px \\\"Material Symbols Outlined\\\"').then(f).catch(f);setTimeout(f,3000)}else{f()}\"}}]]}],[\"$\",\"body\",null,{\"className\":\"__variable_d8ebd1 font-sans antialiased\",\"children\":[[\"$\",\"$L7\",null,{\"children\":[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Ld\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}],[\"$\",\"$Le\",null,{\"gaId\":\"G-LC959F603F\"}]]}]]}]]}],\"p\":false,\"v\":null},\"c\":\"$Qf\"},\"h\":{\"r\":[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L16\",null,{\"children\":\"$L17\"}],[\"$\",\"$L19\",null,{\"children\":[[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$13\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L1a\"}]}],null]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],\"p\":false,\"v\":null}},\"m\":\"$undefined\",\"G\":[\"$1b\",[]],\"S\":true,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"Lcce6agtXL-TudJa8EdML\"}\n10:C\n17:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"content\":\"#0a0a0a\"}]]\n1c:I[86869,[],\"IconMark\"]\n14:null\n1a:[[\"$\",\"title\",\"0\",{\"children\":\"9Router - AI Infrastructure Management\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"One endpoint for all your AI providers. Manage keys, monitor usage, and scale effortlessly.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"manifest\",\"href\":\"/manifest.webmanifest\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?603d046c9a6fdfbb\",\"type\":\"image/x-icon\",\"sizes\":\"16x16\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/favicon.svg\"}],[\"$\",\"$L1c\",\"5\",{}]]\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/2e1a9a933f2e668f.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/9744bf52995548d4.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-f32df626b66ad66c.js"/><script src="/_next/static/chunks/4bd1b696-8cd12253b448cc13.js" async=""></script><script src="/_next/static/chunks/3794-04350b0fcecd82e5.js" async=""></script><script src="/_next/static/chunks/main-app-6b83f9262ea4869d.js" async=""></script><script src="/_next/static/chunks/763-dc08dca9e6f220af.js" async=""></script><script src="/_next/static/chunks/1321-c14ab5f20e75ec51.js" async=""></script><script src="/_next/static/chunks/705-116ff303348e2154.js" async=""></script><script src="/_next/static/chunks/5497-76da5aae5c912ea5.js" async=""></script><script src="/_next/static/chunks/app/(dashboard)/layout-95805ef9f057450e.js" async=""></script><script src="/_next/static/chunks/8982-d321f5a7b4ecd757.js" async=""></script><script src="/_next/static/chunks/app/layout-00c8624593ca90e2.js" async=""></script><link rel="preload" href="https://www.googletagmanager.com/gtag/js?id=G-LC959F603F" as="script"/><meta name="robots" content="noindex"/><meta name="theme-color" content="#0a0a0a"/><title>9Router - AI Infrastructure Management</title><meta name="description" content="One endpoint for all your AI providers. Manage keys, monitor usage, and scale effortlessly."/><link rel="manifest" href="/manifest.webmanifest"/><link rel="icon" href="/favicon.ico?603d046c9a6fdfbb" type="image/x-icon" sizes="16x16"/><link rel="icon" href="/favicon.svg"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><script>(function(){try{var s=localStorage.getItem('theme');var t=s?(JSON.parse(s).state||{}).theme:'system';t=t||'system';var m=window.matchMedia('(prefers-color-scheme: dark)').matches;if(t==='dark'||(t==='system'&&m)){document.documentElement.classList.add('dark')}}catch(e){}})();</script><script>var d=document,r=d.documentElement,f=function(){r.classList.add('fonts-loaded')};if(d.fonts&&d.fonts.load){d.fonts.load('24px "Material Symbols Outlined"').then(f).catch(f);setTimeout(f,3000)}else{f()}</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_d8ebd1 font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-f32df626b66ad66c.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:\"static/chunks/763-dc08dca9e6f220af.js\"\n3:\"static/chunks/1321-c14ab5f20e75ec51.js\"\n4:\"static/chunks/705-116ff303348e2154.js\"\n5:\"static/chunks/5497-76da5aae5c912ea5.js\"\n6:\"static/chunks/app/(dashboard)/layout-95805ef9f057450e.js\"\n7:I[21110,[\"763\",\"$2\",\"1321\",\"$3\",\"705\",\"$4\",\"5497\",\"$5\",\"9305\",\"$6\"],\"ThemeProvider\"]\n8:\"static/chunks/8982-d321f5a7b4ecd757.js\"\n9:\"static/chunks/app/layout-00c8624593ca90e2.js\"\na:\"RuntimeI18nProvider\"\nb:I[94635,[\"8982\",\"$8\",\"1321\",\"$3\",\"7177\",\"$9\"],\"$a\"]\nc:I[57121,[],\"\"]\nd:I[74581,[],\"\"]\ne:I[30565,[\"8982\",\"$8\",\"1321\",\"$3\",\"7177\",\"$9\"],\"GoogleAnalytics\"]\n12:I[90484,[],\"OutletBoundary\"]\n13:\"$Sreact.suspense\"\n15:\"ViewportBoundary\"\n16:I[90484,[],\"$15\"]\n18:\"MetadataBoundary\"\n19:I[90484,[],\"$18\"]\n1b:I[27123,[],\"default\",1]\n:HL[\"/_next/static/media/e4af272ccee01ff0-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/2e1a9a933f2e668f.css\",\"style\"]\n:HL[\"/_next/static/css/9744bf52995548d4.css\",\"style\"]\n10:X\n11:[[\"children\",{\"s\":\"__PAGE__\",\"h\":512,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L12\",null,{\"children\":[\"$\",\"$13\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@14\"}]}]]}],\"p\":false,\"v\":null}}]]\nf:[[\"children\",{\"s\":\"_not-found\",\"h\":512,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Ld\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],\"p\":false,\"v\":\"$10\"},\"c\":\"$Q11\"}]]\n0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"t\":{\"t\":{\"s\":\"\",\"h\":528,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/2e1a9a933f2e668f.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/9744bf52995548d4.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"(function(){try{var s=localStorage.getItem('theme');var t=s?(JSON.parse(s).state||{}).theme:'system';t=t||'system';var m=window.matchMedia('(prefers-color-scheme: dark)').matches;if(t==='dark'||(t==='system'\u0026\u0026m)){document.documentElement.classList.add('dark')}}catch(e){}})();\"}}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"var d=document,r=d.documentElement,f=function(){r.classList.add('fonts-loaded')};if(d.fonts\u0026\u0026d.fonts.load){d.fonts.load('24px \\\"Material Symbols Outlined\\\"').then(f).catch(f);setTimeout(f,3000)}else{f()}\"}}]]}],[\"$\",\"body\",null,{\"className\":\"__variable_d8ebd1 font-sans antialiased\",\"children\":[[\"$\",\"$L7\",null,{\"children\":[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Ld\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}],[\"$\",\"$Le\",null,{\"gaId\":\"G-LC959F603F\"}]]}]]}]]}],\"p\":false,\"v\":null},\"c\":\"$Qf\"},\"h\":{\"r\":[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L16\",null,{\"children\":\"$L17\"}],[\"$\",\"$L19\",null,{\"children\":[[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$13\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L1a\"}]}],null]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],\"p\":false,\"v\":null}},\"m\":\"$undefined\",\"G\":[\"$1b\",[]],\"S\":true,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"1OwkUVIMD7I3wwdhcBzuQ\"}\n10:C\n17:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"content\":\"#0a0a0a\"}]]\n1c:I[86869,[],\"IconMark\"]\n14:null\n1a:[[\"$\",\"title\",\"0\",{\"children\":\"9Router - AI Infrastructure Management\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"One endpoint for all your AI providers. Manage keys, monitor usage, and scale effortlessly.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"manifest\",\"href\":\"/manifest.webmanifest\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?603d046c9a6fdfbb\",\"type\":\"image/x-icon\",\"sizes\":\"16x16\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/favicon.svg\"}],[\"$\",\"$L1c\",\"5\",{}]]\n"])</script></body></html>