@jheavenknows/bluerouter 2.0.62 → 2.0.66

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 (619) hide show
  1. package/app/.next-cli-build/BUILD_ID +1 -1
  2. package/app/.next-cli-build/app-path-routes-manifest.json +2 -2
  3. package/app/.next-cli-build/build-manifest.json +2 -2
  4. package/app/.next-cli-build/server/app/(dashboard)/dashboard/analytics/page.js +2 -2
  5. package/app/.next-cli-build/server/app/(dashboard)/dashboard/analytics/page.js.nft.json +1 -1
  6. package/app/.next-cli-build/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page.js +3 -3
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page.js.nft.json +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page_client-reference-manifest.js +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +2 -2
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +3 -3
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -2
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js +2 -2
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js +2 -2
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +3 -3
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +2 -2
  32. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  33. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  34. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +3 -3
  35. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  36. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  37. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js +2 -2
  38. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  39. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  40. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +2 -2
  41. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  42. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  43. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js +2 -2
  44. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  45. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  46. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js +2 -2
  47. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  48. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  49. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page.js +2 -2
  50. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page.js.nft.json +1 -1
  51. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page_client-reference-manifest.js +1 -1
  52. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page.js +2 -2
  53. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page.js.nft.json +1 -1
  54. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page_client-reference-manifest.js +1 -1
  55. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
  56. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  57. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  58. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
  59. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  60. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  61. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +2 -2
  62. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  63. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  64. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js +2 -2
  65. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  66. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  67. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +2 -2
  68. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  69. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  70. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js +2 -2
  71. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
  72. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  73. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js +2 -2
  74. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  75. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  76. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +2 -2
  77. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  78. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  79. package/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  80. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  81. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  82. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  83. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  84. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  85. package/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  86. package/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  87. package/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  88. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  89. package/app/.next-cli-build/server/app/_not-found/page.js +2 -2
  90. package/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  91. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  92. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  93. package/app/.next-cli-build/server/app/_not-found.rsc +3 -3
  94. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
  95. package/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  96. package/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +3 -3
  97. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  98. package/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  99. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  100. package/app/.next-cli-build/server/app/api/auth/ldap/test/route.js +1 -1
  101. package/app/.next-cli-build/server/app/api/auth/ldap/test/route.js.nft.json +1 -1
  102. package/app/.next-cli-build/server/app/api/auth/ldap/users/route.js +1 -1
  103. package/app/.next-cli-build/server/app/api/auth/ldap/users/route.js.nft.json +1 -1
  104. package/app/.next-cli-build/server/app/api/auth/login/route.js +2 -2
  105. package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  106. package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  107. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js +1 -1
  108. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  109. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js +1 -1
  110. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  111. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js +1 -1
  112. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  113. package/app/.next-cli-build/server/app/api/auth/status/route.js +1 -1
  114. package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  115. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  116. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  117. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  118. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/autostart/route.js +1 -1
  119. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/autostart/route.js.nft.json +1 -1
  120. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/prompt-log-db/route.js +1 -162
  121. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/prompt-log-db/route.js.nft.json +1 -1
  122. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/root-ca/route.js.nft.json +1 -1
  123. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
  124. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  125. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  126. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  127. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  128. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  129. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  130. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  131. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  132. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  133. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  134. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  135. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  136. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  137. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  138. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  139. package/app/.next-cli-build/server/app/api/combos/[id]/route.js +1 -1
  140. package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  141. package/app/.next-cli-build/server/app/api/combos/route.js +1 -1
  142. package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  143. package/app/.next-cli-build/server/app/api/dashboard/analytics/route.js +1 -1
  144. package/app/.next-cli-build/server/app/api/dashboard/analytics/route.js.nft.json +1 -1
  145. package/app/.next-cli-build/server/app/api/dashboard/combos/route.js +1 -1
  146. package/app/.next-cli-build/server/app/api/dashboard/combos/route.js.nft.json +1 -1
  147. package/app/.next-cli-build/server/app/api/dashboard/endpoint/route.js +1 -1
  148. package/app/.next-cli-build/server/app/api/dashboard/endpoint/route.js.nft.json +1 -1
  149. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/[id]/route.js +1 -162
  150. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/[id]/route.js.nft.json +1 -1
  151. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/options/route.js +1 -162
  152. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/options/route.js.nft.json +1 -1
  153. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/route.js +1 -162
  154. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/route.js.nft.json +1 -1
  155. package/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  156. package/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  157. package/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js +1 -1
  158. package/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js.nft.json +1 -1
  159. package/app/.next-cli-build/server/app/api/keys/[id]/route.js +1 -1
  160. package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  161. package/app/.next-cli-build/server/app/api/keys/route.js +2 -2
  162. package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  163. package/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  164. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  165. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  166. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
  167. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  168. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  169. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  170. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
  171. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  172. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
  173. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  174. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  175. package/app/.next-cli-build/server/app/api/models/alias/route.js +1 -1
  176. package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  177. package/app/.next-cli-build/server/app/api/models/availability/route.js +1 -1
  178. package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  179. package/app/.next-cli-build/server/app/api/models/custom/route.js +1 -1
  180. package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  181. package/app/.next-cli-build/server/app/api/models/disabled/route.js +1 -1
  182. package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  183. package/app/.next-cli-build/server/app/api/models/route.js +1 -1
  184. package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  185. package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  186. package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  187. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  188. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  189. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
  190. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  191. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  192. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js +1 -1
  193. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  194. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js +1 -1
  195. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  196. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js +1 -1
  197. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  198. package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  199. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js +1 -1
  200. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  201. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  202. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  203. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  204. package/app/.next-cli-build/server/app/api/pricing/route.js +1 -1
  205. package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  206. package/app/.next-cli-build/server/app/api/provider-health/route.js +1 -1
  207. package/app/.next-cli-build/server/app/api/provider-health/route.js.nft.json +1 -1
  208. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js +1 -1
  209. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  210. package/app/.next-cli-build/server/app/api/provider-nodes/route.js +1 -1
  211. package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  212. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  213. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
  214. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  215. package/app/.next-cli-build/server/app/api/providers/[id]/route.js +1 -1
  216. package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  217. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js +1 -1
  218. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  219. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  220. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  221. package/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
  222. package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  223. package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  224. package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  225. package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  226. package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  227. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js +1 -1
  228. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  229. package/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  230. package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  231. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js +1 -1
  232. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  233. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  234. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  235. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js +2 -2
  236. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  237. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js +2 -2
  238. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  239. package/app/.next-cli-build/server/app/api/proxy-pools/route.js +1 -1
  240. package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  241. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
  242. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  243. package/app/.next-cli-build/server/app/api/settings/database/route.js +1 -1
  244. package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  245. package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  246. package/app/.next-cli-build/server/app/api/settings/require-login/route.js +1 -1
  247. package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  248. package/app/.next-cli-build/server/app/api/settings/route.js +1 -1
  249. package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  250. package/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  251. package/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  252. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  253. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  254. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  255. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  256. package/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  257. package/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  258. package/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
  259. package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  260. package/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
  261. package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  262. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js +1 -1
  263. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  264. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js +1 -1
  265. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  266. package/app/.next-cli-build/server/app/api/tunnel/status/route.js +1 -1
  267. package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  268. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  269. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js +1 -1
  270. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  271. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js +1 -1
  272. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  273. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +3 -3
  274. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  275. package/app/.next-cli-build/server/app/api/tunnel/tailscale-login/route.js.nft.json +1 -1
  276. package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js +2 -2
  277. package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js.nft.json +1 -1
  278. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
  279. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  280. package/app/.next-cli-build/server/app/api/usage/chart/route.js +1 -1
  281. package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  282. package/app/.next-cli-build/server/app/api/usage/history/route.js +1 -1
  283. package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  284. package/app/.next-cli-build/server/app/api/usage/providers/route.js +1 -1
  285. package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  286. package/app/.next-cli-build/server/app/api/usage/request-details/route.js +1 -1
  287. package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  288. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js +1 -1
  289. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  290. package/app/.next-cli-build/server/app/api/usage/stats/route.js +1 -1
  291. package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  292. package/app/.next-cli-build/server/app/api/usage/stream/route.js +2 -2
  293. package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  294. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
  295. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  296. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
  297. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  298. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
  299. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  300. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  301. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
  302. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  303. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
  304. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  305. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js +1 -1
  306. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  307. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  308. package/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
  309. package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  310. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js +1 -1
  311. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  312. package/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  313. package/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
  314. package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  315. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
  316. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  317. package/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
  318. package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  319. package/app/.next-cli-build/server/app/api/v1/route.js +1 -1
  320. package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  321. package/app/.next-cli-build/server/app/api/v1/search/route.js +1 -1
  322. package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  323. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js +1 -1
  324. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  325. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
  326. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  327. package/app/.next-cli-build/server/app/api/v1beta/models/route.js +1 -1
  328. package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  329. package/app/.next-cli-build/server/app/api/version/restart/route.js.nft.json +1 -1
  330. package/app/.next-cli-build/server/app/api/version/route.js +1 -1
  331. package/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
  332. package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  333. package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  334. package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  335. package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  336. package/app/.next-cli-build/server/app/callback/page.js +2 -2
  337. package/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  338. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  339. package/app/.next-cli-build/server/app/callback.html +1 -1
  340. package/app/.next-cli-build/server/app/callback.rsc +3 -3
  341. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
  342. package/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  343. package/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +3 -3
  344. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  345. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  346. package/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  347. package/app/.next-cli-build/server/app/dashboard/analytics.html +1 -1
  348. package/app/.next-cli-build/server/app/dashboard/analytics.rsc +4 -4
  349. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard/analytics/__PAGE__.segment.rsc +1 -1
  350. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard/analytics.segment.rsc +1 -1
  351. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  352. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  353. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_full.segment.rsc +4 -4
  354. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_head.segment.rsc +1 -1
  355. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_index.segment.rsc +3 -3
  356. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_tree.segment.rsc +1 -1
  357. package/app/.next-cli-build/server/app/dashboard/api-keys.html +1 -1
  358. package/app/.next-cli-build/server/app/dashboard/api-keys.rsc +5 -5
  359. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard/api-keys/__PAGE__.segment.rsc +2 -2
  360. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard/api-keys.segment.rsc +1 -1
  361. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  362. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  363. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_full.segment.rsc +5 -5
  364. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_head.segment.rsc +1 -1
  365. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_index.segment.rsc +3 -3
  366. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_tree.segment.rsc +1 -1
  367. package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  368. package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +5 -5
  369. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  370. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  371. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  372. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  373. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +5 -5
  374. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  375. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +3 -3
  376. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  377. package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  378. package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +5 -5
  379. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  380. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  381. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  382. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  383. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
  384. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  385. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
  386. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  387. package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  388. package/app/.next-cli-build/server/app/dashboard/combos.rsc +5 -5
  389. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  390. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  391. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  392. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  393. package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
  394. package/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  395. package/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
  396. package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  397. package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  398. package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +5 -5
  399. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  400. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  401. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  402. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  403. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
  404. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  405. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
  406. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  407. package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  408. package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +5 -5
  409. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  410. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  411. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  412. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  413. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  414. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +5 -5
  415. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  416. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +3 -3
  417. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  418. package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  419. package/app/.next-cli-build/server/app/dashboard/mitm.rsc +5 -5
  420. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  421. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  422. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  423. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  424. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
  425. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  426. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
  427. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  428. package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  429. package/app/.next-cli-build/server/app/dashboard/profile.rsc +4 -4
  430. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +1 -1
  431. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  432. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  433. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  434. package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +4 -4
  435. package/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  436. package/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
  437. package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  438. package/app/.next-cli-build/server/app/dashboard/prompt-logs.html +1 -1
  439. package/app/.next-cli-build/server/app/dashboard/prompt-logs.rsc +4 -4
  440. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs/__PAGE__.segment.rsc +1 -1
  441. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs.segment.rsc +1 -1
  442. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  443. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  444. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_full.segment.rsc +4 -4
  445. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_head.segment.rsc +1 -1
  446. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_index.segment.rsc +3 -3
  447. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_tree.segment.rsc +1 -1
  448. package/app/.next-cli-build/server/app/dashboard/provider-health.html +1 -1
  449. package/app/.next-cli-build/server/app/dashboard/provider-health.rsc +4 -4
  450. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health/__PAGE__.segment.rsc +1 -1
  451. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health.segment.rsc +1 -1
  452. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  453. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  454. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_full.segment.rsc +4 -4
  455. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_head.segment.rsc +1 -1
  456. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_index.segment.rsc +3 -3
  457. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_tree.segment.rsc +1 -1
  458. package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  459. package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +5 -5
  460. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  461. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  462. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  463. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  464. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  465. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
  466. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  467. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
  468. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  469. package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  470. package/app/.next-cli-build/server/app/dashboard/providers.rsc +5 -5
  471. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  472. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  473. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  474. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  475. package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
  476. package/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  477. package/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
  478. package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  479. package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  480. package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +5 -5
  481. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  482. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  483. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  484. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  485. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +5 -5
  486. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  487. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
  488. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  489. package/app/.next-cli-build/server/app/dashboard/quota.html +1 -1
  490. package/app/.next-cli-build/server/app/dashboard/quota.rsc +6 -6
  491. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  492. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  493. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  494. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  495. package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +6 -6
  496. package/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  497. package/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
  498. package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  499. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js +2 -2
  500. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  501. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  502. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  503. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
  504. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  505. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  506. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
  507. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  508. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  509. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  510. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  511. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  512. package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
  513. package/app/.next-cli-build/server/app/dashboard/skills.rsc +5 -5
  514. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
  515. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
  516. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  517. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  518. package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +5 -5
  519. package/app/.next-cli-build/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
  520. package/app/.next-cli-build/server/app/dashboard/skills.segments/_index.segment.rsc +3 -3
  521. package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +1 -1
  522. package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  523. package/app/.next-cli-build/server/app/dashboard/translator.rsc +5 -5
  524. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  525. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  526. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  527. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  528. package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
  529. package/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  530. package/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
  531. package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  532. package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  533. package/app/.next-cli-build/server/app/dashboard/usage.rsc +5 -5
  534. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  535. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  536. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  537. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  538. package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
  539. package/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  540. package/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
  541. package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  542. package/app/.next-cli-build/server/app/dashboard.html +1 -1
  543. package/app/.next-cli-build/server/app/dashboard.rsc +5 -5
  544. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  545. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  546. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  547. package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +5 -5
  548. package/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  549. package/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +3 -3
  550. package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  551. package/app/.next-cli-build/server/app/favicon.ico/route.js.nft.json +1 -1
  552. package/app/.next-cli-build/server/app/index.html +1 -1
  553. package/app/.next-cli-build/server/app/index.rsc +3 -3
  554. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  555. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
  556. package/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  557. package/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +3 -3
  558. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  559. package/app/.next-cli-build/server/app/landing/page.js +2 -2
  560. package/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  561. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  562. package/app/.next-cli-build/server/app/landing.html +1 -1
  563. package/app/.next-cli-build/server/app/landing.rsc +3 -3
  564. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +3 -3
  565. package/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  566. package/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +3 -3
  567. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  568. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  569. package/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  570. package/app/.next-cli-build/server/app/login/page.js +2 -2
  571. package/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  572. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  573. package/app/.next-cli-build/server/app/login.html +1 -1
  574. package/app/.next-cli-build/server/app/login.rsc +3 -3
  575. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +3 -3
  576. package/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  577. package/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +3 -3
  578. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  579. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
  580. package/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  581. package/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  582. package/app/.next-cli-build/server/app/page.js +2 -2
  583. package/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  584. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  585. package/app/.next-cli-build/server/app-paths-manifest.json +2 -2
  586. package/app/.next-cli-build/server/chunks/{7795.js → 2338.js} +80 -3
  587. package/app/.next-cli-build/server/chunks/{4657.js → 2680.js} +1 -1
  588. package/app/.next-cli-build/server/chunks/3104.js +1 -1
  589. package/app/.next-cli-build/server/chunks/3110.js +1 -1
  590. package/app/.next-cli-build/server/chunks/3801.js +1 -1
  591. package/app/.next-cli-build/server/chunks/402.js +365 -0
  592. package/app/.next-cli-build/server/chunks/4746.js +1 -1
  593. package/app/.next-cli-build/server/chunks/4790.js +5 -0
  594. package/app/.next-cli-build/server/chunks/5199.js +62 -19
  595. package/app/.next-cli-build/server/chunks/5206.js +1 -0
  596. package/app/.next-cli-build/server/chunks/5901.js +1 -162
  597. package/app/.next-cli-build/server/chunks/6050.js +81 -0
  598. package/app/.next-cli-build/server/chunks/7130.js +1 -1
  599. package/app/.next-cli-build/server/chunks/7153.js +1 -1
  600. package/app/.next-cli-build/server/chunks/8352.js +5 -0
  601. package/app/.next-cli-build/server/instrumentation.js +1 -1
  602. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  603. package/app/.next-cli-build/server/middleware.js +81 -4
  604. package/app/.next-cli-build/server/pages/404.html +1 -1
  605. package/app/.next-cli-build/server/pages/500.html +1 -1
  606. package/app/.next-cli-build/static/chunks/{1321-9c0032efcf0df2d2.js → 1321-8dd292a855ed0750.js} +1 -1
  607. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-shm +0 -0
  608. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-wal +0 -0
  609. package/app/package.json +1 -1
  610. package/package.json +1 -1
  611. package/app/.next-cli-build/server/chunks/5087.js +0 -52
  612. package/app/.next-cli-build/server/chunks/5742.js +0 -1
  613. package/app/.next-cli-build/server/chunks/6663.js +0 -81
  614. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-2.0.60-to-2.0.61-2.0.61-20260615-100723/data.sqlite +0 -0
  615. /package/app/.next-cli-build/static/{FoeruyPB3g0nGQle09ONd → uhYWkZ2JuXG6pRPic3iXf}/_buildManifest.js +0 -0
  616. /package/app/.next-cli-build/static/{FoeruyPB3g0nGQle09ONd → uhYWkZ2JuXG6pRPic3iXf}/_ssgManifest.js +0 -0
  617. /package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/{upgrade-2.0.57-to-2.0.58-2.0.58-20260615-085718 → upgrade-2.0.62-to-2.0.63-2.0.63-20260615-105338}/data.sqlite +0 -0
  618. /package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/{upgrade-2.0.58-to-2.0.59-2.0.59-20260615-092907 → upgrade-2.0.63-to-2.0.64-2.0.64-20260615-134136}/data.sqlite +0 -0
  619. /package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/{upgrade-2.0.59-to-2.0.60-2.0.60-20260615-094124 → upgrade-2.0.64-to-2.0.65-2.0.65-20260615-134351}/data.sqlite +0 -0
@@ -0,0 +1,365 @@
1
+ exports.id=402,exports.ids=[402],exports.modules={490:(a,b,c)=>{"use strict";c.d(b,{Bu:()=>m,KS:()=>r,Tr:()=>n,bh:()=>s,is:()=>e,jQ:()=>l});let d=new Map,e=Object.freeze({enabled:!0,requestsPerMinute:20,promptCharsMax:12e4,forceThinkingOff:!0,allowedIpCidrs:[],expiresAt:""}),f=new Set(Object.keys(e));function g(a,b=0){let c=Number(a);return Number.isFinite(c)?Math.max(0,Math.floor(c)):b}function h(a,b=!0){if(null==a||""===a)return b;if("boolean"==typeof a)return a;if("number"==typeof a)return 0!==a;let c=String(a).trim().toLowerCase();return!["false","0","no","off"].includes(c)&&(!!["true","1","yes","on"].includes(c)||b)}function i(a){return a&&"object"==typeof a&&!Array.isArray(a)}function j(a){return Array.isArray(a)?[...new Set(a.map(a=>String(a||"").trim()).filter(Boolean))]:[]}function k(a){return!!i(a)&&Object.keys(a).some(a=>f.has(a))}function l(a={}){if(!k(a))return{};let b=i(a)?a:{};return{enabled:h(b.enabled,e.enabled),requestsPerMinute:g(b.requestsPerMinute,0),promptCharsMax:g(b.promptCharsMax,0),forceThinkingOff:h(b.forceThinkingOff,e.forceThinkingOff),allowedIpCidrs:j(b.allowedIpCidrs),expiresAt:String(b.expiresAt||"").trim()}}function m(a){let b=l(a?.limits||{});return k(b)&&!1!==b.enabled?b:null}function n(a){let b=a?.headers?.get?.("Authorization")||"";return b.startsWith("Bearer ")?b.slice(7).trim():a?.headers?.get?.("x-api-key")?.trim()||null}function o(a,b){return a?.headers?.get?.(b)||a?.headers?.get?.(b.toLowerCase())||""}function p(a){let b=String(a||"").trim().split(".");if(4!==b.length)return null;let c=0;for(let a of b){if(!/^\d+$/.test(a))return null;let b=Number(a);if(b<0||b>255)return null;c=(c<<8)+b}return c>>>0}function q(a){if(null==a)return 0;if("string"==typeof a)return a.length;if("number"==typeof a||"boolean"==typeof a)return String(a).length;if(Array.isArray(a))return a.reduce((a,b)=>a+q(b),0);if("object"==typeof a){let b=0;for(let[c,d]of Object.entries(a))b+=String(c).length,b+=q(d);return b}return String(a).length}function r({request:a,keyRecord:b,body:c}){let e=m(b);if(!e)return{ok:!0,applied:!1};if(!function(a){let b=String(a||"").trim();if(!b)return!0;let c=Date.parse(b);return!Number.isFinite(c)||Date.now()<=c}(e.expiresAt))return{ok:!1,status:403,message:"API key đ\xe3 hết hạn theo policy."};if(!function(a,b){let c,d=j(b);if(0===d.length)return!0;let e=(c=o(a,"x-forwarded-for"))?c.split(",")[0].trim():(o(a,"x-real-ip")||o(a,"cf-connecting-ip")||o(a,"x-client-ip")||"").trim();return!!e&&d.some(a=>(function(a,b){let c=String(b||"").trim();if(!c)return!1;if(!c.includes("/"))return a===c;let[d,e]=c.split("/"),f=Number(e);if(!Number.isInteger(f)||f<0||f>32)return!1;let g=p(a),h=p(d);if(null===g||null===h)return!1;let i=0===f?0:0xffffffff<<32-f>>>0;return(g&i)==(h&i)})(e,a))}(a,e.allowedIpCidrs))return{ok:!1,status:403,message:"API key kh\xf4ng được ph\xe9p gọi từ IP hiện tại."};let f=g(e.promptCharsMax,0);if(f>0){let a=function(a={}){return q(a.messages||[])+q(a.prompt||"")+q(a.input||"")}(c);if(a>f)return{ok:!1,status:413,message:`Prompt qu\xe1 d\xe0i: ${a} chars, giới hạn của API key l\xe0 ${f} chars.`}}let h=function({keyId:a,policy:b,now:c=Date.now()}){let e=g(b.requestsPerMinute,0);if(e<=0)return{ok:!0};let f=6e4*Math.floor(c/6e4),h=`${a}:minute:${f}`,i=d.get(h)||0;if(i>=e){let a=Math.max(1,Math.ceil((f+6e4-c)/1e3));return{ok:!1,status:429,message:`API key vượt giới hạn ${e} request/ph\xfat. Thử lại sau ${a}s.`,headers:{"Retry-After":String(a)}}}if(d.set(h,i+1),d.size>1e4){let a=c-6e5;for(let b of d.keys()){let c=Number(b.split(":").pop());Number.isFinite(c)&&c<a&&d.delete(b)}}return{ok:!0}}({keyId:b?.id||b?.key||"unknown",policy:e});return h.ok?{ok:!0,applied:!0}:h}function s(a){let b={"Access-Control-Allow-Origin":"*","Content-Type":"application/json",...a?.headers||{}};return new Response(JSON.stringify({error:{message:a?.message||"API key policy rejected this request.",type:"api_key_policy_error"}}),{status:a?.status||403,headers:b})}},644:(a,b,c)=>{"use strict";function d(a,b=null){if(null==a)return b;if("string"!=typeof a)return a;try{return JSON.parse(a)}catch{return b}}function e(a){return JSON.stringify(a??null)}c.d(b,{q:()=>d,s:()=>e})},5781:(a,b,c)=>{"use strict";c.d(b,{Mc:()=>k,fK:()=>o,getProviderConnections:()=>j,iE:()=>m,op:()=>p,rj:()=>n});var d=c(94755),e=c(36366),f=c(644);let g=["displayName","email","globalPriority","defaultModel","accessToken","refreshToken","expiresAt","tokenType","scope","projectId","apiKey","testStatus","lastTested","lastError","lastErrorAt","rateLimitedUntil","expiresIn","errorCode","consecutiveUseCount","schedule","healthCheck","healthStatus","healthConsecutiveFailures","healthConsecutiveSuccesses","healthLastCheckedAt","healthLastOkAt","healthLastError","healthLastLatencyMs","healthLastRecoveredAt"];function h(a){return a?{...(0,f.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||!0===a.isActive,createdAt:a.createdAt,updatedAt:a.updatedAt}:null}function i(a,b){let c=function(a){let{id:b,provider:c,authType:d,name:e,email:g,priority:h,isActive:i,createdAt:j,updatedAt:k,...l}=a;return{id:b,provider:c,authType:d,name:e??null,email:g??null,priority:h??null,isActive:+(!1!==i),data:(0,f.s)(l),createdAt:j,updatedAt:k}}(b);a.run(`INSERT INTO providerConnections(id, provider, authType, name, email, priority, isActive, data, createdAt, updatedAt)
2
+ VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
3
+ ON CONFLICT(id) DO UPDATE SET
4
+ provider=excluded.provider, authType=excluded.authType, name=excluded.name,
5
+ email=excluded.email, priority=excluded.priority, isActive=excluded.isActive,
6
+ 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 j(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(h);return g.sort((a,b)=>(a.priority||999)-(b.priority||999)),g}async function k(a){return h((await (0,e.c)()).get("SELECT * FROM providerConnections WHERE id = ?",[a]))}function l(a,b){let c=a.all("SELECT * FROM providerConnections WHERE provider = ?",[b]).map(h);c.sort((a,b)=>{let c=(a.priority||0)-(b.priority||0);return 0!==c?c:new Date(b.updatedAt||0)-new Date(a.updatedAt||0)}),c.forEach((b,c)=>{a.run("UPDATE providerConnections SET priority = ? WHERE id = ?",[c+1,b.id])})}async function m(a){let b,c=await (0,e.c)(),f=new Date().toISOString();return c.transaction(()=>{let e=c.all("SELECT * FROM providerConnections WHERE provider = ?",[a.provider]).map(h),j=null;if("oauth"===a.authType&&a.email){let b=a.providerSpecificData?.chatgptAccountId;j=e.find(c=>{if("oauth"!==c.authType||c.email!==a.email)return!1;let d=c.providerSpecificData?.chatgptAccountId;return!b||!d||b===d})}else"apikey"===a.authType&&a.name&&(j=e.find(b=>"apikey"===b.authType&&b.name===a.name));if(j){let d={...j,...a,updatedAt:f};i(c,d),b=d;return}let k=a.name||null;k||"oauth"!==a.authType&&"access_token"!==a.authType||(k=a.email||`Account ${e.length+1}`);let m=a.priority;m||(m=e.reduce((a,b)=>Math.max(a,b.priority||0),0)+1);let n={id:(0,d.A)(),provider:a.provider,authType:a.authType||"oauth",name:k,priority:m,isActive:void 0===a.isActive||a.isActive,createdAt:f,updatedAt:f};for(let b of g)void 0!==a[b]&&null!==a[b]&&(n[b]=a[b]);a.providerSpecificData&&Object.keys(a.providerSpecificData).length>0&&(n.providerSpecificData=a.providerSpecificData),void 0!==a.email&&(n.email=a.email),i(c,n),l(c,a.provider),b=n}),b}async function n(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=h(e),g={...f,...b,updatedAt:new Date().toISOString()};i(d,g),void 0!==b.priority&&l(d,f.provider),c=g}),c}async function o(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]),l(b,d.provider),c=!0)}),c}async function p(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}},9460:(a,b,c)=>{"use strict";c.d(b,{L9:()=>r,OM:()=>j,S8:()=>o,fv:()=>l,getMitmAlias:()=>q,o5:()=>k,uL:()=>p,uv:()=>n});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(){return await g.getAll()}async function k(a,b){await g.set(a,b)}async function l(a){await g.remove(a)}function m(a,b,c){return`${a}|${b}|${c}`}async function n(){return Object.values(await h.getAll())}async function o({providerAlias:a,id:b,type:c="llm",name:f}){let g=m(a,b,c),h=await (0,d.c)(),i=!1;return h.transaction(()=>{if(h.get("SELECT 1 FROM kv WHERE scope = 'customModels' AND key = ?",[g]))return;let d=(0,e.s)({providerAlias:a,id:b,type:c,name:f||b});h.run("INSERT INTO kv(scope, key, value) VALUES('customModels', ?, ?)",[g,d]),i=!0}),i}async function p({providerAlias:a,id:b,type:c="llm"}){await h.remove(m(a,b,c))}async function q(a){return a?await i.get(a)||{}:await i.getAll()}async function r(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])}}}},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;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(3941).then(c.bind(c,43941));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)}},42655:(a,b,c)=>{"use strict";c.d(b,{Xx:()=>j,exportSettings:()=>k,getSettings:()=>i});var d=c(36366),e=c(644);let f={cloudEnabled:!1,tunnelEnabled:!1,tunnelUrl:"",tunnelProvider:"cloudflare",tailscaleEnabled:!1,tailscaleUrl:"",stickyRoundRobinLimit:3,providerStrategies:{},providerSchedules:{},providerHealthChecks:{},comboStrategy:"fallback",comboStickyRoundRobinLimit:1,comboStrategies:{},requireApiKey:!0,requireLogin:!0,tunnelDashboardAccess:!0,authMode:"password",oidcIssuerUrl:"",oidcClientId:"",oidcClientSecret:"",oidcScopes:"openid profile email",oidcLoginLabel:"Sign in with OIDC",ldapMonitorAdminGroupDn:"",enableObservability:!0,observabilityMaxRecords:1e3,observabilityBatchSize:20,observabilityFlushIntervalMs:5e3,observabilityMaxJsonSize:5,outboundProxyEnabled:!1,outboundProxyUrl:"",outboundNoProxy:"",mitmRouterBaseUrl:"http://localhost:20128",dnsToolEnabled:{},rtkEnabled:!0,cavemanEnabled:!1,cavemanLevel:"full",sidebarAdvancedToolsVisible:!0};async function g(){let a=(await (0,d.c)()).get("SELECT data FROM settings WHERE id = 1");return a?(0,e.q)(a.data,{}):{}}function h(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);return b.requireApiKey=!0,b.requireLogin=!0,b}async function i(){return h(await g())}async function j(a){let b,c=await (0,d.c)();return c.transaction(()=>{let d=c.get("SELECT data FROM settings WHERE id = 1");b={...d?(0,e.q)(d.data,{}):{},...a,requireApiKey:!0,requireLogin:!0},c.run("INSERT INTO settings(id, data) VALUES(1, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data",[(0,e.s)(b)])}),h(b)}async function k(){return await g()}},45903:(a,b,c)=>{"use strict";c.d(b,{AP:()=>m,BY:()=>w,I6:()=>k,L7:()=>l,dX:()=>v,r:()=>j});var d=c(89718),e=c(33873),f=c.n(e),g=c(29021),h=c.n(g);let i={enabled:!1,type:"sqlite",sqlitePath:"",host:"",port:"",database:"",username:"",password:"",ssl:!1,createDatabase:!1,logClientRequest:!0,logSourceRequest:!0,logTargetRequest:!0,logProviderResponse:!1,logErrors:!0,retentionDays:30};function j(a){let b={...a||{}};return b.password&&(b.password="********"),b}function k(a={},b={}){let c={...i,...b||{},...a||{}};c.enabled=!!c.enabled,c.type=["sqlite","postgres","mysql"].includes(c.type)?c.type:"sqlite",c.ssl=!!c.ssl,c.createDatabase=!!c.createDatabase,c.logClientRequest=!1!==c.logClientRequest,c.logSourceRequest=!1!==c.logSourceRequest,c.logTargetRequest=!1!==c.logTargetRequest,c.logProviderResponse=!0===c.logProviderResponse,c.logErrors=!1!==c.logErrors;let d=Number(c.retentionDays);return c.retentionDays=Number.isFinite(d)&&d>0?Math.floor(d):30,"********"===c.password&&(c.password=b?.password||""),c.host=String(c.host||"").trim(),c.port=String(c.port||"").trim(),c.database=String(c.database||"").trim(),c.username=String(c.username||"").trim(),c.password=String(c.password||""),c.sqlitePath=String(c.sqlitePath||"").trim(),c}async function l(){let a=await (0,d.mt)();return{...i,...a?.promptLogDb||{}}}async function m(a){let b=await (0,d.mt)(),c=k(a,b?.promptLogDb||{});return await (0,d.Xx)({promptLogDb:c}),c}async function n(a){let b,d=a.sqlitePath||(b=process.env.DATA_DIR||"/var/lib/bluerouter",f().join(b,"logs","promptLogs.sqlite"));h().mkdirSync(f().dirname(d),{recursive:!0});try{let a=await Promise.resolve().then(c.t.bind(c,87550,23)),b=new(a.default||a)(d);return b.pragma("journal_mode = WAL"),b.pragma("busy_timeout = 5000"),{type:"sqlite",sqlitePath:d,exec(a){b.exec(a)},all:(a,c=[])=>b.prepare(a).all(...c),close(){b.close()}}}catch{let a=new(await Promise.resolve().then(c.t.bind(c,80099,23))).DatabaseSync(d);return a.exec("PRAGMA journal_mode = WAL"),a.exec("PRAGMA busy_timeout = 5000"),{type:"sqlite",sqlitePath:d,exec(b){a.exec(b)},all:(b,c=[])=>a.prepare(b).all(...c),close(){a.close()}}}}async function o(a,b=null){let d=new(await Promise.resolve().then(c.bind(c,64939))).Client({host:a.host,port:Number(a.port||5432),database:b||a.database,user:a.username,password:a.password,ssl:!!a.ssl&&{rejectUnauthorized:!1}});return await d.connect(),{type:"postgres",client:d,async exec(a){await d.query(a)},async close(){await d.end()}}}async function p(a,b=!0){let d=await c.e(8491).then(c.t.bind(c,38491,19)),e=await d.createConnection({host:a.host,port:Number(a.port||3306),database:b?a.database:void 0,user:a.username,password:a.password,ssl:a.ssl?{}:void 0,multipleStatements:!0});return{type:"mysql",conn:e,async exec(a){await e.query(a)},async close(){await e.end()}}}async function q(a){let b=new Set(a.all("PRAGMA table_info(prompt_logs)").map(a=>a.name)),c=(c,d)=>{b.has(c)||a.exec(`ALTER TABLE prompt_logs ADD COLUMN ${c} ${d};`)};c("client_ip","TEXT"),c("client_port","TEXT"),c("client_user_agent","TEXT"),c("client_host","TEXT"),c("source_tool","TEXT"),c("source_tool_label","TEXT"),c("source_host","TEXT"),c("provider","TEXT"),c("account_name","TEXT"),c("connection_id","TEXT"),c("display_model","TEXT"),c("content_mode","TEXT"),c("payload_hash","TEXT"),c("payload_size_bytes","INTEGER DEFAULT 0"),a.exec("CREATE INDEX IF NOT EXISTS idx_prompt_logs_client_ip ON prompt_logs(client_ip);"),a.exec("CREATE INDEX IF NOT EXISTS idx_prompt_logs_source_tool ON prompt_logs(source_tool);")}async function r(a){await a.exec(`
7
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS client_ip TEXT;
8
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS client_port TEXT;
9
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS client_user_agent TEXT;
10
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS client_host TEXT;
11
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS source_tool TEXT;
12
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS source_tool_label TEXT;
13
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS source_host TEXT;
14
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS provider TEXT;
15
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS account_name TEXT;
16
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS connection_id TEXT;
17
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS display_model TEXT;
18
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS content_mode TEXT;
19
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS payload_hash TEXT;
20
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS payload_size_bytes BIGINT DEFAULT 0;
21
+
22
+ CREATE INDEX IF NOT EXISTS idx_prompt_logs_client_ip
23
+ ON prompt_logs(client_ip);
24
+
25
+ CREATE INDEX IF NOT EXISTS idx_prompt_logs_source_tool
26
+ ON prompt_logs(source_tool);
27
+ `)}async function s(a,b,c,d){let[e]=await a.query(`
28
+ SELECT 1 AS found
29
+ FROM INFORMATION_SCHEMA.COLUMNS
30
+ WHERE TABLE_SCHEMA = ?
31
+ AND TABLE_NAME = ?
32
+ AND COLUMN_NAME = ?
33
+ LIMIT 1
34
+ `,[b,c,d]);return e.length>0}async function t(a,b,c,d){let[e]=await a.query(`
35
+ SELECT 1 AS found
36
+ FROM INFORMATION_SCHEMA.STATISTICS
37
+ WHERE TABLE_SCHEMA = ?
38
+ AND TABLE_NAME = ?
39
+ AND INDEX_NAME = ?
40
+ LIMIT 1
41
+ `,[b,c,d]);return e.length>0}async function u(a,b){let c=async(c,d)=>{await s(a.conn,b.database,"prompt_logs",c)||await a.conn.query(`ALTER TABLE prompt_logs ADD COLUMN ${c} ${d}`)};await c("client_ip","VARCHAR(64)"),await c("client_port","VARCHAR(32)"),await c("client_user_agent","TEXT"),await c("client_host","TEXT"),await c("source_tool","VARCHAR(80)"),await c("source_tool_label","VARCHAR(120)"),await c("source_host","VARCHAR(255)"),await c("provider","VARCHAR(120)"),await c("account_name","VARCHAR(255)"),await c("connection_id","VARCHAR(120)"),await c("display_model","VARCHAR(512)"),await c("content_mode","VARCHAR(32)"),await c("payload_hash","CHAR(64)"),await c("payload_size_bytes","BIGINT DEFAULT 0"),await t(a.conn,b.database,"prompt_logs","idx_prompt_logs_payload_hash")||await a.conn.query("CREATE INDEX idx_prompt_logs_payload_hash ON prompt_logs(payload_hash)"),await a.conn.query(`CREATE TABLE IF NOT EXISTS prompt_log_payloads (
42
+ payload_hash CHAR(64) PRIMARY KEY,
43
+ created_at DATETIME(3) NOT NULL,
44
+ last_seen_at DATETIME(3) NOT NULL,
45
+ content_type VARCHAR(64),
46
+ payload_size_bytes BIGINT DEFAULT 0,
47
+ ref_count BIGINT DEFAULT 1,
48
+ payload_json JSON,
49
+ INDEX idx_prompt_log_payloads_created_at (created_at),
50
+ INDEX idx_prompt_log_payloads_last_seen_at (last_seen_at)
51
+ ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci`),await t(a.conn,b.database,"prompt_logs","idx_prompt_logs_client_ip")||await a.conn.query("CREATE INDEX idx_prompt_logs_client_ip ON prompt_logs(client_ip)"),await t(a.conn,b.database,"prompt_logs","idx_prompt_logs_source_tool")||await a.conn.query("CREATE INDEX idx_prompt_logs_source_tool ON prompt_logs(source_tool)")}async function v(a=null){let b=k(a||await l());if("sqlite"===b.type){let a=await n(b);try{return a.exec(`
52
+ CREATE TABLE IF NOT EXISTS prompt_logs (
53
+ id TEXT PRIMARY KEY,
54
+ created_at TEXT NOT NULL,
55
+ session_id TEXT,
56
+ source_format TEXT,
57
+ target_format TEXT,
58
+ model TEXT,
59
+ endpoint TEXT,
60
+ stage TEXT,
61
+ provider_url TEXT,
62
+ provider TEXT,
63
+ account_name TEXT,
64
+ connection_id TEXT,
65
+ display_model TEXT,
66
+ client_ip TEXT,
67
+ client_port TEXT,
68
+ client_user_agent TEXT,
69
+ client_host TEXT,
70
+ source_tool TEXT,
71
+ source_tool_label TEXT,
72
+ source_host TEXT,
73
+ content_mode TEXT,
74
+ payload_hash TEXT,
75
+ payload_size_bytes INTEGER DEFAULT 0,
76
+ prompt_text TEXT,
77
+ full_request_json TEXT,
78
+ response_text TEXT,
79
+ status_code INTEGER,
80
+ error_text TEXT,
81
+ meta_json TEXT
82
+ );
83
+
84
+ CREATE INDEX IF NOT EXISTS idx_prompt_logs_created_at
85
+ ON prompt_logs(created_at DESC);
86
+
87
+ CREATE INDEX IF NOT EXISTS idx_prompt_logs_model
88
+ ON prompt_logs(model);
89
+
90
+ CREATE INDEX IF NOT EXISTS idx_prompt_logs_stage
91
+ ON prompt_logs(stage);
92
+
93
+ CREATE INDEX IF NOT EXISTS idx_prompt_logs_session
94
+ ON prompt_logs(session_id);
95
+
96
+ CREATE INDEX IF NOT EXISTS idx_prompt_logs_client_ip
97
+ ON prompt_logs(client_ip);
98
+
99
+ CREATE INDEX IF NOT EXISTS idx_prompt_logs_source_tool
100
+ ON prompt_logs(source_tool);
101
+ `),await q(a),{ok:!0,type:"sqlite",message:"SQLite prompt log schema is ready",sqlitePath:a.sqlitePath}}finally{a.close()}}if("postgres"===b.type){if(!b.host||!b.database||!b.username)throw Error("PostgreSQL host, database, and username are required");if(b.createDatabase){let a=await o(b,"postgres");try{let c=await a.client.query("SELECT 1 FROM pg_database WHERE datname = $1",[b.database]);if(0===c.rowCount){let c=b.database.replace(/"/g,'""');await a.client.query(`CREATE DATABASE "${c}"`)}}finally{await a.close()}}let a=await o(b);try{return await a.exec(`
102
+ CREATE TABLE IF NOT EXISTS prompt_logs (
103
+ id TEXT PRIMARY KEY,
104
+ created_at TIMESTAMPTZ NOT NULL,
105
+ session_id TEXT,
106
+ source_format TEXT,
107
+ target_format TEXT,
108
+ model TEXT,
109
+ endpoint TEXT,
110
+ stage TEXT,
111
+ provider_url TEXT,
112
+ provider TEXT,
113
+ account_name TEXT,
114
+ connection_id TEXT,
115
+ display_model TEXT,
116
+ client_ip TEXT,
117
+ client_port TEXT,
118
+ client_user_agent TEXT,
119
+ client_host TEXT,
120
+ source_tool TEXT,
121
+ source_tool_label TEXT,
122
+ source_host TEXT,
123
+ content_mode TEXT,
124
+ payload_hash TEXT,
125
+ payload_size_bytes INTEGER DEFAULT 0,
126
+ prompt_text TEXT,
127
+ full_request_json JSONB,
128
+ response_text TEXT,
129
+ status_code INTEGER,
130
+ error_text TEXT,
131
+ meta_json JSONB
132
+ );
133
+
134
+ CREATE INDEX IF NOT EXISTS idx_prompt_logs_created_at
135
+ ON prompt_logs(created_at DESC);
136
+
137
+ CREATE INDEX IF NOT EXISTS idx_prompt_logs_model
138
+ ON prompt_logs(model);
139
+
140
+ CREATE INDEX IF NOT EXISTS idx_prompt_logs_stage
141
+ ON prompt_logs(stage);
142
+
143
+ CREATE INDEX IF NOT EXISTS idx_prompt_logs_session
144
+ ON prompt_logs(session_id);
145
+
146
+ CREATE INDEX IF NOT EXISTS idx_prompt_logs_client_ip
147
+ ON prompt_logs(client_ip);
148
+
149
+ CREATE INDEX IF NOT EXISTS idx_prompt_logs_source_tool
150
+ ON prompt_logs(source_tool);
151
+ `),await r(a),{ok:!0,type:"postgres",message:"PostgreSQL prompt log schema is ready"}}finally{await a.close()}}if("mysql"===b.type){if(!b.host||!b.database||!b.username)throw Error("MySQL host, database, and username are required");if(b.createDatabase){let a=await p(b,!1);try{let c=b.database.replace(/`/g,"``");await a.exec(`CREATE DATABASE IF NOT EXISTS \`${c}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci`)}finally{await a.close()}}let a=await p(b,!0);try{return await a.exec(`
152
+ CREATE TABLE IF NOT EXISTS prompt_logs (
153
+ id VARCHAR(80) PRIMARY KEY,
154
+ created_at DATETIME(3) NOT NULL,
155
+ session_id VARCHAR(255),
156
+ source_format VARCHAR(80),
157
+ target_format VARCHAR(80),
158
+ model VARCHAR(255),
159
+ endpoint TEXT,
160
+ stage VARCHAR(80),
161
+ provider_url TEXT,
162
+ provider VARCHAR(120),
163
+ account_name VARCHAR(255),
164
+ connection_id VARCHAR(120),
165
+ display_model VARCHAR(512),
166
+ client_ip VARCHAR(64),
167
+ client_port VARCHAR(32),
168
+ client_user_agent TEXT,
169
+ client_host TEXT,
170
+ source_tool VARCHAR(80),
171
+ source_tool_label VARCHAR(120),
172
+ source_host VARCHAR(255),
173
+ content_mode VARCHAR(32),
174
+ payload_hash CHAR(64),
175
+ payload_size_bytes BIGINT DEFAULT 0,
176
+ prompt_text LONGTEXT,
177
+ full_request_json JSON,
178
+ response_text LONGTEXT,
179
+ status_code INT,
180
+ error_text TEXT,
181
+ meta_json JSON,
182
+ INDEX idx_prompt_logs_created_at (created_at),
183
+ INDEX idx_prompt_logs_model (model),
184
+ INDEX idx_prompt_logs_stage (stage),
185
+ INDEX idx_prompt_logs_session (session_id),
186
+ INDEX idx_prompt_logs_client_ip (client_ip),
187
+ INDEX idx_prompt_logs_source_tool (source_tool),
188
+ INDEX idx_prompt_logs_payload_hash (payload_hash)
189
+ ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
190
+
191
+ CREATE TABLE IF NOT EXISTS prompt_log_payloads (
192
+ payload_hash CHAR(64) PRIMARY KEY,
193
+ created_at DATETIME(3) NOT NULL,
194
+ last_seen_at DATETIME(3) NOT NULL,
195
+ content_type VARCHAR(64),
196
+ payload_size_bytes BIGINT DEFAULT 0,
197
+ ref_count BIGINT DEFAULT 1,
198
+ payload_json JSON,
199
+ INDEX idx_prompt_log_payloads_created_at (created_at),
200
+ INDEX idx_prompt_log_payloads_last_seen_at (last_seen_at)
201
+ ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
202
+ `),await u(a,b),{ok:!0,type:"mysql",message:"MySQL prompt log schema is ready"}}finally{await a.close()}}throw Error(`Unsupported database type: ${b.type}`)}async function w(a=null){let b=k(a||await l());if("sqlite"===b.type){let a=await n(b);try{return a.exec("SELECT 1;"),{ok:!0,type:"sqlite",message:"SQLite connection OK",sqlitePath:a.sqlitePath}}finally{a.close()}}if("postgres"===b.type){let a=await o(b);try{return await a.exec("SELECT 1;"),{ok:!0,type:"postgres",message:"PostgreSQL connection OK"}}finally{await a.close()}}if("mysql"===b.type){let a=await p(b,!0);try{return await a.exec("SELECT 1;"),{ok:!0,type:"mysql",message:"MySQL connection OK"}}finally{await a.close()}}throw Error(`Unsupported database type: ${b.type}`)}},49120:(a,b,c)=>{"use strict";c.r(b),c.d(b,{DATA_DIR:()=>m,getDataDir:()=>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="bluerouter";function k(){return"win32"===process.platform?g().join(process.env.APPDATA||g().join(i().homedir(),"AppData","Roaming"),j):g().join(i().homedir(),`.${j}`)}function l(){let a=process.env.DATA_DIR;if(!a)return 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}}let m=l()},56403:(a,b,c)=>{"use strict";c.d(b,{S8:()=>E.S8,E5:()=>K.E5,Iq:()=>w.Iq,jd:()=>B,iE:()=>g.iE,i0:()=>m,ZO:()=>t,Lh:()=>w.Lh,CG:()=>D,uL:()=>E.uL,fv:()=>E.fv,fK:()=>g.fK,op:()=>g.op,Pc:()=>o,Yd:()=>v,tm:()=>I,oF:()=>J,zP:()=>X,rg:()=>K.rg,yg:()=>w.yg,mY:()=>w.getApiKeyByKey,PX:()=>w.PX,j$:()=>K.j$,L:()=>z,Dj:()=>A,Uv:()=>y,uv:()=>E.uv,vF:()=>H,c:()=>E.getMitmAlias,OM:()=>E.OM,r4:()=>F.r4,Mc:()=>g.Mc,P:()=>g.getProviderConnections,Qu:()=>l,Fh:()=>k,hr:()=>s,ui:()=>r,Zx:()=>K.Zx,SL:()=>V,mt:()=>f.getSettings,BY:()=>K.BY,K1:()=>Y,VT:()=>F.VT,yF:()=>F.yF,ox:()=>U,sZ:()=>K.sZ,L9:()=>E.L9,o5:()=>E.o5,_V:()=>K._V,uw:()=>K.uw,XW:()=>w.XW,oG:()=>C,KJ:()=>F.KJ,rj:()=>g.rj,ho:()=>n,Q_:()=>u,Xx:()=>f.Xx,ek:()=>w.ek});var d=c(36366),e=c(644),f=c(42655),g=c(5781),h=c(94755);function i(a){return a?{...(0,e.q)(a.data,{}),id:a.id,type:a.type,name:a.name,createdAt:a.createdAt,updatedAt:a.updatedAt}:null}function j(a,b){let c=function(a){let{id:b,type:c,name:d,createdAt:f,updatedAt:g,...h}=a;return{id:b,type:c??null,name:d??null,data:(0,e.s)(h),createdAt:f,updatedAt:g}}(b);a.run(`INSERT INTO providerNodes(id, type, name, data, createdAt, updatedAt)
203
+ VALUES(?, ?, ?, ?, ?, ?)
204
+ ON CONFLICT(id) DO UPDATE SET
205
+ type=excluded.type, name=excluded.name, data=excluded.data, updatedAt=excluded.updatedAt`,[c.id,c.type,c.name,c.data,c.createdAt,c.updatedAt])}async function k(a={}){let b=await (0,d.c)(),c=[],e=[];a.type&&(c.push("type = ?"),e.push(a.type));let f=`SELECT * FROM providerNodes${c.length?` WHERE ${c.join(" AND ")}`:""}`;return b.all(f,e).map(i)}async function l(a){return i((await (0,d.c)()).get("SELECT * FROM providerNodes WHERE id = ?",[a]))}async function m(a){let b=await (0,d.c)(),c=new Date().toISOString(),e={id:a.id||(0,h.A)(),type:a.type,name:a.name,prefix:a.prefix,apiType:a.apiType,baseUrl:a.baseUrl,openAICompatibleRuntime:a.openAICompatibleRuntime,createdAt:c,updatedAt:c};return j(b,e),e}async function n(a,b){let c=await (0,d.c)(),e=null;return c.transaction(()=>{let d=c.get("SELECT * FROM providerNodes WHERE id = ?",[a]);if(!d)return;let f={...i(d),...b,updatedAt:new Date().toISOString()};j(c,f),e=f}),e}async function o(a){let b=await (0,d.c)(),c=null;return b.transaction(()=>{let d=b.get("SELECT * FROM providerNodes WHERE id = ?",[a]);d&&(c=i(d),b.run("DELETE FROM providerNodes WHERE id = ?",[a]))}),c}function p(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 q(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)
206
+ VALUES(?, ?, ?, ?, ?, ?)
207
+ ON CONFLICT(id) DO UPDATE SET
208
+ isActive=excluded.isActive, testStatus=excluded.testStatus,
209
+ data=excluded.data, updatedAt=excluded.updatedAt`,[c.id,c.isActive,c.testStatus,c.data,c.createdAt,c.updatedAt])}async function r(a={}){let b=await (0,d.c)(),c=[],e=[];void 0!==a.isActive&&(c.push("isActive = ?"),e.push(+!!a.isActive)),a.testStatus&&(c.push("testStatus = ?"),e.push(a.testStatus));let f=`SELECT * FROM proxyPools${c.length?` WHERE ${c.join(" AND ")}`:""}`,g=b.all(f,e).map(p);return g.sort((a,b)=>new Date(b.updatedAt||0)-new Date(a.updatedAt||0)),g}async function s(a){return p((await (0,d.c)()).get("SELECT * FROM proxyPools WHERE id = ?",[a]))}async function t(a){let b=await (0,d.c)(),c=new Date().toISOString(),e={id:a.id||(0,h.A)(),name:a.name,proxyUrl:a.proxyUrl,noProxy:a.noProxy||"",type:a.type||"http",isActive:void 0===a.isActive||a.isActive,strictProxy:!0===a.strictProxy,testStatus:a.testStatus||"unknown",lastTestedAt:a.lastTestedAt||null,lastError:a.lastError||null,createdAt:c,updatedAt:c};return q(b,e),e}async function u(a,b){let c=await (0,d.c)(),e=null;return c.transaction(()=>{let d=c.get("SELECT * FROM proxyPools WHERE id = ?",[a]);if(!d)return;let f={...p(d),...b,updatedAt:new Date().toISOString()};q(c,f),e=f}),e}async function v(a){let b=await (0,d.c)(),c=null;return b.transaction(()=>{let d=b.get("SELECT * FROM proxyPools WHERE id = ?",[a]);d&&(c=p(d),b.run("DELETE FROM proxyPools WHERE id = ?",[a]))}),c}var w=c(74452);function x(a){return a?{id:a.id,name:a.name,kind:a.kind,models:(0,e.q)(a.models,[]),createdAt:a.createdAt,updatedAt:a.updatedAt}:null}async function y(){return(await (0,d.c)()).all("SELECT * FROM combos ORDER BY createdAt ASC").map(x)}async function z(a){return x((await (0,d.c)()).get("SELECT * FROM combos WHERE id = ?",[a]))}async function A(a){return x((await (0,d.c)()).get("SELECT * FROM combos WHERE name = ?",[a]))}async function B(a){let b=await (0,d.c)(),c=new Date().toISOString(),f={id:(0,h.A)(),name:a.name,kind:a.kind||null,models:a.models||[],createdAt:c,updatedAt:c};return b.run("INSERT INTO combos(id, name, kind, models, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)",[f.id,f.name,f.kind,(0,e.s)(f.models),f.createdAt,f.updatedAt]),f}async function C(a,b){let c=await (0,d.c)(),f=null;return c.transaction(()=>{let d=c.get("SELECT * FROM combos WHERE id = ?",[a]);if(!d)return;let g={...x(d),...b,updatedAt:new Date().toISOString()};c.run("UPDATE combos SET name = ?, kind = ?, models = ?, updatedAt = ? WHERE id = ?",[g.name,g.kind,(0,e.s)(g.models||[]),g.updatedAt,a]),f=g}),f}async function D(a){let b=(await (0,d.c)()).run("DELETE FROM combos WHERE id = ?",[a]);return(b?.changes??0)>0}var E=c(9460),F=c(97914);let G="disabledModels";async function H(){let a=(await (0,d.c)()).all("SELECT key, value FROM kv WHERE scope = ?",[G]),b={};for(let c of a)b[c.key]=(0,e.q)(c.value,[]);return b}async function I(a,b){if(!a||!Array.isArray(b))return;let c=await (0,d.c)();c.transaction(()=>{let d=c.get("SELECT value FROM kv WHERE scope = ? AND key = ?",[G,a]),f=[...new Set([...d&&(0,e.q)(d.value,[])||[],...b])];c.run("INSERT INTO kv(scope, key, value) VALUES(?, ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value",[G,a,(0,e.s)(f)])})}async function J(a,b){if(!a)return;let c=await (0,d.c)();c.transaction(()=>{if(!Array.isArray(b)||0===b.length)return void c.run("DELETE FROM kv WHERE scope = ? AND key = ?",[G,a]);let d=c.get("SELECT value FROM kv WHERE scope = ? AND key = ?",[G,a]),f=d&&(0,e.q)(d.value,[])||[],g=new Set(b),h=f.filter(a=>!g.has(a));0===h.length?c.run("DELETE FROM kv WHERE scope = ? AND key = ?",[G,a]):c.run("INSERT INTO kv(scope, key, value) VALUES(?, ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value",[G,a,(0,e.s)(h)])})}var K=c(99703),L=c(77638);let M=null,N=0;async function O(){if(M&&Date.now()-N<5e3)return M;try{let{getSettings:a}=await Promise.resolve().then(c.bind(c,42655)),b=await a(),d="false"!==process.env.OBSERVABILITY_ENABLED;M={enabled:"boolean"==typeof b.enableObservability?b.enableObservability:d,maxRecords:b.observabilityMaxRecords||parseInt(process.env.OBSERVABILITY_MAX_RECORDS||String(200),10),batchSize:b.observabilityBatchSize||parseInt(process.env.OBSERVABILITY_BATCH_SIZE||String(20),10),flushIntervalMs:b.observabilityFlushIntervalMs||parseInt(process.env.OBSERVABILITY_FLUSH_INTERVAL_MS||String(5e3),10),maxJsonSize:1024*(b.observabilityMaxJsonSize||parseInt(process.env.OBSERVABILITY_MAX_JSON_SIZE||"5",10))}}catch{M={enabled:!1,maxRecords:200,batchSize:20,flushIntervalMs:5e3,maxJsonSize:5120}}return N=Date.now(),M}let P=[],Q=null,R=!1;function S(a,b){let c=JSON.stringify(a||{});return c.length>b?{_truncated:!0,_originalSize:c.length,_preview:c.substring(0,200)}:a||{}}async function T(){if(!R&&0!==P.length){R=!0;try{for(;P.length>0;){let a=P.splice(0,P.length),b=await (0,d.c)(),c=await O(),f=[];b.transaction(()=>{for(let d of a){d.id||(d.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}`}(d.model)),d.timestamp||(d.timestamp=new Date().toISOString()),d.request?.headers&&(d.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}(d.request.headers));let a={id:d.id,provider:d.provider||null,model:d.model||null,connectionId:d.connectionId||null,timestamp:d.timestamp,status:d.status||null,latency:d.latency||{},tokens:d.tokens||{},request:S(d.request,c.maxJsonSize),providerRequest:S(d.providerRequest,c.maxJsonSize),providerResponse:S(d.providerResponse,c.maxJsonSize),response:S(d.response,c.maxJsonSize)};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.id,a.timestamp,a.provider,a.model,a.connectionId,a.status,(0,e.s)(a)]),f.push(a)}let d=b.get("SELECT COUNT(*) as c FROM requestDetails");d&&d.c>c.maxRecords&&b.run("DELETE FROM requestDetails WHERE id IN (SELECT id FROM requestDetails ORDER BY timestamp ASC LIMIT ?)",[d.c-c.maxRecords])}),f.length>0&&await (0,L.RT)(f).catch(()=>!1)}}catch(a){console.error("[requestDetailsRepo] Batch write failed:",a)}finally{R=!1}}}async function U(a){let b=await O();b.enabled&&(P.push(a),P.length>=b.batchSize?(Q&&(clearTimeout(Q),Q=null),T().catch(a=>console.error("[requestDetailsRepo] flush err:",a))):Q||(Q=setTimeout(()=>{Q=null,T().catch(()=>{})},b.flushIntervalMs)))}async function V(a={}){let b=await (0,L.Y4)(a).catch(()=>null);if(b)return b;let c=await (0,d.c)(),f=[],g=[];a.provider&&(f.push("provider = ?"),g.push(a.provider)),a.model&&(f.push("model = ?"),g.push(a.model)),a.connectionId&&(f.push("connectionId = ?"),g.push(a.connectionId)),a.status&&(f.push("status = ?"),g.push(a.status)),a.startDate&&(f.push("timestamp >= ?"),g.push(new Date(a.startDate).toISOString())),a.endDate&&(f.push("timestamp <= ?"),g.push(new Date(a.endDate).toISOString()));let h=f.length?`WHERE ${f.join(" AND ")}`:"",i=c.get(`SELECT COUNT(*) as c FROM requestDetails ${h}`,g),j=i?i.c:0,k=a.page||1,l=a.pageSize||50,m=Math.ceil(j/l);return{details:c.all(`SELECT data FROM requestDetails ${h} ORDER BY timestamp DESC LIMIT ? OFFSET ?`,[...g,l,(k-1)*l]).map(a=>(0,e.q)(a.data,{})),pagination:{page:k,pageSize:l,totalItems:j,totalPages:m,hasNext:k<m,hasPrev:k>1}}}let W=async()=>{Q&&(clearTimeout(Q),Q=null),P.length>0&&await T()};async function X(){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,adminDisabled:1===a.adminDisabled,ownerUser:a.ownerUser||"",createdByUser:a.createdByUser||"",createdAt:a.createdAt,allowedModels:(0,e.q)(a.allowedModels,[]),limits:(0,e.q)(a.limits,{})})),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:{}};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);return f}async function Y(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')"),a.settings&&b.run(`INSERT INTO settings(id, data) VALUES(1, ?)
210
+ 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)
211
+ 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)
212
+ 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)
213
+ VALUES(?, ?, ?, ?, ?, ?)`,[a,+(!1!==d),f||"unknown",(0,e.s)(i),g||new Date().toISOString(),h||new Date().toISOString()])}for(let c of a.apiKeys||[])b.run(`INSERT OR REPLACE INTO apiKeys(id, key, name, machineId, isActive, adminDisabled, createdAt, allowedModels, limits, ownerUser, createdByUser)
214
+ VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[c.id,c.key,c.name||null,c.machineId||null,+(!1!==c.isActive),+(!0===c.adminDisabled),c.createdAt||new Date().toISOString(),(0,e.s)(Array.isArray(c.allowedModels)?c.allowedModels:[]),(0,e.s)(c.limits&&"object"==typeof c.limits&&!Array.isArray(c.limits)?c.limits:{}),String(c.ownerUser||"").trim().toLowerCase(),String(c.createdByUser||c.ownerUser||"").trim().toLowerCase()]);for(let c of a.combos||[])b.run(`INSERT OR REPLACE INTO combos(id, name, kind, models, createdAt, updatedAt)
215
+ 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||{})])}),await X()}process.off("beforeExit",W),process.off("SIGINT",W),process.off("SIGTERM",W),process.off("exit",W),process.on("beforeExit",W),process.on("SIGINT",W),process.on("SIGTERM",W),process.on("exit",W)},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.d(b,{Iq:()=>r,Lh:()=>u,PX:()=>n,Pb:()=>t,XW:()=>s,ek:()=>v,getApiKeyByKey:()=>q,mI:()=>o,yg:()=>p});var d=c(94755),e=c(36366),f=c(644),g=c(490);let h=!1;function i(a){return Array.isArray(a)?[...new Set(a.map(a=>String(a||"").trim()).filter(Boolean))]:[]}function j(a){return String(a||"").trim().toLowerCase()}async function k(a){if(!h)try{let b=a.all("PRAGMA table_info(apiKeys)"),c=new Set(b.map(a=>a.name));c.has("allowedModels")||a.run("ALTER TABLE apiKeys ADD COLUMN allowedModels TEXT DEFAULT '[]'"),c.has("limits")||a.run("ALTER TABLE apiKeys ADD COLUMN limits TEXT DEFAULT '{}'"),c.has("ownerUser")||a.run("ALTER TABLE apiKeys ADD COLUMN ownerUser TEXT DEFAULT ''"),c.has("createdByUser")||a.run("ALTER TABLE apiKeys ADD COLUMN createdByUser TEXT DEFAULT ''"),c.has("adminDisabled")||a.run("ALTER TABLE apiKeys ADD COLUMN adminDisabled INTEGER DEFAULT 0");try{a.run("CREATE INDEX IF NOT EXISTS idx_ak_key ON apiKeys(key)"),a.run("CREATE INDEX IF NOT EXISTS idx_ak_owner ON apiKeys(ownerUser)"),a.run("CREATE INDEX IF NOT EXISTS idx_ak_created_by ON apiKeys(createdByUser)"),a.run("CREATE INDEX IF NOT EXISTS idx_ak_active ON apiKeys(isActive)"),a.run("CREATE INDEX IF NOT EXISTS idx_ak_admin_disabled ON apiKeys(adminDisabled)"),a.run("CREATE INDEX IF NOT EXISTS idx_ak_created_at ON apiKeys(createdAt)")}catch{}h=!0}catch(a){console.log("Could not ensure apiKeys columns:",a?.message||a)}}function l(a={}){let b=[],c=[],d=j(a.ownerUser),e=String(a.search||"").trim().toLowerCase();if(d&&(b.push("(lower(coalesce(ownerUser, '')) = ? OR lower(coalesce(createdByUser, '')) = ?)"),c.push(d,d)),!0===a.isActive?b.push("isActive = 1"):!1===a.isActive&&b.push("(isActive = 0 OR isActive IS NULL)"),e){let a=`%${e}%`;b.push(`(
216
+ lower(coalesce(name, '')) LIKE ?
217
+ OR lower(coalesce(key, '')) LIKE ?
218
+ OR lower(coalesce(id, '')) LIKE ?
219
+ OR lower(coalesce(machineId, '')) LIKE ?
220
+ OR lower(coalesce(ownerUser, '')) LIKE ?
221
+ OR lower(coalesce(createdByUser, '')) LIKE ?
222
+ OR lower(coalesce(allowedModels, '')) LIKE ?
223
+ )`),c.push(a,a,a,a,a,a,a)}return{where:b.length?`WHERE ${b.join(" AND ")}`:"",params:c}}function m(a){return a?{id:a.id,key:a.key,name:a.name,machineId:a.machineId,isActive:1===a.isActive||!0===a.isActive,adminDisabled:1===a.adminDisabled||!0===a.adminDisabled,allowedModels:i((0,f.q)(a.allowedModels,[])),limits:(0,g.jQ)((0,f.q)(a.limits,{})),ownerUser:j(a.ownerUser),createdByUser:j(a.createdByUser),createdAt:a.createdAt}:null}async function n(a={}){let b,c,d=await (0,e.c)();await k(d);let{where:f,params:g}=l(a),h="desc"===String(a.order||"asc").toLowerCase()?"DESC":"ASC",i=!Number.isFinite(b=Number(a.limit))||b<=0?null:Math.min(500,Math.max(1,Math.floor(b))),j=!Number.isFinite(c=Number(a.offset))||c<=0?0:Math.max(0,Math.floor(c)),o=`SELECT * FROM apiKeys ${f} ORDER BY createdAt ${h}`,p=[...g];return i&&(o+=" LIMIT ? OFFSET ?",p.push(i,j)),(p.length?d.all(o,p):d.all(o)).map(m)}async function o(a={}){let b=await (0,e.c)();await k(b);let{where:c,params:d}=l(a),f=`SELECT COUNT(*) AS count FROM apiKeys ${c}`,g=d.length?b.get(f,d):b.get(f);return Number(g?.count||0)}async function p(a){let b=await (0,e.c)();return await k(b),m(b.get("SELECT * FROM apiKeys WHERE id = ?",[a]))}async function q(a){if(!a)return null;let b=await (0,e.c)();return await k(b),m(b.get("SELECT * FROM apiKeys WHERE key = ?",[a]))}async function r(a,b,h={}){if(!b)throw Error("machineId is required");let l=await (0,e.c)();await k(l);let{generateApiKeyWithMachine:m}=await c.e(6844).then(c.bind(c,86844)),n=m(b),o=j(h.ownerUser||h.createdByUser),p=j(h.createdByUser||o),q={id:(0,d.A)(),name:a,key:n.key,machineId:b,isActive:!0,adminDisabled:!1,allowedModels:i(h.allowedModels),limits:(0,g.jQ)(h.limits||{}),ownerUser:o,createdByUser:p,createdAt:new Date().toISOString()};return l.run("INSERT INTO apiKeys(id, key, name, machineId, isActive, adminDisabled, allowedModels, limits, ownerUser, createdByUser, createdAt) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",[q.id,q.key,q.name,q.machineId,1,0,(0,f.s)(q.allowedModels),(0,f.s)(q.limits),q.ownerUser,q.createdByUser,q.createdAt]),q}async function s(a,b={}){let c=await (0,e.c)();await k(c);let d=null;return c.transaction(()=>{let e=c.get("SELECT * FROM apiKeys WHERE id = ?",[a]);if(!e)return;let h={...m(e),...b};Object.prototype.hasOwnProperty.call(b,"allowedModels")&&(h.allowedModels=i(b.allowedModels)),Object.prototype.hasOwnProperty.call(b,"limits")&&(h.limits=(0,g.jQ)(b.limits||{})),Object.prototype.hasOwnProperty.call(b,"ownerUser")&&(h.ownerUser=j(b.ownerUser)),Object.prototype.hasOwnProperty.call(b,"createdByUser")&&(h.createdByUser=j(b.createdByUser)),c.run("UPDATE apiKeys SET key = ?, name = ?, machineId = ?, isActive = ?, adminDisabled = ?, allowedModels = ?, limits = ?, ownerUser = ?, createdByUser = ? WHERE id = ?",[h.key,h.name,h.machineId,+!!h.isActive,+!!h.adminDisabled,(0,f.s)(h.allowedModels||[]),(0,f.s)(h.limits||{}),h.ownerUser||"",h.createdByUser||"",a]),d=h}),d}async function t(a,b){if(!a)return null;if(!b)throw Error("machineId is required");let d=await (0,e.c)();if(await k(d),!d.get("SELECT * FROM apiKeys WHERE id = ?",[a]))return null;let{generateApiKeyWithMachine:f}=await c.e(6844).then(c.bind(c,86844));for(let c=0;c<5;c+=1){let e=f(b);try{return d.run("UPDATE apiKeys SET key = ?, machineId = ? WHERE id = ?",[e.key,b,a]),m(d.get("SELECT * FROM apiKeys WHERE id = ?",[a]))}catch(a){if(String(a?.message||a||"").toLowerCase().includes("unique")&&c<4)continue;throw a}}throw Error("Failed to generate a unique API key")}async function u(a){let b=await (0,e.c)();await k(b);let c=b.run("DELETE FROM apiKeys WHERE id = ?",[a]);return(c?.changes??0)>0}async function v(a){let b=await (0,e.c)();await k(b);let c=b.get("SELECT isActive FROM apiKeys WHERE key = ?",[a]);return!!c&&(1===c.isActive||!0===c.isActive)}},77638:(a,b,c)=>{"use strict";c.d(b,{RT:()=>v,Y4:()=>w,zW:()=>u});var d=c(55511),e=c.n(d),f=c(45903),g=c(644);let h=Number(process.env.OBSERVABILITY_MYSQL_MAX_JSON_BYTES||262144),i={expiresAt:0,value:null},j=!1,k=new Set;function l(a,b){k.has(a)||(k.add(a),console.warn(b))}function m(a){return String(a??"").trim()}function n(a,b=0){let c=Number(a);return Number.isFinite(c)?c:b}function o(a){let b=a?new Date(a):new Date;return(Number.isNaN(b.getTime())?new Date().toISOString():b.toISOString()).replace("T"," ").replace("Z","")}function p(a){if(null==a)return null;if("string"==typeof a)try{return JSON.parse(a),a}catch{return JSON.stringify(a)}return(0,g.s)(a)}function q(a){if(null==a)return{};let b=p(a)||"{}";return Buffer.byteLength(b,"utf8")<=h?a:{_truncated:!0,_originalSizeBytes:Buffer.byteLength(b,"utf8"),_preview:b.slice(0,1e3)}}async function r(){let a=Date.now();if(i.value&&i.expiresAt>a)return i.value;try{let b=(0,f.I6)(await (0,f.L7)());i={value:!0===b.enabled&&"mysql"===b.type&&"false"!==process.env.OBSERVABILITY_MYSQL_ENABLED?b:null,expiresAt:a+5e3}}catch(b){l("config",`[observability-mysql] Unable to read MySQL log config: ${b?.message||b}`),i={value:null,expiresAt:a+5e3}}return i.value}async function s(a){return(await c.e(8491).then(c.t.bind(c,38491,19))).createConnection({host:a.host,port:Number(a.port||3306),database:a.database,user:a.username,password:a.password,ssl:a.ssl?{}:void 0,multipleStatements:!0,dateStrings:!0})}async function t(a){j||(await a.query(`
224
+ CREATE TABLE IF NOT EXISTS usage_events (
225
+ id BIGINT AUTO_INCREMENT PRIMARY KEY,
226
+ dedupe_key VARCHAR(96) NOT NULL,
227
+ created_at DATETIME(3) NOT NULL,
228
+ timestamp DATETIME(3) NOT NULL,
229
+ provider VARCHAR(120),
230
+ model VARCHAR(255),
231
+ connection_id VARCHAR(120),
232
+ api_key_fingerprint VARCHAR(120),
233
+ api_key_id VARCHAR(120),
234
+ api_key_name VARCHAR(255),
235
+ api_key_owner VARCHAR(255),
236
+ endpoint TEXT,
237
+ request_id VARCHAR(120),
238
+ session_id VARCHAR(255),
239
+ client_ip VARCHAR(64),
240
+ client_ip_normalized VARCHAR(64),
241
+ client_host TEXT,
242
+ client_user_agent TEXT,
243
+ source_tool VARCHAR(80),
244
+ source_tool_label VARCHAR(120),
245
+ source_host VARCHAR(255),
246
+ latency_ms INT DEFAULT 0,
247
+ ttft_ms INT DEFAULT 0,
248
+ status_code INT,
249
+ error_code VARCHAR(160),
250
+ error_type VARCHAR(120),
251
+ error_message_short TEXT,
252
+ is_streaming TINYINT DEFAULT 0,
253
+ is_combo TINYINT DEFAULT 0,
254
+ combo_name VARCHAR(255),
255
+ prompt_tokens BIGINT DEFAULT 0,
256
+ completion_tokens BIGINT DEFAULT 0,
257
+ total_tokens BIGINT DEFAULT 0,
258
+ cached_tokens BIGINT DEFAULT 0,
259
+ reasoning_tokens BIGINT DEFAULT 0,
260
+ cost DECIMAL(18,8) DEFAULT 0,
261
+ status VARCHAR(80),
262
+ tokens_json JSON,
263
+ meta_json JSON,
264
+ UNIQUE KEY uq_usage_events_dedupe (dedupe_key),
265
+ INDEX idx_usage_events_ts (timestamp),
266
+ INDEX idx_usage_events_provider_model (provider, model, timestamp),
267
+ INDEX idx_usage_events_status (status, status_code, timestamp),
268
+ INDEX idx_usage_events_api_key (api_key_id, api_key_fingerprint, timestamp),
269
+ INDEX idx_usage_events_client_ip (client_ip_normalized, timestamp),
270
+ INDEX idx_usage_events_source_tool (source_tool, timestamp),
271
+ INDEX idx_usage_events_session (session_id, timestamp)
272
+ ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
273
+
274
+ CREATE TABLE IF NOT EXISTS request_details (
275
+ id VARCHAR(180) PRIMARY KEY,
276
+ created_at DATETIME(3) NOT NULL,
277
+ timestamp DATETIME(3) NOT NULL,
278
+ provider VARCHAR(120),
279
+ model VARCHAR(255),
280
+ connection_id VARCHAR(120),
281
+ status VARCHAR(80),
282
+ data_json JSON NOT NULL,
283
+ data_size_bytes BIGINT DEFAULT 0,
284
+ INDEX idx_request_details_ts (timestamp),
285
+ INDEX idx_request_details_provider (provider, timestamp),
286
+ INDEX idx_request_details_model (model, timestamp),
287
+ INDEX idx_request_details_connection (connection_id, timestamp),
288
+ INDEX idx_request_details_status (status, timestamp)
289
+ ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
290
+ `),j=!0)}async function u(a={}){let b,c=await r();if(!c)return!1;try{var d;let f;b=await s(c),await t(b);let g=(d=a.requestId?{requestId:a.requestId,provider:a.provider,model:a.model,status:a.status}:{timestamp:a.timestamp,provider:a.provider,model:a.model,connectionId:a.connectionId,status:a.status,tokens:a.tokens},f=p(d)||"",`usage:${e().createHash("sha256").update(f).digest("hex")}`);return await b.query(`INSERT INTO usage_events (
291
+ dedupe_key, created_at, timestamp, provider, model, connection_id,
292
+ api_key_fingerprint, api_key_id, api_key_name, api_key_owner,
293
+ endpoint, request_id, session_id, client_ip, client_ip_normalized, client_host, client_user_agent,
294
+ source_tool, source_tool_label, source_host, latency_ms, ttft_ms, status_code,
295
+ error_code, error_type, error_message_short, is_streaming, is_combo, combo_name,
296
+ prompt_tokens, completion_tokens, total_tokens, cached_tokens, reasoning_tokens, cost,
297
+ status, tokens_json, meta_json
298
+ ) VALUES (
299
+ ?, NOW(3), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, CAST(? AS JSON), CAST(? AS JSON)
300
+ ) ON DUPLICATE KEY UPDATE
301
+ timestamp = VALUES(timestamp),
302
+ provider = VALUES(provider),
303
+ model = VALUES(model),
304
+ connection_id = VALUES(connection_id),
305
+ api_key_fingerprint = VALUES(api_key_fingerprint),
306
+ api_key_id = VALUES(api_key_id),
307
+ api_key_name = VALUES(api_key_name),
308
+ api_key_owner = VALUES(api_key_owner),
309
+ endpoint = VALUES(endpoint),
310
+ session_id = VALUES(session_id),
311
+ client_ip = VALUES(client_ip),
312
+ client_ip_normalized = VALUES(client_ip_normalized),
313
+ source_tool = VALUES(source_tool),
314
+ source_tool_label = VALUES(source_tool_label),
315
+ source_host = VALUES(source_host),
316
+ latency_ms = VALUES(latency_ms),
317
+ ttft_ms = VALUES(ttft_ms),
318
+ status_code = VALUES(status_code),
319
+ error_code = VALUES(error_code),
320
+ error_type = VALUES(error_type),
321
+ error_message_short = VALUES(error_message_short),
322
+ prompt_tokens = VALUES(prompt_tokens),
323
+ completion_tokens = VALUES(completion_tokens),
324
+ total_tokens = VALUES(total_tokens),
325
+ cached_tokens = VALUES(cached_tokens),
326
+ reasoning_tokens = VALUES(reasoning_tokens),
327
+ cost = VALUES(cost),
328
+ status = VALUES(status),
329
+ tokens_json = VALUES(tokens_json),
330
+ meta_json = VALUES(meta_json)`,[g,o(a.timestamp),m(a.provider)||null,m(a.model)||null,m(a.connectionId)||null,m(a.apiKeyFingerprint||a.apiKey)||null,m(a.apiKeyId)||null,m(a.apiKeyName)||null,m(a.apiKeyOwner)||null,m(a.endpoint)||null,m(a.requestId)||null,m(a.sessionId)||null,m(a.clientIp)||null,m(a.clientIpNormalized)||null,m(a.clientHost)||null,m(a.clientUserAgent)||null,m(a.sourceTool)||null,m(a.sourceToolLabel)||null,m(a.sourceHost)||null,n(a.latencyMs,0),n(a.ttftMs,0),null==a.statusCode?null:n(a.statusCode,null),m(a.errorCode)||null,m(a.errorType)||null,m(a.errorMessageShort)||null,+!!a.isStreaming,+!!a.isCombo,m(a.comboName)||null,n(a.promptTokens,0),n(a.completionTokens,0),n(a.totalTokens,0),n(a.cachedTokens,0),n(a.reasoningTokens,0),n(a.cost,0),m(a.status)||null,p(a.tokens||{}),p(a.meta||{})]),!0}catch(a){return l("usage-write",`[observability-mysql] Failed to write usage_events: ${a?.message||a}`),!1}finally{b&&await b.end().catch(()=>{})}}async function v(a=[]){let b,c=await r();if(!c||!Array.isArray(a)||0===a.length)return!1;try{for(let d of(b=await s(c),await t(b),a)){let a={...d,request:q(d.request),providerRequest:q(d.providerRequest),providerResponse:q(d.providerResponse),response:q(d.response)},c=p(a)||"{}";await b.query(`INSERT INTO request_details (
331
+ id, created_at, timestamp, provider, model, connection_id, status, data_json, data_size_bytes
332
+ ) VALUES (?, NOW(3), ?, ?, ?, ?, ?, CAST(? AS JSON), ?)
333
+ ON DUPLICATE KEY UPDATE
334
+ timestamp = VALUES(timestamp),
335
+ provider = VALUES(provider),
336
+ model = VALUES(model),
337
+ connection_id = VALUES(connection_id),
338
+ status = VALUES(status),
339
+ data_json = VALUES(data_json),
340
+ data_size_bytes = VALUES(data_size_bytes)`,[m(a.id),o(a.timestamp),m(a.provider)||null,m(a.model)||null,m(a.connectionId)||null,m(a.status)||null,c,Buffer.byteLength(c,"utf8")])}return!0}catch(a){return l("request-details-write",`[observability-mysql] Failed to write request_details: ${a?.message||a}`),!1}finally{b&&await b.end().catch(()=>{})}}async function w(a={}){let b,c=await r();if(!c)return null;try{b=await s(c),await t(b);let d=[],e=[];a.provider&&(d.push("provider = ?"),e.push(a.provider)),a.model&&(d.push("model = ?"),e.push(a.model)),a.connectionId&&(d.push("connection_id = ?"),e.push(a.connectionId)),a.status&&(d.push("status = ?"),e.push(a.status)),a.startDate&&(d.push("timestamp >= ?"),e.push(o(a.startDate))),a.endDate&&(d.push("timestamp <= ?"),e.push(o(a.endDate)));let f=d.length?`WHERE ${d.join(" AND ")}`:"",[[h]]=await b.query(`SELECT COUNT(*) AS c FROM request_details ${f}`,e),i=Number(h?.c||0),j=Math.max(1,Number(a.page)||1),k=Math.max(1,Math.min(100,Number(a.pageSize)||50)),l=Math.ceil(i/k),[m]=await b.query(`SELECT data_json FROM request_details ${f} ORDER BY timestamp DESC LIMIT ? OFFSET ?`,[...e,k,(j-1)*k]);return{details:m.map(a=>(0,g.q)("string"==typeof a.data_json?a.data_json:(0,g.s)(a.data_json),{})),pagination:{page:j,pageSize:k,totalItems:i,totalPages:l,hasNext:j<l,hasPrev:j>1},dbInfo:{type:"mysql",host:c.host,database:c.database}}}catch(a){return l("request-details-read",`[observability-mysql] Failed to read request_details: ${a?.message||a}`),null}finally{b&&await b.end().catch(()=>{})}}},78335:()=>{},89718:(a,b,c)=>{"use strict";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,Uv:()=>d.Uv,VT:()=>d.VT,XW:()=>d.XW,Xx:()=>d.Xx,Yd:()=>d.Yd,ZO:()=>d.ZO,c:()=>d.c,ek:()=>d.ek,fK:()=>d.fK,fv:()=>d.fv,getProviderConnections:()=>d.P,ho:()=>d.ho,hr:()=>d.hr,i0:()=>d.i0,iE:()=>d.iE,jd:()=>d.jd,mY:()=>d.mY,mt:()=>d.mt,o5:()=>d.o5,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(56403)},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.DATA_DIR,"db"),j=e().join(i,"data.sqlite"),k=e().join(i,"backups"),l={main:e().join(h.DATA_DIR,"db.json"),usage:e().join(h.DATA_DIR,"usage.json"),disabled:e().join(h.DATA_DIR,"disabledModels.json"),details:e().join(h.DATA_DIR,"request-details.json")};function m(){for(let a of[h.DATA_DIR,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(7341).then(c.bind(c,57341)),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(7341).then(c.bind(c,57341));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(),{}}},99703:(a,b,c)=>{"use strict";c.d(b,{BY:()=>F,E5:()=>H,Py:()=>D,Zx:()=>I,_V:()=>m,j$:()=>G,rg:()=>C,sZ:()=>E,uw:()=>B});var d=c(94735),e=c(36366),f=c(644);c(62674);var g=c(77638);global._pendingRequests||(global._pendingRequests={byModel:{},byAccount:{}}),global._lastErrorProvider||(global._lastErrorProvider={provider:"",ts:0}),global._statsEmitter||(global._statsEmitter=new d.EventEmitter,global._statsEmitter.setMaxListeners(50)),global._pendingTimers||(global._pendingTimers={}),global._recentRing||(global._recentRing={items:[],initialized:!1}),global._connectionMapCache||(global._connectionMapCache={map:{},ts:0});let h=global._pendingRequests,i=global._lastErrorProvider,j=global._pendingTimers,k=global._recentRing,l=global._connectionMapCache,m=global._statsEmitter;function n(a){return String(a||"").trim()}function o(a){return n(a).toLowerCase()}function p(a,b=0){let c=Number(a);return Number.isFinite(c)?c:b}function q(a){let b=n(a);return b?b.length<=12?b:`${b.slice(0,8)}...${b.slice(-4)}`:"local-no-key"}function r(a,b){let c=o(a),d=Number(b);return Number.isFinite(d)&&d>=400?c||"error":c||(Number.isFinite(d),"ok")}function s(a){return["pending","running","in_progress","queued","processing"].includes(o(a))}function t(a,b){let c,d=o(a);if(c=o(d),/^(?:error|fail|failed|timeout|network|aborted|abort|rate_limited|provider_error|gateway_error|parse_error|model_error)(?:\b|[\s_-]|$)/.test(c))return!1;let e=Number(b);if(Number.isFinite(e))return e>=200&&e<300;let f=r(a);return!!["ok","success","succeeded","complete","completed","done","200"].includes(f)||/^(?:2\d\d|ok|success|succeeded|complete|completed|done)(?:\b|[\s_-]|$)/.test(f)}function u(a){let b=a?new Date(a):new Date;return`${b.getFullYear()}-${String(b.getMonth()+1).padStart(2,"0")}-${String(b.getDate()).padStart(2,"0")}`}function v(a,b,c){b&&(a[b]||(a[b]={requests:0,promptTokens:0,completionTokens:0,cost:0}),a[b].requests+=c.requests||1,a[b].promptTokens+=c.promptTokens||0,a[b].completionTokens+=c.completionTokens||0,a[b].cost+=c.cost||0,c.meta&&Object.assign(a[b],c.meta))}async function w(){if(Date.now()-l.ts<3e4)return l.map;try{let{getProviderConnections:a}=await Promise.resolve().then(c.bind(c,5781)),b=await a(),d={};for(let a of b)d[a.id]=a.name||a.email||a.id;l.map=d,l.ts=Date.now()}catch{}return l.map}async function x(){if(!k.initialized){k.initialized=!0;try{k.items=(await (0,e.c)()).all(`SELECT timestamp, provider, model, connectionId, apiKey, apiKeyFingerprint, endpoint, cost, status, statusCode, tokens
341
+ FROM usageHistory ORDER BY id DESC LIMIT ?`,[50]).reverse().map(a=>({timestamp:a.timestamp,provider:a.provider,model:a.model,connectionId:a.connectionId,apiKey:a.apiKeyFingerprint||a.apiKey,endpoint:a.endpoint,cost:a.cost,status:a.status,statusCode:a.statusCode,tokens:(0,f.q)(a.tokens,{})}))}catch{}}}async function y(a,b,d){if(!d||!a||!b)return 0;try{let{getPricingForModel:e}=await Promise.resolve().then(c.bind(c,97914)),f=await e(a,b);if(!f)return 0;let g=0,h=d.prompt_tokens||d.input_tokens||0,i=d.cached_tokens||d.cache_read_input_tokens||0,j=Math.max(0,h-i);g+=j*(f.input/1e6),i>0&&(g+=i*((f.cached||f.input)/1e6));let k=d.completion_tokens||d.output_tokens||0;g+=k*(f.output/1e6);let l=d.reasoning_tokens||0;l>0&&(g+=l*((f.reasoning||f.output)/1e6));let m=d.cache_creation_input_tokens||0;return m>0&&(g+=m*((f.cache_creation||f.input)/1e6)),g}catch(a){return console.error("Error calculating cost:",a),0}}async function z(a){let b=n(a);if(!b)return{apiKeyId:"",apiKeyFingerprint:"local-no-key",apiKeyName:"Local / kh\xf4ng d\xf9ng API key",apiKeyOwner:""};let d=q(b);try{let{getApiKeyByKey:a}=await Promise.resolve().then(c.bind(c,74452)),e=await a(b);if(e)return{apiKeyId:e.id||"",apiKeyFingerprint:d,apiKeyName:e.name||d,apiKeyOwner:e.ownerUser||e.createdByUser||""}}catch{}return{apiKeyId:"",apiKeyFingerprint:d,apiKeyName:d,apiKeyOwner:""}}function A(a,b,c,d,e,f,g){a.run(`INSERT INTO ${b}(
342
+ bucket, dimension, key, requests, success, errors, promptTokens, completionTokens,
343
+ totalTokens, cachedTokens, reasoningTokens, cost, lastSeen
344
+ ) VALUES(?, ?, ?, 1, ?, ?, ?, ?, ?, ?, ?, ?, ?)
345
+ ON CONFLICT(bucket, dimension, key) DO UPDATE SET
346
+ requests = requests + 1,
347
+ success = success + excluded.success,
348
+ errors = errors + excluded.errors,
349
+ promptTokens = promptTokens + excluded.promptTokens,
350
+ completionTokens = completionTokens + excluded.completionTokens,
351
+ totalTokens = totalTokens + excluded.totalTokens,
352
+ cachedTokens = cachedTokens + excluded.cachedTokens,
353
+ reasoningTokens = reasoningTokens + excluded.reasoningTokens,
354
+ cost = cost + excluded.cost,
355
+ lastSeen = CASE WHEN excluded.lastSeen > COALESCE(lastSeen, '') THEN excluded.lastSeen ELSE lastSeen END`,[c,d,e,+!!g,+!g,f.promptTokens,f.completionTokens,f.totalTokens,f.cachedTokens,f.reasoningTokens,f.cost||0,f.timestamp])}function B(a,b,c,d,e=!1){let f=b?`${a} (${b})`:a,g=`${c}|${f}`;h.byModel[f]||(h.byModel[f]=0),h.byModel[f]=Math.max(0,h.byModel[f]+(d?1:-1)),0===h.byModel[f]&&delete h.byModel[f],c&&(h.byAccount[c]||(h.byAccount[c]={}),h.byAccount[c][f]||(h.byAccount[c][f]=0),h.byAccount[c][f]=Math.max(0,h.byAccount[c][f]+(d?1:-1)),0===h.byAccount[c][f]&&(delete h.byAccount[c][f],0===Object.keys(h.byAccount[c]).length&&delete h.byAccount[c])),d?(clearTimeout(j[g]),j[g]=setTimeout(()=>{delete j[g],h.byModel[f]>0&&(h.byModel[f]=0),c&&h.byAccount[c]?.[f]>0&&(h.byAccount[c][f]=0),m.emit("pending")},6e4)):(clearTimeout(j[g]),delete j[g]),!d&&e&&b&&(i.provider=b.toLowerCase(),i.ts=Date.now()),m.emit("pending")}async function C(){let a=[],b=await w();for(let[c,d]of Object.entries(h.byAccount))for(let[e,f]of Object.entries(d))if(f>0){let d=b[c]||`Account ${c.slice(0,8)}...`,g=e.match(/^(.*) \((.*)\)$/);a.push({model:g?g[1]:e,provider:g?g[2]:"unknown",account:d,count:f})}return await x(),{activeRequests:a,recentRequests:[...k.items].sort((a,b)=>new Date(b.timestamp)-new Date(a.timestamp)).map(a=>{let b=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,status:a.status||"ok"}}).slice(0,20),errorProvider:Date.now()-i.ts<1e4?i.provider:""}}async function D(a={}){try{if(s(a?.status))return null;let b=await (0,e.c)(),c=await z(a.apiKey),d=function(a={},b={}){let c,d=a.timestamp||new Date().toISOString(),e=a.tokens&&"object"==typeof a.tokens?a.tokens:{},f=p(a.promptTokens,e.prompt_tokens??e.input_tokens??0),g=p(a.completionTokens,e.completion_tokens??e.output_tokens??0),h=p(a.cachedTokens,e.cached_tokens??e.cache_read_input_tokens??e.prompt_tokens_details?.cached_tokens??0),i=p(a.reasoningTokens,e.reasoning_tokens??e.completion_tokens_details?.reasoning_tokens??0),j=p(a.totalTokens,f+g),k=null==a.statusCode?null:p(a.statusCode,null),l=r(a.status,k),m=n(a.clientIp||a.sourceIp),o=(c=n(a.clientIpNormalized||m))?c.split(",")[0].trim().replace(/^::ffff:/,""):"",s=a.meta&&"object"==typeof a.meta?a.meta:{};return{timestamp:d,provider:n(a.provider)||"unknown",model:n(a.model)||"unknown",connectionId:n(a.connectionId),apiKey:b.apiKeyFingerprint||q(a.apiKey),apiKeyId:b.apiKeyId||n(a.apiKeyId),apiKeyFingerprint:b.apiKeyFingerprint||n(a.apiKeyFingerprint)||q(a.apiKey),apiKeyName:b.apiKeyName||n(a.apiKeyName),apiKeyOwner:b.apiKeyOwner||n(a.apiKeyOwner),endpoint:n(a.endpoint),requestId:n(a.requestId||s.requestId),sessionId:n(a.sessionId||s.sessionId),clientIp:m,clientIpNormalized:o,clientHost:n(a.clientHost||s.clientHost),clientUserAgent:n(a.clientUserAgent||s.clientUserAgent),sourceTool:n(a.sourceTool||s.sourceTool),sourceToolLabel:n(a.sourceToolLabel||s.sourceToolLabel),sourceHost:n(a.sourceHost||s.sourceHost),latencyMs:p(a.latencyMs??s.latencyMs,0),ttftMs:p(a.ttftMs??s.ttftMs,0),statusCode:k,errorCode:n(a.errorCode||s.errorCode),errorType:n(a.errorType||s.errorType),errorMessageShort:function(a,b=500){let c=n(a).replace(/\s+/g," ");return c.length>b?`${c.slice(0,b-1)}…`:c}(a.errorMessageShort||a.errorMessage||s.errorMessageShort||s.errorMessage),isStreaming:+!!a.isStreaming,isCombo:+!!a.isCombo,comboName:n(a.comboName||s.comboName),promptTokens:f,completionTokens:g,totalTokens:j,cachedTokens:h,reasoningTokens:i,cost:p(a.cost,0),status:l,tokens:{prompt_tokens:f,completion_tokens:g,cached_tokens:h,reasoning_tokens:i},meta:{...s,apiKeyFingerprint:b.apiKeyFingerprint||n(a.apiKeyFingerprint)||q(a.apiKey),apiKeyId:b.apiKeyId||n(a.apiKeyId)}}}(a,c);return d.cost||(d.cost=await y(d.provider,d.model,d.tokens)),b.transaction(()=>{let a,c,e,g,h,i,j,k,l;b.run(`INSERT INTO usageHistory(
356
+ timestamp, provider, model, connectionId, apiKey, apiKeyId, apiKeyFingerprint, apiKeyName, apiKeyOwner,
357
+ endpoint, requestId, sessionId, clientIp, clientIpNormalized, clientHost, clientUserAgent,
358
+ sourceTool, sourceToolLabel, sourceHost, latencyMs, ttftMs, statusCode, errorCode,
359
+ errorType, errorMessageShort, isStreaming, isCombo, comboName, promptTokens, completionTokens,
360
+ totalTokens, cachedTokens, reasoningTokens, cost, status, tokens, meta
361
+ ) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[d.timestamp,d.provider||null,d.model||null,d.connectionId||null,d.apiKey||null,d.apiKeyId||null,d.apiKeyFingerprint||null,d.apiKeyName||null,d.apiKeyOwner||null,d.endpoint||null,d.requestId||null,d.sessionId||null,d.clientIp||null,d.clientIpNormalized||null,d.clientHost||null,d.clientUserAgent||null,d.sourceTool||null,d.sourceToolLabel||null,d.sourceHost||null,d.latencyMs||0,d.ttftMs||0,d.statusCode,d.errorCode||null,d.errorType||null,d.errorMessageShort||null,+!!d.isStreaming,+!!d.isCombo,d.comboName||null,d.promptTokens||0,d.completionTokens||0,d.totalTokens||0,d.cachedTokens||0,d.reasoningTokens||0,d.cost||0,d.status||"ok",(0,f.s)(d.tokens||{}),(0,f.s)(d.meta||{})]);let m=u(d.timestamp),n=b.get("SELECT data FROM usageDaily WHERE dateKey = ?",[m]),o=n?(0,f.q)(n.data,{}):{requests:0,promptTokens:0,completionTokens:0,cost:0,byProvider:{},byModel:{},byAccount:{},byApiKey:{},byEndpoint:{}};a=d.promptTokens||d.tokens?.prompt_tokens||d.tokens?.input_tokens||0,c=d.completionTokens||d.tokens?.completion_tokens||d.tokens?.output_tokens||0,e=d.cost||0,g={promptTokens:a,completionTokens:c,cost:e},o.requests=(o.requests||0)+1,o.promptTokens=(o.promptTokens||0)+a,o.completionTokens=(o.completionTokens||0)+c,o.cost=(o.cost||0)+e,o.byProvider||={},o.byModel||={},o.byAccount||={},o.byApiKey||={},o.byEndpoint||={},d.provider&&v(o.byProvider,d.provider,g),h=d.provider?`${d.model}|${d.provider}`:d.model,v(o.byModel,h,{...g,meta:{rawModel:d.model,provider:d.provider}}),d.connectionId&&v(o.byAccount,d.connectionId,{...g,meta:{rawModel:d.model,provider:d.provider}}),i=d.apiKeyFingerprint||d.apiKey||"local-no-key",j=`${i}|${d.model}|${d.provider||"unknown"}`,v(o.byApiKey,j,{...g,meta:{rawModel:d.model,provider:d.provider,apiKey:i,apiKeyFingerprint:i,apiKeyId:d.apiKeyId||""}}),k=d.endpoint||"Unknown",l=`${k}|${d.model}|${d.provider||"unknown"}`,v(o.byEndpoint,l,{...g,meta:{endpoint:k,rawModel:d.model,provider:d.provider}}),b.run("INSERT INTO usageDaily(dateKey, data) VALUES(?, ?) ON CONFLICT(dateKey) DO UPDATE SET data = excluded.data",[m,(0,f.s)(o)]),function(a,b){var c;let d,e,f=t(b.status,b.statusCode),g=((d=(c=b.timestamp)?new Date(c):new Date).setMinutes(0,0,0),d.toISOString()),h=u(b.timestamp);for(let[c,d]of(e=[["all","all"],["provider",b.provider||"unknown"],["model",b.model||"unknown"],["providerModel",`${b.provider||"unknown"}|${b.model||"unknown"}`],["connection",b.connectionId||"unknown"],["apiKey",b.apiKeyId||b.apiKeyFingerprint||"local-no-key"],["clientIp",b.clientIpNormalized||"unknown"],["sourceTool",b.sourceTool||b.sourceToolLabel||"unknown"],["session",b.sessionId||"unknown"],["endpoint",b.endpoint||"unknown"],["status",b.status||"unknown"]],b.errorType&&e.push(["errorType",b.errorType]),b.isCombo&&b.comboName&&e.push(["combo",b.comboName]),e.filter(([,a])=>!0)))A(a,"usageHourlyRollup",g,c,d,b,f),A(a,"usageDailyRollup",h,c,d,b,f)}(b,d);let p=b.get("SELECT value FROM _meta WHERE key = 'totalRequestsLifetime'"),q=(p?parseInt(p.value,10):0)+1;b.run("INSERT INTO _meta(key, value) VALUES('totalRequestsLifetime', ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value",[String(q)])}),await (0,g.zW)(d).catch(()=>!1),k.items.push(d),k.items.length>50&&(k.items=k.items.slice(-50)),m.emit("update"),d}catch(a){return console.error("Failed to save request lifecycle:",a),null}}async function E(a){let b=r(a?.status,a?.statusCode);if(s(b))return null;let c=a?.tokens||{},d=c.prompt_tokens??c.input_tokens??a?.promptTokens??0,e=c.completion_tokens??c.output_tokens??a?.completionTokens??0;return(n(a?.status)||a?.statusCode!==void 0&&a?.statusCode!==null)&&!t(b,a?.statusCode)||0!==d||0!==e?D({...a,status:a?.status||"ok"}):null}async function F(a="all"){let b=await (0,e.c)(),c={totalRequests:0,totalPromptTokens:0,totalCompletionTokens:0,totalCost:0,byProvider:{},byModel:{},byAccount:{},byApiKey:{},byEndpoint:{},last10Minutes:[],pending:h,activeRequests:(await C()).activeRequests,recentRequests:(await C()).recentRequests,errorProvider:Date.now()-i.ts<1e4?i.provider:""},d="today"===a?new Date().setHours(0,0,0,0):"24h"===a?Date.now()-864e5:null,f=d?[new Date(d).toISOString()]:[];for(let a of b.all(`SELECT provider, model, connectionId, apiKeyFingerprint, endpoint, COUNT(*) AS requests,
362
+ SUM(promptTokens) AS promptTokens, SUM(completionTokens) AS completionTokens, SUM(cost) AS cost, MAX(timestamp) AS lastUsed
363
+ FROM usageHistory ${d?"WHERE timestamp >= ?":""}
364
+ GROUP BY provider, model, connectionId, apiKeyFingerprint, endpoint`,f))c.totalRequests+=a.requests||0,c.totalPromptTokens+=a.promptTokens||0,c.totalCompletionTokens+=a.completionTokens||0,c.totalCost+=a.cost||0,v(c.byProvider,a.provider||"unknown",{requests:a.requests,promptTokens:a.promptTokens,completionTokens:a.completionTokens,cost:a.cost}),v(c.byModel,`${a.model||"unknown"} (${a.provider||"unknown"})`,{requests:a.requests,promptTokens:a.promptTokens,completionTokens:a.completionTokens,cost:a.cost,meta:{rawModel:a.model,provider:a.provider,lastUsed:a.lastUsed}}),a.connectionId&&v(c.byAccount,a.connectionId,{requests:a.requests,promptTokens:a.promptTokens,completionTokens:a.completionTokens,cost:a.cost,meta:{connectionId:a.connectionId,lastUsed:a.lastUsed}}),v(c.byApiKey,a.apiKeyFingerprint||"local-no-key",{requests:a.requests,promptTokens:a.promptTokens,completionTokens:a.completionTokens,cost:a.cost,meta:{apiKey:a.apiKeyFingerprint||"local-no-key",lastUsed:a.lastUsed}}),v(c.byEndpoint,a.endpoint||"Unknown",{requests:a.requests,promptTokens:a.promptTokens,completionTokens:a.completionTokens,cost:a.cost,meta:{endpoint:a.endpoint||"Unknown",lastUsed:a.lastUsed}});let g=new Date,j=new Date(6e4*Math.floor(g.getTime()/6e4)),k=new Date(j.getTime()-54e4),l={};for(let a=0;a<10;a++){let b=j.getTime()-(9-a)*6e4;l[b]={requests:0,promptTokens:0,completionTokens:0,cost:0},c.last10Minutes.push(l[b])}for(let a of b.all("SELECT timestamp, promptTokens, completionTokens, cost FROM usageHistory WHERE timestamp >= ? AND timestamp <= ?",[k.toISOString(),g.toISOString()])){let b=6e4*Math.floor(new Date(a.timestamp).getTime()/6e4);l[b]&&(l[b].requests++,l[b].promptTokens+=a.promptTokens||0,l[b].completionTokens+=a.completionTokens||0,l[b].cost+=a.cost||0)}return c}async function G(a="7d"){let b=await (0,e.c)(),c=Date.now(),d="today"===a||"24h"===a?24:"7d"===a?7:"30d"===a?30:60,f="today"===a||"24h"===a?36e5:864e5,g="today"===a?new Date(new Date().setHours(0,0,0,0)).getTime():c-d*f,h=b.all("SELECT timestamp, promptTokens, completionTokens, cost FROM usageHistory WHERE timestamp >= ?",[new Date(g).toISOString()]),i=Array.from({length:d},(a,b)=>{let c=g+b*f;return{label:36e5===f?new Date(c).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",hour12:!1}):new Date(c).toLocaleDateString("en-US",{month:"short",day:"numeric"}),tokens:0,cost:0}});for(let a of h){let b=Math.min(d-1,Math.max(0,Math.floor((new Date(a.timestamp).getTime()-g)/f)));i[b].tokens+=(a.promptTokens||0)+(a.completionTokens||0),i[b].cost+=a.cost||0}return i}async function H(a={}){if(!a||!(a.tokens||a.status||a.error))return null;let b=a.error?"error":a.status||"ok";return s(b)||!a.error&&t(b,a.statusCode)?null:D({provider:a.provider||"unknown",model:a.model||"unknown",connectionId:a.connectionId,endpoint:a.endpoint,tokens:a.tokens||{},status:b,statusCode:a.statusCode,errorMessage:a.error||a.errorMessage,meta:a})}async function I(a=100){return(await (0,e.c)()).all(`SELECT timestamp, provider, model, connectionId, apiKeyFingerprint, endpoint, status, statusCode, errorMessageShort, promptTokens, completionTokens, cost
365
+ FROM usageHistory ORDER BY id DESC LIMIT ?`,[Number(a)||100]).map(a=>({...a,apiKey:a.apiKeyFingerprint}))}}};