@jheavenknows/bluerouter 3.0.5 → 3.0.6

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 (419) hide show
  1. package/app/.next-cli-build/BUILD_ID +1 -1
  2. package/app/.next-cli-build/app-path-routes-manifest.json +5 -5
  3. package/app/.next-cli-build/build-manifest.json +2 -2
  4. package/app/.next-cli-build/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  5. package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page_client-reference-manifest.js +1 -1
  6. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page_client-reference-manifest.js +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page_client-reference-manifest.js +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  32. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  33. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  34. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  35. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  36. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  37. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  38. package/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  39. package/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  40. package/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  41. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  42. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  43. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  44. package/app/.next-cli-build/server/app/_not-found.rsc +3 -3
  45. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
  46. package/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  47. package/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +3 -3
  48. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  49. package/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  50. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  51. package/app/.next-cli-build/server/app/api/auth/ldap/test/route.js.nft.json +1 -1
  52. package/app/.next-cli-build/server/app/api/auth/ldap/users/route.js.nft.json +1 -1
  53. package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  54. package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  55. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  56. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  57. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  58. package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  59. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  60. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  61. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/autostart/route.js.nft.json +1 -1
  62. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/prompt-log-db/route.js.nft.json +1 -1
  63. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/root-ca/route.js.nft.json +1 -1
  64. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  65. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  66. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  67. package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  68. package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  69. package/app/.next-cli-build/server/app/api/dashboard/analytics/route.js +21 -21
  70. package/app/.next-cli-build/server/app/api/dashboard/analytics/route.js.nft.json +1 -1
  71. package/app/.next-cli-build/server/app/api/dashboard/combos/route.js.nft.json +1 -1
  72. package/app/.next-cli-build/server/app/api/dashboard/endpoint/route.js.nft.json +1 -1
  73. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/[id]/route.js.nft.json +1 -1
  74. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/options/route.js.nft.json +1 -1
  75. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/route.js.nft.json +1 -1
  76. package/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js.nft.json +1 -1
  77. package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  78. package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  79. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  80. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  81. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  82. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  83. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  84. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  85. package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  86. package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  87. package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  88. package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  89. package/app/.next-cli-build/server/app/api/models/route.js +1 -1
  90. package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  91. package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  92. package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  93. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  94. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  95. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  96. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  97. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  98. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  99. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  100. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  101. package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  102. package/app/.next-cli-build/server/app/api/provider-health/route.js.nft.json +1 -1
  103. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  104. package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  105. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  106. package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  107. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  108. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  109. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  110. package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  111. package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  112. package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  113. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  114. package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  115. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  116. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  117. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  118. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  119. package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  120. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  121. package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  122. package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  123. package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  124. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  125. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  126. package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  127. package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  128. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  129. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  130. package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  131. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  132. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  133. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  134. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  135. package/app/.next-cli-build/server/app/api/tunnel/tailscale-login/route.js.nft.json +1 -1
  136. package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js.nft.json +1 -1
  137. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  138. package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  139. package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  140. package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  141. package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  142. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  143. package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  144. package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  145. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  146. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  147. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  148. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  149. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  150. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  151. package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  152. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  153. package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  154. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  155. package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  156. package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  157. package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  158. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  159. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  160. package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  161. package/app/.next-cli-build/server/app/api/version/route.js +1 -1
  162. package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  163. package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  164. package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  165. package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  166. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  167. package/app/.next-cli-build/server/app/callback.html +1 -1
  168. package/app/.next-cli-build/server/app/callback.rsc +3 -3
  169. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
  170. package/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  171. package/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +3 -3
  172. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  173. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  174. package/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  175. package/app/.next-cli-build/server/app/dashboard/analytics.html +1 -1
  176. package/app/.next-cli-build/server/app/dashboard/analytics.rsc +4 -4
  177. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard/analytics/__PAGE__.segment.rsc +1 -1
  178. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard/analytics.segment.rsc +1 -1
  179. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  180. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  181. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_full.segment.rsc +4 -4
  182. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_head.segment.rsc +1 -1
  183. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_index.segment.rsc +3 -3
  184. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_tree.segment.rsc +1 -1
  185. package/app/.next-cli-build/server/app/dashboard/api-keys.html +1 -1
  186. package/app/.next-cli-build/server/app/dashboard/api-keys.rsc +5 -5
  187. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard/api-keys/__PAGE__.segment.rsc +2 -2
  188. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard/api-keys.segment.rsc +1 -1
  189. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  190. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  191. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_full.segment.rsc +5 -5
  192. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_head.segment.rsc +1 -1
  193. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_index.segment.rsc +3 -3
  194. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_tree.segment.rsc +1 -1
  195. package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  196. package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +5 -5
  197. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  198. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  199. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  200. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  201. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +5 -5
  202. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  203. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +3 -3
  204. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  205. package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  206. package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +5 -5
  207. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  208. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  209. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  210. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  211. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
  212. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  213. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
  214. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  215. package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  216. package/app/.next-cli-build/server/app/dashboard/combos.rsc +5 -5
  217. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  218. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  219. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  220. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  221. package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
  222. package/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  223. package/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
  224. package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  225. package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  226. package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +5 -5
  227. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  228. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  229. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  230. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  231. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
  232. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  233. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
  234. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  235. package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  236. package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +5 -5
  237. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  238. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  239. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  240. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  241. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  242. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +5 -5
  243. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  244. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +3 -3
  245. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  246. package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  247. package/app/.next-cli-build/server/app/dashboard/mitm.rsc +5 -5
  248. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  249. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  250. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  251. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  252. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
  253. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  254. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
  255. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  256. package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  257. package/app/.next-cli-build/server/app/dashboard/profile.rsc +4 -4
  258. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +1 -1
  259. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  260. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  261. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  262. package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +4 -4
  263. package/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  264. package/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
  265. package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  266. package/app/.next-cli-build/server/app/dashboard/prompt-logs.html +1 -1
  267. package/app/.next-cli-build/server/app/dashboard/prompt-logs.rsc +4 -4
  268. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs/__PAGE__.segment.rsc +1 -1
  269. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs.segment.rsc +1 -1
  270. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  271. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  272. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_full.segment.rsc +4 -4
  273. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_head.segment.rsc +1 -1
  274. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_index.segment.rsc +3 -3
  275. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_tree.segment.rsc +1 -1
  276. package/app/.next-cli-build/server/app/dashboard/provider-health.html +1 -1
  277. package/app/.next-cli-build/server/app/dashboard/provider-health.rsc +4 -4
  278. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health/__PAGE__.segment.rsc +1 -1
  279. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health.segment.rsc +1 -1
  280. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  281. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  282. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_full.segment.rsc +4 -4
  283. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_head.segment.rsc +1 -1
  284. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_index.segment.rsc +3 -3
  285. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_tree.segment.rsc +1 -1
  286. package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  287. package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +5 -5
  288. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  289. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  290. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  291. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  292. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  293. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
  294. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  295. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
  296. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  297. package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  298. package/app/.next-cli-build/server/app/dashboard/providers.rsc +5 -5
  299. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  300. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  301. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  302. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  303. package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
  304. package/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  305. package/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
  306. package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  307. package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  308. package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +5 -5
  309. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  310. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  311. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  312. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  313. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +5 -5
  314. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  315. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
  316. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  317. package/app/.next-cli-build/server/app/dashboard/quota.html +1 -1
  318. package/app/.next-cli-build/server/app/dashboard/quota.rsc +6 -6
  319. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  320. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  321. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  322. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  323. package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +6 -6
  324. package/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  325. package/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
  326. package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  327. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  328. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  329. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
  330. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  331. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  332. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
  333. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  334. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  335. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  336. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  337. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  338. package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
  339. package/app/.next-cli-build/server/app/dashboard/skills.rsc +5 -5
  340. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
  341. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
  342. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  343. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  344. package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +5 -5
  345. package/app/.next-cli-build/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
  346. package/app/.next-cli-build/server/app/dashboard/skills.segments/_index.segment.rsc +3 -3
  347. package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +1 -1
  348. package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  349. package/app/.next-cli-build/server/app/dashboard/translator.rsc +5 -5
  350. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  351. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  352. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  353. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  354. package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
  355. package/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  356. package/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
  357. package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  358. package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  359. package/app/.next-cli-build/server/app/dashboard/usage.rsc +5 -5
  360. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  361. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  362. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  363. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  364. package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
  365. package/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  366. package/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
  367. package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  368. package/app/.next-cli-build/server/app/dashboard.html +1 -1
  369. package/app/.next-cli-build/server/app/dashboard.rsc +5 -5
  370. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  371. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  372. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  373. package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +5 -5
  374. package/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  375. package/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +3 -3
  376. package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  377. package/app/.next-cli-build/server/app/index.html +1 -1
  378. package/app/.next-cli-build/server/app/index.rsc +3 -3
  379. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  380. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
  381. package/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  382. package/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +3 -3
  383. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  384. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  385. package/app/.next-cli-build/server/app/landing.html +1 -1
  386. package/app/.next-cli-build/server/app/landing.rsc +3 -3
  387. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +3 -3
  388. package/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  389. package/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +3 -3
  390. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  391. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  392. package/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  393. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  394. package/app/.next-cli-build/server/app/login.html +1 -1
  395. package/app/.next-cli-build/server/app/login.rsc +3 -3
  396. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +3 -3
  397. package/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  398. package/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +3 -3
  399. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  400. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
  401. package/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  402. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  403. package/app/.next-cli-build/server/app-paths-manifest.json +5 -5
  404. package/app/.next-cli-build/server/chunks/2338.js +1 -1
  405. package/app/.next-cli-build/server/chunks/3110.js +1 -1
  406. package/app/.next-cli-build/server/chunks/4746.js +1 -1
  407. package/app/.next-cli-build/server/chunks/7130.js +1 -1
  408. package/app/.next-cli-build/server/chunks/7153.js +1 -1
  409. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  410. package/app/.next-cli-build/server/pages/404.html +1 -1
  411. package/app/.next-cli-build/server/pages/500.html +1 -1
  412. package/app/.next-cli-build/static/chunks/{1321-8701594fad2e3304.js → 1321-13dca2fa40fd2511.js} +1 -1
  413. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-shm +0 -0
  414. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-wal +0 -0
  415. package/app/package.json +1 -1
  416. package/package.json +1 -1
  417. /package/app/.next-cli-build/static/{705mNdk4B8NfArSKHEzcP → FJJiUtsL4pqsNJWsDYeyV}/_buildManifest.js +0 -0
  418. /package/app/.next-cli-build/static/{705mNdk4B8NfArSKHEzcP → FJJiUtsL4pqsNJWsDYeyV}/_ssgManifest.js +0 -0
  419. /package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/{upgrade-2.0.90-to-3.0.1-3.0.1-20260617-111304 → upgrade-3.0.5-to-3.0.6-3.0.6-20260617-172736}/data.sqlite +0 -0
@@ -1,4 +1,4 @@
1
- "use strict";(()=>{var a={};a.id=451,a.ids=[451],a.modules={261:a=>{a.exports=require("next/dist/shared/lib/router/utils/app-paths")},1932:a=>{a.exports=require("url")},3295:a=>{a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},4573:a=>{a.exports=require("node:buffer")},9588:(a,b,c)=>{c.d(b,{I8:()=>j,Tv:()=>t,aV:()=>n,bz:()=>p,hH:()=>s,oW:()=>r,s0:()=>l,ub:()=>m,vZ:()=>o});var d=c(65573),e=c(23211),f=c(89718),g=c(33792),h=c(90389);function i(a){return String(a||"").trim().toLowerCase()}function j(a){return i(a)}function k(a={}){return[a.ldapUsername,a.ldapEmail,a.ldapName,a.oidcEmail,a.oidcName,a.localUsername,a.username,a.email].map(i).filter(Boolean)}function l(a={}){let b=k(a),c=b[0]||"local",d=a.ldapName||a.ldapEmail||a.oidcName||a.oidcEmail||a.localUsername||c;return{userId:c,displayName:d,loginMethod:a.oidc?"OIDC":a.ldap?"LDAP":"Local",candidates:b}}function m(a={},b={}){var c;if(!b?.authenticated)return!1;if(b.local||!b.ldap&&!b.oidc||b.role===h.hS.ADMIN||!0===b.ldapIsAdmin)return!0;let d=Array.isArray(c=a.ldapAllowedUsers)?c.map(i).filter(Boolean):String(c||"").split(/[,\n]/).map(i).filter(Boolean);return 0!==d.length&&k(b).some(a=>d.includes(a))}function n(a={},b={}){return!(!b?.authenticated||m(a,b))&&(b.role===h.hS.MONITOR_ADMIN||!0===b.ldapIsMonitorAdmin)}function o(a={},b={}){return b?.authenticated?m(a,b)?h.hS.ADMIN:n(a,b)?h.hS.MONITOR_ADMIN:h.hS.USER:h.hS.GUEST}function p(a={}){return!0===a.isAdmin||!0===a.isMonitorAdmin}async function q(){let a=await (0,f.mt)(),b=await (0,d.UL)(),c=await (0,g.dY)(b.get("auth_token")?.value);if(!c?.authenticated)return{authenticated:!1,isAdmin:!1,isMonitorAdmin:!1,role:h.hS.GUEST,userId:"",displayName:"Guest",loginMethod:"None",settings:{...a,requireLogin:!0},session:null};let e=l(c||{}),i=o(a,c||{}),j=i===h.hS.ADMIN,k=i===h.hS.MONITOR_ADMIN;return{authenticated:!0,isAdmin:j,isMonitorAdmin:k,role:i,canManageApiKeys:j||k,canUseMonitorAdminTabs:j||k,...e,settings:{...a,requireLogin:!0},session:c}}async function r(){let a=await q();return a.authenticated?{access:a,response:null}:{access:a,response:e.NextResponse.json({error:"Authentication required"},{status:401})}}async function s(a={}){let{allowMonitorAdmin:b=!1}=a||{},{access:c,response:d}=await r();return d?{access:c,response:d}:c.isAdmin||b&&c.isMonitorAdmin?{access:c,response:null}:{access:c,response:e.NextResponse.json({error:"Admin access required"},{status:403})}}function t(a,b){if(!a?.authenticated||!b)return!1;if(p(a))return!0;let c=i(a.userId),d=i(b.ownerUser),e=i(b.createdByUser);return!!c&&(d===c||e===c)}},10846:a=>{a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},19771:a=>{a.exports=require("process")},21820:a=>{a.exports=require("os")},27910:a=>{a.exports=require("stream")},28354:a=>{a.exports=require("util")},29294:a=>{a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},33792:(a,b,c)=>{c.d(b,{Dc:()=>p,OZ:()=>s,YK:()=>n,dY:()=>q,tm:()=>r});var d=c(86935),e=c(69614),f=c(73024),g=c.n(f),h=c(76760),i=c.n(h),j=c(77598),k=c.n(j),l=c(49120);let m=new TextEncoder().encode(function(){if(process.env.JWT_SECRET)return process.env.JWT_SECRET;let a=i().join(l.DATA_DIR,"jwt-secret");try{return g().readFileSync(a,"utf8").trim()}catch{}g().mkdirSync(l.DATA_DIR,{recursive:!0});let b=k().randomBytes(32).toString("hex");return g().writeFileSync(a,b,{mode:384}),b}());function n(a){let b="true"===process.env.AUTH_COOKIE_SECURE,c=a?.headers?.get?.("x-forwarded-proto");return b||"https"===c}async function o(a={}){return new d.P({authenticated:!0,...a}).setProtectedHeader({alg:"HS256"}).setIssuedAt().setExpirationTime("24h").sign(m)}async function p(a){if(!a)return!1;try{return await (0,e.V)(a,m),!0}catch{return!1}}async function q(a){if(!a)return null;try{let{payload:b}=await (0,e.V)(a,m);return b}catch{return null}}async function r(a,b,c={}){let d=await o(c);a.set("auth_token",d,{httpOnly:!0,secure:n(b),sameSite:"lax",path:"/"})}function s(a){a.delete("auth_token")}},33873:a=>{a.exports=require("path")},34631:a=>{a.exports=require("tls")},41204:a=>{a.exports=require("string_decoder")},44870:a=>{a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},46293:a=>{a.exports=require("sql.js")},50122:(a,b,c)=>{c.d(b,{k:()=>e});let d=[];for(let a=0;a<256;++a)d.push((a+256).toString(16).slice(1));function e(a,b=0){return(d[a[b+0]]+d[a[b+1]]+d[a[b+2]]+d[a[b+3]]+"-"+d[a[b+4]]+d[a[b+5]]+"-"+d[a[b+6]]+d[a[b+7]]+"-"+d[a[b+8]]+d[a[b+9]]+"-"+d[a[b+10]]+d[a[b+11]]+d[a[b+12]]+d[a[b+13]]+d[a[b+14]]+d[a[b+15]]).toLowerCase()}},53053:a=>{a.exports=require("node:diagnostics_channel")},55511:a=>{a.exports=require("crypto")},61066:(a,b,c)=>{c.r(b),c.d(b,{handler:()=>a4,patchFetch:()=>a3,routeModule:()=>a_,serverHooks:()=>a2,workAsyncStorage:()=>a0,workUnitAsyncStorage:()=>a1});var d={};c.r(d),c.d(d,{GET:()=>a$,dynamic:()=>aY});var e=c(19225),f=c(84006),g=c(8317),h=c(99373),i=c(34775),j=c(24235),k=c(261),l=c(54365),m=c(90771),n=c(73461),o=c(67798),p=c(92280),q=c(62018),r=c(45696),s=c(47929),t=c(86439),u=c(37527),v=c(23211),w=c(36366),x=c(644),y=c(45903),z=c(97242);let A=new Set;function B(a){return String(a||"").trim()}function C(a,b=0){let c=Number(a);return Number.isFinite(c)?c:b}async function D(){return(0,y.I6)(await (0,y.L7)())}async function E(a){let b=new(await Promise.resolve().then(c.bind(c,64939))).Client({host:a.host,port:Number(a.port||5432),database:a.database,user:a.username,password:a.password,ssl:!!a.ssl&&{rejectUnauthorized:!1}});return await b.connect(),{type:"postgres",query:async(a,c=[])=>(await b.query(a,c)).rows,queryOne:async(a,c=[])=>(await b.query(a,c)).rows[0]||null,async exec(a,c=[]){await b.query(a,c)},async close(){await b.end()}}}async function F(a){let b=await c.e(8491).then(c.t.bind(c,38491,19)),d=await b.createConnection({host:a.host,port:Number(a.port||3306),database:a.database,user:a.username,password:a.password,ssl:a.ssl?{}:void 0,dateStrings:!0,connectTimeout:3e3});return{type:"mysql",async query(a,b=[]){let[c]=await d.query(a,b);return c},async queryOne(a,b=[]){let[c]=await d.query(a,b);return c[0]||null},async exec(a,b=[]){await d.query(a,b)},async close(){await d.end()}}}async function G(a){if("postgres"===a.type)return E(a);if("mysql"===a.type)return F(a);throw Error(`Unsupported prompt log database type: ${a.type}`)}async function H(){await (0,z.DU)().catch(()=>null)}async function I(a){if(!a.enabled)return;let b=`${a.type}:${a.host||""}:${a.port||""}:${a.database||""}`;if(!A.has(b))try{await H(a),A.add(b)}catch(a){console.warn("[prompt-log-analytics] Unable to ensure indexes:",a?.message||a)}}async function J(a,b,c,d,e=50){let f=Math.max(1,Math.min(500,Number(e)||50));return await a.query(`SELECT ${c},
1
+ "use strict";(()=>{var a={};a.id=451,a.ids=[451],a.modules={261:a=>{a.exports=require("next/dist/shared/lib/router/utils/app-paths")},1932:a=>{a.exports=require("url")},3295:a=>{a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},4573:a=>{a.exports=require("node:buffer")},9588:(a,b,c)=>{c.d(b,{I8:()=>j,Tv:()=>t,aV:()=>n,bz:()=>p,hH:()=>s,oW:()=>r,s0:()=>l,ub:()=>m,vZ:()=>o});var d=c(65573),e=c(23211),f=c(89718),g=c(33792),h=c(90389);function i(a){return String(a||"").trim().toLowerCase()}function j(a){return i(a)}function k(a={}){return[a.ldapUsername,a.ldapEmail,a.ldapName,a.oidcEmail,a.oidcName,a.localUsername,a.username,a.email].map(i).filter(Boolean)}function l(a={}){let b=k(a),c=b[0]||"local",d=a.ldapName||a.ldapEmail||a.oidcName||a.oidcEmail||a.localUsername||c;return{userId:c,displayName:d,loginMethod:a.oidc?"OIDC":a.ldap?"LDAP":"Local",candidates:b}}function m(a={},b={}){var c;if(!b?.authenticated)return!1;if(b.local||!b.ldap&&!b.oidc||b.role===h.hS.ADMIN||!0===b.ldapIsAdmin)return!0;let d=Array.isArray(c=a.ldapAllowedUsers)?c.map(i).filter(Boolean):String(c||"").split(/[,\n]/).map(i).filter(Boolean);return 0!==d.length&&k(b).some(a=>d.includes(a))}function n(a={},b={}){return!(!b?.authenticated||m(a,b))&&(b.role===h.hS.MONITOR_ADMIN||!0===b.ldapIsMonitorAdmin)}function o(a={},b={}){return b?.authenticated?m(a,b)?h.hS.ADMIN:n(a,b)?h.hS.MONITOR_ADMIN:h.hS.USER:h.hS.GUEST}function p(a={}){return!0===a.isAdmin||!0===a.isMonitorAdmin}async function q(){let a=await (0,f.mt)(),b=await (0,d.UL)(),c=await (0,g.dY)(b.get("auth_token")?.value);if(!c?.authenticated)return{authenticated:!1,isAdmin:!1,isMonitorAdmin:!1,role:h.hS.GUEST,userId:"",displayName:"Guest",loginMethod:"None",settings:{...a,requireLogin:!0},session:null};let e=l(c||{}),i=o(a,c||{}),j=i===h.hS.ADMIN,k=i===h.hS.MONITOR_ADMIN;return{authenticated:!0,isAdmin:j,isMonitorAdmin:k,role:i,canManageApiKeys:j||k,canUseMonitorAdminTabs:j||k,...e,settings:{...a,requireLogin:!0},session:c}}async function r(){let a=await q();return a.authenticated?{access:a,response:null}:{access:a,response:e.NextResponse.json({error:"Authentication required"},{status:401})}}async function s(a={}){let{allowMonitorAdmin:b=!1}=a||{},{access:c,response:d}=await r();return d?{access:c,response:d}:c.isAdmin||b&&c.isMonitorAdmin?{access:c,response:null}:{access:c,response:e.NextResponse.json({error:"Admin access required"},{status:403})}}function t(a,b){if(!a?.authenticated||!b)return!1;if(p(a))return!0;let c=i(a.userId),d=i(b.ownerUser),e=i(b.createdByUser);return!!c&&(d===c||e===c)}},10846:a=>{a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},19771:a=>{a.exports=require("process")},21820:a=>{a.exports=require("os")},27910:a=>{a.exports=require("stream")},28354:a=>{a.exports=require("util")},29294:a=>{a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},33792:(a,b,c)=>{c.d(b,{Dc:()=>p,OZ:()=>s,YK:()=>n,dY:()=>q,tm:()=>r});var d=c(86935),e=c(69614),f=c(73024),g=c.n(f),h=c(76760),i=c.n(h),j=c(77598),k=c.n(j),l=c(49120);let m=new TextEncoder().encode(function(){if(process.env.JWT_SECRET)return process.env.JWT_SECRET;let a=i().join(l.DATA_DIR,"jwt-secret");try{return g().readFileSync(a,"utf8").trim()}catch{}g().mkdirSync(l.DATA_DIR,{recursive:!0});let b=k().randomBytes(32).toString("hex");return g().writeFileSync(a,b,{mode:384}),b}());function n(a){let b="true"===process.env.AUTH_COOKIE_SECURE,c=a?.headers?.get?.("x-forwarded-proto");return b||"https"===c}async function o(a={}){return new d.P({authenticated:!0,...a}).setProtectedHeader({alg:"HS256"}).setIssuedAt().setExpirationTime("24h").sign(m)}async function p(a){if(!a)return!1;try{return await (0,e.V)(a,m),!0}catch{return!1}}async function q(a){if(!a)return null;try{let{payload:b}=await (0,e.V)(a,m);return b}catch{return null}}async function r(a,b,c={}){let d=await o(c);a.set("auth_token",d,{httpOnly:!0,secure:n(b),sameSite:"lax",path:"/"})}function s(a){a.delete("auth_token")}},33873:a=>{a.exports=require("path")},34631:a=>{a.exports=require("tls")},41204:a=>{a.exports=require("string_decoder")},44870:a=>{a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},46293:a=>{a.exports=require("sql.js")},50122:(a,b,c)=>{c.d(b,{k:()=>e});let d=[];for(let a=0;a<256;++a)d.push((a+256).toString(16).slice(1));function e(a,b=0){return(d[a[b+0]]+d[a[b+1]]+d[a[b+2]]+d[a[b+3]]+"-"+d[a[b+4]]+d[a[b+5]]+"-"+d[a[b+6]]+d[a[b+7]]+"-"+d[a[b+8]]+d[a[b+9]]+"-"+d[a[b+10]]+d[a[b+11]]+d[a[b+12]]+d[a[b+13]]+d[a[b+14]]+d[a[b+15]]).toLowerCase()}},53053:a=>{a.exports=require("node:diagnostics_channel")},55511:a=>{a.exports=require("crypto")},61066:(a,b,c)=>{c.r(b),c.d(b,{handler:()=>a7,patchFetch:()=>a6,routeModule:()=>a2,serverHooks:()=>a5,workAsyncStorage:()=>a3,workUnitAsyncStorage:()=>a4});var d={};c.r(d),c.d(d,{GET:()=>a1,dynamic:()=>a_});var e=c(19225),f=c(84006),g=c(8317),h=c(99373),i=c(34775),j=c(24235),k=c(261),l=c(54365),m=c(90771),n=c(73461),o=c(67798),p=c(92280),q=c(62018),r=c(45696),s=c(47929),t=c(86439),u=c(37527),v=c(23211),w=c(36366),x=c(644),y=c(45903),z=c(97242);let A=new Set;function B(a){return String(a||"").trim()}function C(a,b=0){let c=Number(a);return Number.isFinite(c)?c:b}async function D(){return(0,y.I6)(await (0,y.L7)())}async function E(a){let b=new(await Promise.resolve().then(c.bind(c,64939))).Client({host:a.host,port:Number(a.port||5432),database:a.database,user:a.username,password:a.password,ssl:!!a.ssl&&{rejectUnauthorized:!1}});return await b.connect(),{type:"postgres",query:async(a,c=[])=>(await b.query(a,c)).rows,queryOne:async(a,c=[])=>(await b.query(a,c)).rows[0]||null,async exec(a,c=[]){await b.query(a,c)},async close(){await b.end()}}}async function F(a){let b=await c.e(8491).then(c.t.bind(c,38491,19)),d=await b.createConnection({host:a.host,port:Number(a.port||3306),database:a.database,user:a.username,password:a.password,ssl:a.ssl?{}:void 0,dateStrings:!0,connectTimeout:3e3});return{type:"mysql",async query(a,b=[]){let[c]=await d.query(a,b);return c},async queryOne(a,b=[]){let[c]=await d.query(a,b);return c[0]||null},async exec(a,b=[]){await d.query(a,b)},async close(){await d.end()}}}async function G(a){if("postgres"===a.type)return E(a);if("mysql"===a.type)return F(a);throw Error(`Unsupported prompt log database type: ${a.type}`)}async function H(){await (0,z.DU)().catch(()=>null)}async function I(a){if(!a.enabled)return;let b=`${a.type}:${a.host||""}:${a.port||""}:${a.database||""}`;if(!A.has(b))try{await H(a),A.add(b)}catch(a){console.warn("[prompt-log-analytics] Unable to ensure indexes:",a?.message||a)}}async function J(a,b,c,d,e=50){let f=Math.max(1,Math.min(500,Number(e)||50));return await a.query(`SELECT ${c},
2
2
  COUNT(*) AS requests,
3
3
  SUM(CASE WHEN error_text IS NOT NULL AND error_text <> '' THEN 1
4
4
  WHEN status_code IS NOT NULL AND CONCAT('', status_code) NOT LIKE '2%' THEN 1
@@ -191,19 +191,22 @@
191
191
  FROM usageHistory
192
192
  ${f} ${c} IS NOT NULL AND ${c} <> ''
193
193
  ORDER BY ${c} ASC
194
- LIMIT ?`,[...e.params,d])||[]).map(a=>V(a.value)).filter(Boolean)}let aE="COALESCE(NULLIF(apiKeyOwner, ''), NULLIF(apiKeyName, ''), NULLIF(apiKeyFingerprint, ''), NULLIF(apiKeyId, ''), NULLIF(clientIpNormalized, ''), 'local-no-key')",aF="COALESCE(NULLIF(apiKeyOwner, ''), NULLIF(apiKeyName, ''), NULLIF(apiKeyFingerprint, ''), NULLIF(clientIpNormalized, ''), 'Local / kh\xf4ng API key')",aG="COALESCE(NULLIF(clientIpNormalized, ''), NULLIF(clientIp, ''), 'unknown')";function aH(a,b,c,d,e=new Map){if(!new Set(["model","provider","endpoint","clientIpNormalized","sourceTool"]).has(d))return new Map;let f=ar(b,c),g=`COALESCE(NULLIF(${d}, ''), 'unknown')`;try{let b=a.all(`SELECT
195
- ${aE} AS clientKey,
194
+ LIMIT ?`,[...e.params,d])||[]).map(a=>V(a.value)).filter(Boolean)}function aE(a){return{...a,period:"all",start:null,end:new Date,startIso:"",endIso:"",dateFrom:"",dateTo:""}}function aF(a,b,c,d=500){let e=aD(a,b,c,d);return e.length?e:aD(a,aE(b),c,d)}function aG(a,b){let c=ah(aC(b),null),d=c.clause?`${c.clause} AND`:"WHERE";try{let b=a.get(`SELECT 1 AS hasLocal
195
+ FROM usageHistory
196
+ ${d} (apiKey IS NULL OR apiKey = '')
197
+ LIMIT 1`,c.params);return!!b?.hasLocal}catch{return!1}}let aH="COALESCE(NULLIF(apiKeyOwner, ''), NULLIF(apiKeyName, ''), NULLIF(apiKeyFingerprint, ''), NULLIF(apiKeyId, ''), NULLIF(clientIpNormalized, ''), 'local-no-key')",aI="COALESCE(NULLIF(apiKeyOwner, ''), NULLIF(apiKeyName, ''), NULLIF(apiKeyFingerprint, ''), NULLIF(clientIpNormalized, ''), 'Local / kh\xf4ng API key')",aJ="COALESCE(NULLIF(clientIpNormalized, ''), NULLIF(clientIp, ''), 'unknown')";function aK(a,b,c,d,e=new Map){if(!new Set(["model","provider","endpoint","clientIpNormalized","sourceTool"]).has(d))return new Map;let f=ar(b,c),g=`COALESCE(NULLIF(${d}, ''), 'unknown')`;try{let b=a.all(`SELECT
198
+ ${aH} AS clientKey,
196
199
  ${g} AS itemKey,
197
200
  COUNT(*) AS requests,
198
201
  COALESCE(SUM(COALESCE(promptTokens, 0) + COALESCE(completionTokens, 0)), 0) AS totalTokens,
199
202
  MAX(timestamp) AS lastSeen
200
203
  FROM usageHistory
201
204
  ${f.clause}
202
- GROUP BY ${aE}, ${g}
203
- ORDER BY clientKey ASC, requests DESC, totalTokens DESC`,f.params)||[],c=new Map;for(let a of b){let b=V(a.itemKey)||"unknown",f="provider"===d?af(b,e):b;!function(a,b,c,d=3){if(!b||!c?.key)return;let e=a.get(b)||[];e.push(c),e.sort((a,b)=>b.requests-a.requests||b.totalTokens-a.totalTokens||String(a.label).localeCompare(String(b.label))),a.set(b,e.slice(0,d))}(c,a.clientKey,{key:b,label:f,requests:X(a.requests,0),totalTokens:X(a.totalTokens,0),lastSeen:a.lastSeen||""})}return c}catch(a){return console.error("[analytics] Failed to build client top usage map:",a?.message||a),new Map}}function aI(a={},b={}){let c=X(a.requests,0),d=X(a.success,c),e=X(a.errors,0),f=X(a.promptTokens,0),g=X(a.completionTokens,0),h=X(a.totalTokens,f+g),i=X(a.p95PromptTokens,0),j=X(a.p95LatencyMs,null),k=c?e/c:0,l=c?X(a.longInputRequests,0)/c:0,m=c?X(a.hugeInputRequests,0)/c:0,n=c?X(a.extremeInputRequests,0)/c:0,o=c?X(a.slowRequests,0)/c:0,p=function({requests:a=0,p95PromptTokens:b=0,p95LatencyMs:c=0,longInputRate:d=0,errorRate:e=0}={}){return a?b>=7e4||d>=.5||c>=9e4?{level:"critical",label:"Rất nặng",tone:"red"}:b>=5e4||d>=.3||c>=45e3||e>=.2?{level:"high",label:"Nặng",tone:"amber"}:b>=3e4||d>=.1||e>=.05?{level:"medium",label:"Cần theo d\xf5i",tone:"blue"}:{level:"normal",label:"Ổn",tone:"green"}:{level:"none",label:"Chưa c\xf3 mẫu",tone:"slate"}}({requests:c,p95PromptTokens:i,p95LatencyMs:X(j,0),longInputRate:l,errorRate:k});return{key:V(a.clientKey)||"unknown",label:V(a.clientLabel||a.clientKey)||"unknown",ownerUser:V(a.ownerUser),apiKeyName:V(a.apiKeyName),apiKeyFingerprint:V(a.apiKeyFingerprint),primaryClientIp:V(a.primaryClientIp),primarySourceTool:V(a.primarySourceTool),apiKeyCount:X(a.apiKeyCount,0),sourceIpCount:X(a.sourceIpCount,0),sourceToolCount:X(a.sourceToolCount,0),sessionCount:X(a.sessionCount,0),requests:c,success:d,errors:e,errorRate:k,promptTokens:f,completionTokens:g,totalTokens:h,cost:X(a.cost,0),avgPromptTokens:c?f/c:0,avgCompletionTokens:c?g/c:0,avgTokens:c?h/c:0,p50PromptTokens:X(a.p50PromptTokens,0),p95PromptTokens:i,maxPromptTokens:X(a.maxPromptTokens,0),avgLatencyMs:X(a.avgLatencyMs,null),p95LatencyMs:j,maxLatencyMs:X(a.maxLatencyMs,null),avgTtftMs:X(a.avgTtftMs,null),p95TtftMs:X(a.p95TtftMs,null),longInputRequests:X(a.longInputRequests,0),hugeInputRequests:X(a.hugeInputRequests,0),extremeInputRequests:X(a.extremeInputRequests,0),slowRequests:X(a.slowRequests,0),slowTtftRequests:X(a.slowTtftRequests,0),longInputRate:l,hugeInputRate:m,extremeInputRate:n,slowRequestRate:o,slowTtftRate:c?X(a.slowTtftRequests,0)/c:0,outputTokensPerSecond:X(a.totalLatencyMs,0)>0?g/(X(a.totalLatencyMs,0)/1e3):null,level:p.level,pressureLabel:p.label,tone:p.tone,lastSeen:a.lastSeen||"",...b}}function aJ(a,b,c,{dimension:d="apiKey",order:e="tokens",limit:f=25}={}){let g=ar(b,c),h="sourceIp"===d;try{return(a.all(`WITH base AS (
205
+ GROUP BY ${aH}, ${g}
206
+ ORDER BY clientKey ASC, requests DESC, totalTokens DESC`,f.params)||[],c=new Map;for(let a of b){let b=V(a.itemKey)||"unknown",f="provider"===d?af(b,e):b;!function(a,b,c,d=3){if(!b||!c?.key)return;let e=a.get(b)||[];e.push(c),e.sort((a,b)=>b.requests-a.requests||b.totalTokens-a.totalTokens||String(a.label).localeCompare(String(b.label))),a.set(b,e.slice(0,d))}(c,a.clientKey,{key:b,label:f,requests:X(a.requests,0),totalTokens:X(a.totalTokens,0),lastSeen:a.lastSeen||""})}return c}catch(a){return console.error("[analytics] Failed to build client top usage map:",a?.message||a),new Map}}function aL(a={},b={}){let c=X(a.requests,0),d=X(a.success,c),e=X(a.errors,0),f=X(a.promptTokens,0),g=X(a.completionTokens,0),h=X(a.totalTokens,f+g),i=X(a.p95PromptTokens,0),j=X(a.p95LatencyMs,null),k=c?e/c:0,l=c?X(a.longInputRequests,0)/c:0,m=c?X(a.hugeInputRequests,0)/c:0,n=c?X(a.extremeInputRequests,0)/c:0,o=c?X(a.slowRequests,0)/c:0,p=function({requests:a=0,p95PromptTokens:b=0,p95LatencyMs:c=0,longInputRate:d=0,errorRate:e=0}={}){return a?b>=7e4||d>=.5||c>=9e4?{level:"critical",label:"Rất nặng",tone:"red"}:b>=5e4||d>=.3||c>=45e3||e>=.2?{level:"high",label:"Nặng",tone:"amber"}:b>=3e4||d>=.1||e>=.05?{level:"medium",label:"Cần theo d\xf5i",tone:"blue"}:{level:"normal",label:"Ổn",tone:"green"}:{level:"none",label:"Chưa c\xf3 mẫu",tone:"slate"}}({requests:c,p95PromptTokens:i,p95LatencyMs:X(j,0),longInputRate:l,errorRate:k});return{key:V(a.clientKey)||"unknown",label:V(a.clientLabel||a.clientKey)||"unknown",ownerUser:V(a.ownerUser),apiKeyName:V(a.apiKeyName),apiKeyFingerprint:V(a.apiKeyFingerprint),primaryClientIp:V(a.primaryClientIp),primarySourceTool:V(a.primarySourceTool),apiKeyCount:X(a.apiKeyCount,0),sourceIpCount:X(a.sourceIpCount,0),sourceToolCount:X(a.sourceToolCount,0),sessionCount:X(a.sessionCount,0),requests:c,success:d,errors:e,errorRate:k,promptTokens:f,completionTokens:g,totalTokens:h,cost:X(a.cost,0),avgPromptTokens:c?f/c:0,avgCompletionTokens:c?g/c:0,avgTokens:c?h/c:0,p50PromptTokens:X(a.p50PromptTokens,0),p95PromptTokens:i,maxPromptTokens:X(a.maxPromptTokens,0),avgLatencyMs:X(a.avgLatencyMs,null),p95LatencyMs:j,maxLatencyMs:X(a.maxLatencyMs,null),avgTtftMs:X(a.avgTtftMs,null),p95TtftMs:X(a.p95TtftMs,null),longInputRequests:X(a.longInputRequests,0),hugeInputRequests:X(a.hugeInputRequests,0),extremeInputRequests:X(a.extremeInputRequests,0),slowRequests:X(a.slowRequests,0),slowTtftRequests:X(a.slowTtftRequests,0),longInputRate:l,hugeInputRate:m,extremeInputRate:n,slowRequestRate:o,slowTtftRate:c?X(a.slowTtftRequests,0)/c:0,outputTokensPerSecond:X(a.totalLatencyMs,0)>0?g/(X(a.totalLatencyMs,0)/1e3):null,level:p.level,pressureLabel:p.label,tone:p.tone,lastSeen:a.lastSeen||"",...b}}function aM(a,b,c,{dimension:d="apiKey",order:e="tokens",limit:f=25}={}){let g=ar(b,c),h="sourceIp"===d;try{return(a.all(`WITH base AS (
204
207
  SELECT
205
- ${h?aG:"COALESCE(NULLIF(apiKeyId, ''), NULLIF(apiKeyFingerprint, ''), NULLIF(apiKey, ''), 'local-no-key')"} AS groupKey,
206
- ${h?aG:"COALESCE(NULLIF(apiKeyName, ''), NULLIF(apiKeyOwner, ''), NULLIF(apiKeyFingerprint, ''), 'Local / kh\xf4ng API key')"} AS groupLabel,
208
+ ${h?aJ:"COALESCE(NULLIF(apiKeyId, ''), NULLIF(apiKeyFingerprint, ''), NULLIF(apiKey, ''), 'local-no-key')"} AS groupKey,
209
+ ${h?aJ:"COALESCE(NULLIF(apiKeyName, ''), NULLIF(apiKeyOwner, ''), NULLIF(apiKeyFingerprint, ''), 'Local / kh\xf4ng API key')"} AS groupLabel,
207
210
  COALESCE(NULLIF(apiKeyId, ''), NULLIF(apiKeyFingerprint, ''), NULLIF(apiKey, ''), 'local-no-key') AS apiKeyStable,
208
211
  COALESCE(NULLIF(apiKeyName, ''), '') AS apiKeyName,
209
212
  COALESCE(NULLIF(apiKeyOwner, ''), '') AS apiKeyOwner,
@@ -260,10 +263,10 @@
260
263
  GROUP BY groupKey
261
264
  HAVING groupKey <> 'unknown'
262
265
  ORDER BY ${"heavy"===e?"heavyRequests DESC, maxPromptTokens DESC, promptTokens DESC, totalTokens DESC, requests DESC":"totalTokens DESC, promptTokens DESC, requests DESC, maxPromptTokens DESC"}
263
- LIMIT ?`,[...g.params,3e4,5e4,7e4,3e4,3e4,f])||[]).map(a=>(function(a={},b={}){let c=X(a.requests,0),d=X(a.promptTokens,0),e=X(a.completionTokens,0),f=X(a.totalTokens,d+e);return{key:V(a.key||a.groupKey)||"unknown",label:V(a.label||a.groupLabel||a.key||a.groupKey)||"unknown",requests:c,promptTokens:d,completionTokens:e,totalTokens:f,cost:X(a.cost,0),avgPromptTokens:c?d/c:0,avgCompletionTokens:c?e/c:0,avgTokens:c?f/c:0,p95PromptTokens:X(a.p95PromptTokens,0),maxPromptTokens:X(a.maxPromptTokens,0),p95TotalTokens:X(a.p95TotalTokens,0),maxTotalTokens:X(a.maxTotalTokens,0),longInputRequests:X(a.longInputRequests,0),hugeInputRequests:X(a.hugeInputRequests,0),extremeInputRequests:X(a.extremeInputRequests,0),heavyRequests:X(a.heavyRequests,0),longInputRate:c?X(a.longInputRequests,0)/c:0,hugeInputRate:c?X(a.hugeInputRequests,0)/c:0,extremeInputRate:c?X(a.extremeInputRequests,0)/c:0,heavyRequestRate:c?X(a.heavyRequests,0)/c:0,apiKeyCount:X(a.apiKeyCount,0),sourceIpCount:X(a.sourceIpCount,0),sourceToolCount:X(a.sourceToolCount,0),modelCount:X(a.modelCount,0),providerCount:X(a.providerCount,0),lastSeen:a.lastSeen||"",...b}})(a,{apiKeyName:V(a.apiKeyName),apiKeyOwner:V(a.apiKeyOwner),apiKeyFingerprint:V(a.apiKeyFingerprint),primaryClientIp:V(a.primaryClientIp),primarySourceTool:V(a.primarySourceTool)}))}catch(a){return console.error(`[analytics] Failed to build top ${d} ${e} consumers:`,a?.message||a),[]}}function aK(a,b,c,d={},e=new Map){let f=function(a,b,c,d=new Map){let e=ar(b,c),f=aH(a,b,c,"model",d),g=aH(a,b,c,"provider",d),h=aH(a,b,c,"endpoint",d),i=aH(a,b,c,"clientIpNormalized",d),j=aH(a,b,c,"sourceTool",d);try{return(a.all(`WITH base AS (
266
+ LIMIT ?`,[...g.params,3e4,5e4,7e4,3e4,3e4,f])||[]).map(a=>(function(a={},b={}){let c=X(a.requests,0),d=X(a.promptTokens,0),e=X(a.completionTokens,0),f=X(a.totalTokens,d+e);return{key:V(a.key||a.groupKey)||"unknown",label:V(a.label||a.groupLabel||a.key||a.groupKey)||"unknown",requests:c,promptTokens:d,completionTokens:e,totalTokens:f,cost:X(a.cost,0),avgPromptTokens:c?d/c:0,avgCompletionTokens:c?e/c:0,avgTokens:c?f/c:0,p95PromptTokens:X(a.p95PromptTokens,0),maxPromptTokens:X(a.maxPromptTokens,0),p95TotalTokens:X(a.p95TotalTokens,0),maxTotalTokens:X(a.maxTotalTokens,0),longInputRequests:X(a.longInputRequests,0),hugeInputRequests:X(a.hugeInputRequests,0),extremeInputRequests:X(a.extremeInputRequests,0),heavyRequests:X(a.heavyRequests,0),longInputRate:c?X(a.longInputRequests,0)/c:0,hugeInputRate:c?X(a.hugeInputRequests,0)/c:0,extremeInputRate:c?X(a.extremeInputRequests,0)/c:0,heavyRequestRate:c?X(a.heavyRequests,0)/c:0,apiKeyCount:X(a.apiKeyCount,0),sourceIpCount:X(a.sourceIpCount,0),sourceToolCount:X(a.sourceToolCount,0),modelCount:X(a.modelCount,0),providerCount:X(a.providerCount,0),lastSeen:a.lastSeen||"",...b}})(a,{apiKeyName:V(a.apiKeyName),apiKeyOwner:V(a.apiKeyOwner),apiKeyFingerprint:V(a.apiKeyFingerprint),primaryClientIp:V(a.primaryClientIp),primarySourceTool:V(a.primarySourceTool)}))}catch(a){return console.error(`[analytics] Failed to build top ${d} ${e} consumers:`,a?.message||a),[]}}function aN(a,b,c,d={},e=new Map){let f=function(a,b,c,d=new Map){let e=ar(b,c),f=aK(a,b,c,"model",d),g=aK(a,b,c,"provider",d),h=aK(a,b,c,"endpoint",d),i=aK(a,b,c,"clientIpNormalized",d),j=aK(a,b,c,"sourceTool",d);try{return(a.all(`WITH base AS (
264
267
  SELECT
265
- ${aE} AS clientKey,
266
- ${aF} AS clientLabel,
268
+ ${aH} AS clientKey,
269
+ ${aI} AS clientLabel,
267
270
  COALESCE(NULLIF(apiKeyOwner, ''), '') AS ownerUser,
268
271
  COALESCE(NULLIF(apiKeyName, ''), '') AS apiKeyName,
269
272
  COALESCE(NULLIF(apiKeyFingerprint, ''), '') AS apiKeyFingerprint,
@@ -327,9 +330,9 @@
327
330
  FROM ranked
328
331
  GROUP BY clientKey
329
332
  ORDER BY promptTokens DESC, totalTokens DESC, requests DESC
330
- LIMIT ?`,[...e.params,3e4,5e4,7e4,45e3,2e4,25])||[]).map(a=>aI(a,{topModels:f.get(a.clientKey)||[],topProviders:g.get(a.clientKey)||[],topEndpoints:h.get(a.clientKey)||[],topIps:i.get(a.clientKey)||[],topTools:j.get(a.clientKey)||[]}))}catch(a){return console.error("[analytics] Failed to build top heavy users:",a?.message||a),[]}}(a,b,c,e),g=function(a,b,c){let d=ah(b,c);try{return(a.all(`SELECT
331
- ${aE} AS clientKey,
332
- ${aF} AS clientLabel,
333
+ LIMIT ?`,[...e.params,3e4,5e4,7e4,45e3,2e4,25])||[]).map(a=>aL(a,{topModels:f.get(a.clientKey)||[],topProviders:g.get(a.clientKey)||[],topEndpoints:h.get(a.clientKey)||[],topIps:i.get(a.clientKey)||[],topTools:j.get(a.clientKey)||[]}))}catch(a){return console.error("[analytics] Failed to build top heavy users:",a?.message||a),[]}}(a,b,c,e),g=function(a,b,c){let d=ah(b,c);try{return(a.all(`SELECT
334
+ ${aH} AS clientKey,
335
+ ${aI} AS clientLabel,
333
336
  COALESCE(NULLIF(apiKeyOwner, ''), '') AS ownerUser,
334
337
  COALESCE(NULLIF(apiKeyName, ''), '') AS apiKeyName,
335
338
  COALESCE(NULLIF(apiKeyFingerprint, ''), '') AS apiKeyFingerprint,
@@ -344,10 +347,10 @@
344
347
  MAX(timestamp) AS lastSeen
345
348
  FROM usageHistory
346
349
  ${d.clause}
347
- GROUP BY ${aE}
350
+ GROUP BY ${aH}
348
351
  HAVING errors > 0
349
352
  ORDER BY errors DESC, requests DESC
350
- LIMIT ?`,[...d.params,25])||[]).map(a=>aI(a))}catch(a){return console.error("[analytics] Failed to build problem clients:",a?.message||a),[]}}(a,b,c),h=aJ(a,b,c,{dimension:"apiKey",order:"tokens",limit:25}),i=aJ(a,b,c,{dimension:"sourceIp",order:"tokens",limit:25}),j=aJ(a,b,c,{dimension:"sourceIp",order:"heavy",limit:25}),k=function(a,b,c){let d=ar(b,c);try{let b=a.all(`WITH base AS (
353
+ LIMIT ?`,[...d.params,25])||[]).map(a=>aL(a))}catch(a){return console.error("[analytics] Failed to build problem clients:",a?.message||a),[]}}(a,b,c),h=aM(a,b,c,{dimension:"apiKey",order:"tokens",limit:25}),i=aM(a,b,c,{dimension:"sourceIp",order:"tokens",limit:25}),j=aM(a,b,c,{dimension:"sourceIp",order:"heavy",limit:25}),k=function(a,b,c){let d=ar(b,c);try{let b=a.all(`WITH base AS (
351
354
  SELECT
352
355
  CASE
353
356
  WHEN promptTokens < 2000 THEN 'lt2k'
@@ -405,14 +408,14 @@
405
408
  MIN(CASE WHEN ttftMs > 0 AND ttftRank >= ((cnt * 95 + 99) / 100) THEN ttftMs END) AS p95TtftMs
406
409
  FROM ranked
407
410
  GROUP BY bucketKey, label, sortOrder
408
- ORDER BY sortOrder ASC`,d.params)||[],c=b.reduce((a,b)=>a+X(b.requests,0),0);return b.map(a=>({key:a.key,label:a.label,requests:X(a.requests,0),share:c?X(a.requests,0)/c:0,promptTokens:X(a.promptTokens,0),completionTokens:X(a.completionTokens,0),totalTokens:X(a.totalTokens,0),avgPromptTokens:X(a.avgPromptTokens,0),maxPromptTokens:X(a.maxPromptTokens,0),avgLatencyMs:X(a.avgLatencyMs,null),p95LatencyMs:X(a.p95LatencyMs,null),maxLatencyMs:X(a.maxLatencyMs,null),avgTtftMs:X(a.avgTtftMs,null),p95TtftMs:X(a.p95TtftMs,null)}))}catch(a){return console.error("[analytics] Failed to build input size buckets:",a?.message||a),[]}}(a,b,c),l=f[0]||null,m=h[0]||null,n=i[0]||null,o=j[0]||null,p=f.reduce((a,b)=>a+X(b.totalTokens,0),0),q=X(d.totalTokens,0),r=l&&q?X(l.totalTokens,0)/q:0,s=m&&q?X(m.totalTokens,0)/q:0,t=n&&q?X(n.totalTokens,0)/q:0,u=k.filter(a=>["30k-50k","50k-70k",">=70k"].includes(a.label)).reduce((a,b)=>a+X(b.share,0),0),v=k.find(a=>">=70k"===a.label)||null;return{summary:{trackedUsers:f.length,topUserLabel:l?.label||"-",topUserTokens:l?.totalTokens||0,topUserTokenShare:r,topUsersTokenShare:q?p/q:0,topApiKeyLabel:m?.label||"-",topApiKeyTokens:m?.totalTokens||0,topApiKeyTokenShare:s,topSourceIpLabel:n?.label||"-",topSourceIpTokens:n?.totalTokens||0,topSourceIpTokenShare:t,topSourceIpHeavyLabel:o?.label||"-",topSourceIpHeavyRequests:o?.heavyRequests||0,longInputBucketShare:u,extremeInputShare:v?.share||0,problemClients:g.length},topHeavyUsers:f,topProblemClients:g,topApiKeysByTokens:h,topSourceIpsByTokens:i,topSourceIpsByHeavyRequests:j,inputBuckets:k}}function aL({overview:a,groups:b,promptLogStats:c,requestErrorStats:d,experience:e,clientRequests:f}){let g=[],h=d?.summary||{},i=X(h.serverImpacting,0),j=X(h.client,0),k=X(h.rateLimit,0),l=X(a.serverErrorRate,a.requests?i/a.requests:0),m=X(a.clientErrorRate,a.requests?j/a.requests:0);a.requests>=10&&i>=3&&l>=.05?g.push({level:l>=.15?"danger":"warning",title:"Tỷ lệ lỗi server/provider cao",detail:`${i.toLocaleString("vi-VN")} lỗi server-impacting (${(100*l).toFixed(1)}% request) trong khoảng thời gian đang lọc. Ưu ti\xean kiểm tra upstream/provider, gateway, timeout v\xe0 5xx.`}):a.requests>=10&&a.errorRate>=.2&&m>=.1?g.push({level:"warning",title:"Nhiều lỗi do client/request",detail:`${j.toLocaleString("vi-VN")} lỗi được ph\xe2n loại l\xe0 client-side (${(100*m).toFixed(1)}% request): sai endpoint/model/auth/body/context. Kh\xf4ng n\xean t\xednh nh\xf3m n\xe0y như lỗi server.`}):a.requests>=10&&a.errorRate>=.2&&g.push({level:"warning",title:"Tỷ lệ lỗi tổng cao",detail:`Tổng lỗi usage l\xe0 ${(100*a.errorRate).toFixed(1)}%, nhưng lỗi server-impacting chỉ ${(100*l).toFixed(1)}%. Xem ph\xe2n loại client/server b\xean dưới trước khi kết luận provider hỏng.`}),k>=5&&a.requests>0&&k/a.requests>=.05&&g.push({level:"warning",title:"Rate limit / quota đ\xe1ng ch\xfa \xfd",detail:`${k.toLocaleString("vi-VN")} lỗi rate-limit/quota trong khoảng lọc. Kiểm tra policy API key, quota provider hoặc ph\xe2n tải model.`});let n=b.apiKeys?.[0];n&&a.totalTokens>0&&n.totalTokens/a.totalTokens>=.5&&g.push({level:"warning",title:"Một API key d\xf9ng phần lớn token",detail:`${n.name||n.fingerprint} đang d\xf9ng ${(n.totalTokens/a.totalTokens*100).toFixed(1)}% tổng token.`});let o=c?.topClientIps?.[0];o&&c.total>0&&o.requests/c.total>=.5&&o.requests>=20&&g.push({level:"warning",title:"Một IP chiếm phần lớn request prompt log",detail:`${o.label} chiếm ${(o.requests/c.total*100).toFixed(1)}% prompt logs trong to\xe0n bộ dữ liệu khớp bộ lọc.`});let p=d?.topServerErrors?.[0];return p&&p.requests>=5&&g.push({level:p.requests>=20?"danger":"warning",title:"Provider/Gateway c\xf3 lỗi cần xử l\xfd",detail:`${p.provider||p.errorSource||"unknown"}/${p.model||"unknown"} c\xf3 ${p.requests.toLocaleString("vi-VN")} lỗi ${p.errorType||p.status||"server-impacting"}.`}),e?.samples>=10&&X(e.slowRequestRate,0)>=.2&&g.push({level:e.slowRequestRate>=.4?"danger":"warning",title:"Nhiều request phản hồi chậm",detail:`${(100*e.slowRequestRate).toFixed(1)}% request th\xe0nh c\xf4ng c\xf3 latency >= 45s. Kiểm tra request input d\xe0i, chờ slot/upstream queue v\xe0 tải model server.`}),e?.samples>=10&&X(e.longInputRate,0)>=.3&&g.push({level:"warning",title:"Tỷ lệ request input d\xe0i cao",detail:`${(100*e.longInputRate).toFixed(1)}% request c\xf3 input >= 30k token. Với VS Code/agent, P95/P99 latency cao c\xf3 thể chủ yếu do prompt eval v\xe0 chờ slot, kh\xf4ng phải do output chậm.`}),f?.summary?.topUserTokenShare>=.35&&g.push({level:f.summary.topUserTokenShare>=.6?"danger":"warning",title:"Token usage tập trung v\xe0o một user/API key",detail:`${f.summary.topUserLabel||"Một client"} đang chiếm ${(100*f.summary.topUserTokenShare).toFixed(1)}% tổng token trong khoảng lọc. N\xean kiểm tra quota, workflow VS Code/agent v\xe0 request input d\xe0i của client n\xe0y.`}),f?.summary?.extremeInputShare>=.1&&g.push({level:f.summary.extremeInputShare>=.25?"danger":"warning",title:"Nhiều request cực d\xe0i >=70k token",detail:`${(100*f.summary.extremeInputShare).toFixed(1)}% request th\xe0nh c\xf4ng c\xf3 input >=70k token. Đ\xe2y l\xe0 nh\xf3m dễ k\xe9o TTFT/P95/P99 l\xean cao v\xe0 l\xe0m request nhỏ phải chờ slot.`}),g}function aM(a){let b=String(a??"");return/[",\n\r]/.test(b)?`"${b.replace(/"/g,'""')}"`:b}let aN=new Set(["overview","apiKeys","clients","sources","providers","experience","errors","raw","all"]);function aO(a){let b=V(a);return aN.has(b)?b:"all"}function aP(a={}){return{disabled:!1,missing:!1,total:0,sampled:0,dbInfo:{},models:[],stages:[],topClientIps:[],topSourceTools:[],topSessions:[],topStages:[],topModels:[],topAccounts:[],topStatuses:[],...a}}function aQ(a={}){return{disabled:!1,total:0,summary:{total:0,serverImpacting:0,gateway:0,upstream:0,client:0,rateLimit:0,unknown:0,serverImpactingRate:0,clientRate:0,rateLimitRate:0},topErrors:[],topServerErrors:[],topClientErrors:[],topRateLimitErrors:[],byFaultOwner:[],byStatusCode:[],byStatusClass:[],byErrorType:[],byErrorSource:[],byProvider:[],byModel:[],byClientIp:[],bySourceTool:[],recent:[],...a}}function aR(a={}){return{providers:[],models:[],providerAccounts:[],endpoints:[],apiKeys:[],statuses:[],errors:[],...a}}function aS(a={}){return{samples:0,ttftSamples:0,inputSamples:0,outputSamples:0,label:"Chưa c\xf3 mẫu",level:"none",tone:"slate",score:null,thresholds:{slowLatencyMs:45e3,verySlowLatencyMs:9e4,slowTtftMs:2e4,longInputTokens:3e4,hugeInputTokens:5e4,extremeInputTokens:7e4},byModel:[],slowestRequests:[],...a}}function aT(a={}){return{summary:{trackedUsers:0,topUserLabel:"-",topUserTokens:0,topUserTokenShare:0,topUsersTokenShare:0,topApiKeyLabel:"-",topApiKeyTokens:0,topApiKeyTokenShare:0,topSourceIpLabel:"-",topSourceIpTokens:0,topSourceIpTokenShare:0,topSourceIpHeavyLabel:"-",topSourceIpHeavyRequests:0,longInputBucketShare:0,extremeInputShare:0,problemClients:0},topHeavyUsers:[],topProblemClients:[],topApiKeysByTokens:[],topSourceIpsByTokens:[],topSourceIpsByHeavyRequests:[],inputBuckets:[],...a}}function aU(a){return{keyword:a.keyword,provider:a.provider,model:a.model,connectionId:a.connectionId,endpoint:a.endpoint,apiKey:a.apiKey,status:a.status,sourceTool:a.sourceTool,clientIp:a.clientIp,sessionId:a.sessionId,dateFrom:a.startIso,dateTo:a.endIso}}function aV(a){return{keyword:a.keyword,model:a.model,sourceTool:a.sourceTool,clientIp:a.clientIp,sessionId:a.sessionId,dateFrom:a.startIso,dateTo:a.endIso}}async function aW(a={}){var b,c;let d,e,f,g,h,i=aO(a.scope),j=JSON.stringify({scope:aO(a.scope),filters:ab(a)}),k=(global._dashboardAnalyticsV2Cache||(global._dashboardAnalyticsV2Cache=new Map),global._dashboardAnalyticsV2Cache),l=k.get(j);if(l&&Date.now()-l.createdAt<15e3)return l.data;let m=ab(a),n=await (0,w.c)(),[o,p]=await Promise.all([ad(n),ae(n)]),q=function(a,b){let c=W(a);if(!c)return null;let d=[],e=!1;for(let a of(["local","local-no-key","no-key","khong-key","kh\xf4ng-key","kh\xf4ng d\xf9ng api key"].some(a=>a.includes(c)||c.includes(a))&&(e=!0),b.all||[]))[a.key,a.id,a.name,a.ownerUser,a.createdByUser,a.machineId,a.fingerprint,a.masked].some(a=>W(a).includes(c))&&a.key&&d.push(a.key);return a.length>=16&&!d.includes(a)&&d.push(a),{keys:[...new Set(d)],includeLocal:e,noMatch:0===d.length&&!e,filter:c}}(m.apiKey,o),r=new Map([...o.byKey.entries(),...o.byFingerprint.entries()]),s=aP(),t=aQ(),u={},v={},x=aS(),y=aT(),z=[],A=aR(),B=[],C=[],D=[],E=["all","overview","clients","sources","experience","errors"].includes(i),F=["all","sources"].includes(i),G=["all","overview","errors"].includes(i);if(F&&G?[s,t]=await Promise.all([M(aV(m)),(0,N.Wl)(aU(m))]):F?s=await M(aV(m)):G&&(t=await (0,N.Wl)(aU(m))),E&&(d=ah(m,q),f=function(a={}){return ag({requests:X(a.requests,0),success:X(a.success,0),errors:X(a.errors,0),pending:X(a.pending,0),promptTokens:X(a.promptTokens,0),completionTokens:X(a.completionTokens,0),totalTokens:X(a.totalTokens,0),cachedTokens:X(a.cachedTokens,0),reasoningTokens:X(a.reasoningTokens,0),cost:X(a.cost,0),lastSeen:a.lastSeen||""})}(e=n.get(`SELECT
411
+ ORDER BY sortOrder ASC`,d.params)||[],c=b.reduce((a,b)=>a+X(b.requests,0),0);return b.map(a=>({key:a.key,label:a.label,requests:X(a.requests,0),share:c?X(a.requests,0)/c:0,promptTokens:X(a.promptTokens,0),completionTokens:X(a.completionTokens,0),totalTokens:X(a.totalTokens,0),avgPromptTokens:X(a.avgPromptTokens,0),maxPromptTokens:X(a.maxPromptTokens,0),avgLatencyMs:X(a.avgLatencyMs,null),p95LatencyMs:X(a.p95LatencyMs,null),maxLatencyMs:X(a.maxLatencyMs,null),avgTtftMs:X(a.avgTtftMs,null),p95TtftMs:X(a.p95TtftMs,null)}))}catch(a){return console.error("[analytics] Failed to build input size buckets:",a?.message||a),[]}}(a,b,c),l=f[0]||null,m=h[0]||null,n=i[0]||null,o=j[0]||null,p=f.reduce((a,b)=>a+X(b.totalTokens,0),0),q=X(d.totalTokens,0),r=l&&q?X(l.totalTokens,0)/q:0,s=m&&q?X(m.totalTokens,0)/q:0,t=n&&q?X(n.totalTokens,0)/q:0,u=k.filter(a=>["30k-50k","50k-70k",">=70k"].includes(a.label)).reduce((a,b)=>a+X(b.share,0),0),v=k.find(a=>">=70k"===a.label)||null;return{summary:{trackedUsers:f.length,topUserLabel:l?.label||"-",topUserTokens:l?.totalTokens||0,topUserTokenShare:r,topUsersTokenShare:q?p/q:0,topApiKeyLabel:m?.label||"-",topApiKeyTokens:m?.totalTokens||0,topApiKeyTokenShare:s,topSourceIpLabel:n?.label||"-",topSourceIpTokens:n?.totalTokens||0,topSourceIpTokenShare:t,topSourceIpHeavyLabel:o?.label||"-",topSourceIpHeavyRequests:o?.heavyRequests||0,longInputBucketShare:u,extremeInputShare:v?.share||0,problemClients:g.length},topHeavyUsers:f,topProblemClients:g,topApiKeysByTokens:h,topSourceIpsByTokens:i,topSourceIpsByHeavyRequests:j,inputBuckets:k}}function aO({overview:a,groups:b,promptLogStats:c,requestErrorStats:d,experience:e,clientRequests:f}){let g=[],h=d?.summary||{},i=X(h.serverImpacting,0),j=X(h.client,0),k=X(h.rateLimit,0),l=X(a.serverErrorRate,a.requests?i/a.requests:0),m=X(a.clientErrorRate,a.requests?j/a.requests:0);a.requests>=10&&i>=3&&l>=.05?g.push({level:l>=.15?"danger":"warning",title:"Tỷ lệ lỗi server/provider cao",detail:`${i.toLocaleString("vi-VN")} lỗi server-impacting (${(100*l).toFixed(1)}% request) trong khoảng thời gian đang lọc. Ưu ti\xean kiểm tra upstream/provider, gateway, timeout v\xe0 5xx.`}):a.requests>=10&&a.errorRate>=.2&&m>=.1?g.push({level:"warning",title:"Nhiều lỗi do client/request",detail:`${j.toLocaleString("vi-VN")} lỗi được ph\xe2n loại l\xe0 client-side (${(100*m).toFixed(1)}% request): sai endpoint/model/auth/body/context. Kh\xf4ng n\xean t\xednh nh\xf3m n\xe0y như lỗi server.`}):a.requests>=10&&a.errorRate>=.2&&g.push({level:"warning",title:"Tỷ lệ lỗi tổng cao",detail:`Tổng lỗi usage l\xe0 ${(100*a.errorRate).toFixed(1)}%, nhưng lỗi server-impacting chỉ ${(100*l).toFixed(1)}%. Xem ph\xe2n loại client/server b\xean dưới trước khi kết luận provider hỏng.`}),k>=5&&a.requests>0&&k/a.requests>=.05&&g.push({level:"warning",title:"Rate limit / quota đ\xe1ng ch\xfa \xfd",detail:`${k.toLocaleString("vi-VN")} lỗi rate-limit/quota trong khoảng lọc. Kiểm tra policy API key, quota provider hoặc ph\xe2n tải model.`});let n=b.apiKeys?.[0];n&&a.totalTokens>0&&n.totalTokens/a.totalTokens>=.5&&g.push({level:"warning",title:"Một API key d\xf9ng phần lớn token",detail:`${n.name||n.fingerprint} đang d\xf9ng ${(n.totalTokens/a.totalTokens*100).toFixed(1)}% tổng token.`});let o=c?.topClientIps?.[0];o&&c.total>0&&o.requests/c.total>=.5&&o.requests>=20&&g.push({level:"warning",title:"Một IP chiếm phần lớn request prompt log",detail:`${o.label} chiếm ${(o.requests/c.total*100).toFixed(1)}% prompt logs trong to\xe0n bộ dữ liệu khớp bộ lọc.`});let p=d?.topServerErrors?.[0];return p&&p.requests>=5&&g.push({level:p.requests>=20?"danger":"warning",title:"Provider/Gateway c\xf3 lỗi cần xử l\xfd",detail:`${p.provider||p.errorSource||"unknown"}/${p.model||"unknown"} c\xf3 ${p.requests.toLocaleString("vi-VN")} lỗi ${p.errorType||p.status||"server-impacting"}.`}),e?.samples>=10&&X(e.slowRequestRate,0)>=.2&&g.push({level:e.slowRequestRate>=.4?"danger":"warning",title:"Nhiều request phản hồi chậm",detail:`${(100*e.slowRequestRate).toFixed(1)}% request th\xe0nh c\xf4ng c\xf3 latency >= 45s. Kiểm tra request input d\xe0i, chờ slot/upstream queue v\xe0 tải model server.`}),e?.samples>=10&&X(e.longInputRate,0)>=.3&&g.push({level:"warning",title:"Tỷ lệ request input d\xe0i cao",detail:`${(100*e.longInputRate).toFixed(1)}% request c\xf3 input >= 30k token. Với VS Code/agent, P95/P99 latency cao c\xf3 thể chủ yếu do prompt eval v\xe0 chờ slot, kh\xf4ng phải do output chậm.`}),f?.summary?.topUserTokenShare>=.35&&g.push({level:f.summary.topUserTokenShare>=.6?"danger":"warning",title:"Token usage tập trung v\xe0o một user/API key",detail:`${f.summary.topUserLabel||"Một client"} đang chiếm ${(100*f.summary.topUserTokenShare).toFixed(1)}% tổng token trong khoảng lọc. N\xean kiểm tra quota, workflow VS Code/agent v\xe0 request input d\xe0i của client n\xe0y.`}),f?.summary?.extremeInputShare>=.1&&g.push({level:f.summary.extremeInputShare>=.25?"danger":"warning",title:"Nhiều request cực d\xe0i >=70k token",detail:`${(100*f.summary.extremeInputShare).toFixed(1)}% request th\xe0nh c\xf4ng c\xf3 input >=70k token. Đ\xe2y l\xe0 nh\xf3m dễ k\xe9o TTFT/P95/P99 l\xean cao v\xe0 l\xe0m request nhỏ phải chờ slot.`}),g}function aP(a){let b=String(a??"");return/[",\n\r]/.test(b)?`"${b.replace(/"/g,'""')}"`:b}let aQ=new Set(["overview","apiKeys","clients","sources","providers","experience","errors","raw","all"]);function aR(a){let b=V(a);return aQ.has(b)?b:"all"}function aS(a={}){return{disabled:!1,missing:!1,total:0,sampled:0,dbInfo:{},models:[],stages:[],topClientIps:[],topSourceTools:[],topSessions:[],topStages:[],topModels:[],topAccounts:[],topStatuses:[],...a}}function aT(a={}){return{disabled:!1,total:0,summary:{total:0,serverImpacting:0,gateway:0,upstream:0,client:0,rateLimit:0,unknown:0,serverImpactingRate:0,clientRate:0,rateLimitRate:0},topErrors:[],topServerErrors:[],topClientErrors:[],topRateLimitErrors:[],byFaultOwner:[],byStatusCode:[],byStatusClass:[],byErrorType:[],byErrorSource:[],byProvider:[],byModel:[],byClientIp:[],bySourceTool:[],recent:[],...a}}function aU(a={}){return{providers:[],models:[],providerAccounts:[],endpoints:[],apiKeys:[],statuses:[],errors:[],...a}}function aV(a={}){return{samples:0,ttftSamples:0,inputSamples:0,outputSamples:0,label:"Chưa c\xf3 mẫu",level:"none",tone:"slate",score:null,thresholds:{slowLatencyMs:45e3,verySlowLatencyMs:9e4,slowTtftMs:2e4,longInputTokens:3e4,hugeInputTokens:5e4,extremeInputTokens:7e4},byModel:[],slowestRequests:[],...a}}function aW(a={}){return{summary:{trackedUsers:0,topUserLabel:"-",topUserTokens:0,topUserTokenShare:0,topUsersTokenShare:0,topApiKeyLabel:"-",topApiKeyTokens:0,topApiKeyTokenShare:0,topSourceIpLabel:"-",topSourceIpTokens:0,topSourceIpTokenShare:0,topSourceIpHeavyLabel:"-",topSourceIpHeavyRequests:0,longInputBucketShare:0,extremeInputShare:0,problemClients:0},topHeavyUsers:[],topProblemClients:[],topApiKeysByTokens:[],topSourceIpsByTokens:[],topSourceIpsByHeavyRequests:[],inputBuckets:[],...a}}function aX(a){return{keyword:a.keyword,provider:a.provider,model:a.model,connectionId:a.connectionId,endpoint:a.endpoint,apiKey:a.apiKey,status:a.status,sourceTool:a.sourceTool,clientIp:a.clientIp,sessionId:a.sessionId,dateFrom:a.startIso,dateTo:a.endIso}}function aY(a){return{keyword:a.keyword,model:a.model,sourceTool:a.sourceTool,clientIp:a.clientIp,sessionId:a.sessionId,dateFrom:a.startIso,dateTo:a.endIso}}async function aZ(a={}){var b,c;let d,e,f,g,h,i=aR(a.scope),j=JSON.stringify({scope:aR(a.scope),filters:ab(a)}),k=(global._dashboardAnalyticsV2Cache||(global._dashboardAnalyticsV2Cache=new Map),global._dashboardAnalyticsV2Cache),l=k.get(j);if(l&&Date.now()-l.createdAt<15e3)return l.data;let m=ab(a),n=await (0,w.c)(),[o,p]=await Promise.all([ad(n),ae(n)]),q=function(a,b){let c=W(a);if(!c)return null;let d=[],e=!1;for(let a of(["local","local-no-key","no-key","khong-key","kh\xf4ng-key","kh\xf4ng d\xf9ng api key"].some(a=>a.includes(c)||c.includes(a))&&(e=!0),b.all||[]))[a.key,a.id,a.name,a.ownerUser,a.createdByUser,a.machineId,a.fingerprint,a.masked].some(a=>W(a).includes(c))&&a.key&&d.push(a.key);return a.length>=16&&!d.includes(a)&&d.push(a),{keys:[...new Set(d)],includeLocal:e,noMatch:0===d.length&&!e,filter:c}}(m.apiKey,o),r=new Map([...o.byKey.entries(),...o.byFingerprint.entries()]),s=aS(),t=aT(),u={},v={},x=aV(),y=aW(),z=[],A=aU(),B=[],C=[],D=[],E=["all","overview","clients","sources","experience","errors"].includes(i),F=["all","overview","sources"].includes(i),G=["all","overview","errors"].includes(i);if(F&&G?[s,t]=await Promise.all([M(aY(m)),(0,N.Wl)(aX(m))]):F?s=await M(aY(m)):G&&(t=await (0,N.Wl)(aX(m))),E&&(d=ah(m,q),f=function(a={}){return ag({requests:X(a.requests,0),success:X(a.success,0),errors:X(a.errors,0),pending:X(a.pending,0),promptTokens:X(a.promptTokens,0),completionTokens:X(a.completionTokens,0),totalTokens:X(a.totalTokens,0),cachedTokens:X(a.cachedTokens,0),reasoningTokens:X(a.reasoningTokens,0),cost:X(a.cost,0),lastSeen:a.lastSeen||""})}(e=n.get(`SELECT
409
412
  ${U},
410
413
  COUNT(DISTINCT COALESCE(NULLIF(apiKeyId, ''), NULLIF(apiKeyFingerprint, ''), NULLIF(apiKey, ''))) AS activeApiKeys,
411
414
  COUNT(DISTINCT NULLIF(provider, '')) AS activeProviders,
412
415
  COUNT(DISTINCT NULLIF(model, '')) AS activeModels,
413
416
  COUNT(DISTINCT NULLIF(endpoint, '')) AS activeEndpoints
414
417
  FROM usageHistory
415
- ${d.clause}`,d.params)||{}),g=m.start&&m.end?Math.max(1,(m.end.getTime()-m.start.getTime())/6e4):1,b={...f,activeApiKeys:X(e.activeApiKeys,0),activeProviders:X(e.activeProviders,0),activeModels:X(e.activeModels,0),activeEndpoints:X(e.activeEndpoints,0),requestsPerMinute:f.requests/g,tokensPerMinute:f.totalTokens/g,inputOutputRatio:f.completionTokens?f.promptTokens/f.completionTokens:f.promptTokens?null:0},c=t,h=c?.summary||{},b.rawErrorEvents=X(c?.total,0),b.serverErrorEvents=X(h.serverImpacting,0),b.gatewayErrorEvents=X(h.gateway,0),b.upstreamErrorEvents=X(h.upstream,0),b.clientErrorEvents=X(h.client,0),b.rateLimitErrorEvents=X(h.rateLimit,0),b.unknownErrorEvents=X(h.unknown,0),b.serverErrorRate=b.requests?b.serverErrorEvents/b.requests:0,b.clientErrorRate=b.requests?b.clientErrorEvents/b.requests:0,b.rateLimitErrorRate=b.requests?b.rateLimitErrorEvents/b.requests:0,u=b),"all"===i){let a=aj(n,m,q);A=an(n,m,o,p,q),t?.topErrors?.length&&(A.errors=t.topErrors),v=aq(n,m,q),(x=av(n,m,q,u)).byModel=aw(n,m,q,p),y=aK(n,m,q,u,p),z=ao(n,m,q,a),B=az(n,m,q,r,p),C=aA(n,m,q,r,p),x.slowestRequests=ax(n,m,q,r,p),u.userExperienceScore=x.score,u.userExperienceLabel=x.label,u.slowRequestRate=x.slowRequestRate,u.longInputRate=x.longInputRate,u.topHeavyUser=y.summary?.topUserLabel||"",u.topHeavyUserTokenShare=y.summary?.topUserTokenShare||0,u.extremeInputShare=y.summary?.extremeInputShare||0,D=aL({overview:u,groups:A,promptLogStats:s,requestErrorStats:t,experience:x,clientRequests:y})}else if("overview"===i){let a=aj(n,m,q);v=aq(n,m,q),x=av(n,m,q,u),y=aK(n,m,q,u,p),z=ao(n,m,q,a),u.userExperienceScore=x.score,u.userExperienceLabel=x.label,u.slowRequestRate=x.slowRequestRate,u.longInputRate=x.longInputRate,u.topHeavyUser=y.summary?.topUserLabel||"",u.topHeavyUserTokenShare=y.summary?.topUserTokenShare||0,u.extremeInputShare=y.summary?.extremeInputShare||0,D=aL({overview:u,groups:A,promptLogStats:s,requestErrorStats:t,experience:x,clientRequests:y})}else if("apiKeys"===i||"providers"===i)A=an(n,m,o,p,q);else if("clients"===i)y=aK(n,m,q,u,p);else if("sources"===i)y=aK(n,m,q,u,p);else if("experience"===i)v=aq(n,m,q),(x=av(n,m,q,u)).byModel=aw(n,m,q,p),x.slowestRequests=ax(n,m,q,r,p),u.userExperienceScore=x.score,u.userExperienceLabel=x.label,u.slowRequestRate=x.slowRequestRate,u.longInputRate=x.longInputRate;else if("errors"===i){let a,b,c;a=al(n,m,q,"COALESCE(NULLIF(status, ''), 'ok') AS key, COALESCE(NULLIF(status, ''), 'ok') AS label","COALESCE(NULLIF(status, ''), 'ok')"),b=ah(m,q),c=n.all(`SELECT
418
+ ${d.clause}`,d.params)||{}),g=m.start&&m.end?Math.max(1,(m.end.getTime()-m.start.getTime())/6e4):1,b={...f,activeApiKeys:X(e.activeApiKeys,0),activeProviders:X(e.activeProviders,0),activeModels:X(e.activeModels,0),activeEndpoints:X(e.activeEndpoints,0),requestsPerMinute:f.requests/g,tokensPerMinute:f.totalTokens/g,inputOutputRatio:f.completionTokens?f.promptTokens/f.completionTokens:f.promptTokens?null:0},c=t,h=c?.summary||{},b.rawErrorEvents=X(c?.total,0),b.serverErrorEvents=X(h.serverImpacting,0),b.gatewayErrorEvents=X(h.gateway,0),b.upstreamErrorEvents=X(h.upstream,0),b.clientErrorEvents=X(h.client,0),b.rateLimitErrorEvents=X(h.rateLimit,0),b.unknownErrorEvents=X(h.unknown,0),b.serverErrorRate=b.requests?b.serverErrorEvents/b.requests:0,b.clientErrorRate=b.requests?b.clientErrorEvents/b.requests:0,b.rateLimitErrorRate=b.requests?b.rateLimitErrorEvents/b.requests:0,u=b),"all"===i){let a=aj(n,m,q);A=an(n,m,o,p,q),t?.topErrors?.length&&(A.errors=t.topErrors),v=aq(n,m,q),(x=av(n,m,q,u)).byModel=aw(n,m,q,p),y=aN(n,m,q,u,p),z=ao(n,m,q,a),B=az(n,m,q,r,p),C=aA(n,m,q,r,p),x.slowestRequests=ax(n,m,q,r,p),u.userExperienceScore=x.score,u.userExperienceLabel=x.label,u.slowRequestRate=x.slowRequestRate,u.longInputRate=x.longInputRate,u.topHeavyUser=y.summary?.topUserLabel||"",u.topHeavyUserTokenShare=y.summary?.topUserTokenShare||0,u.extremeInputShare=y.summary?.extremeInputShare||0,D=aO({overview:u,groups:A,promptLogStats:s,requestErrorStats:t,experience:x,clientRequests:y})}else if("overview"===i){let a=aj(n,m,q);v=aq(n,m,q),x=av(n,m,q,u),y=aN(n,m,q,u,p),z=ao(n,m,q,a),u.userExperienceScore=x.score,u.userExperienceLabel=x.label,u.slowRequestRate=x.slowRequestRate,u.longInputRate=x.longInputRate,u.topHeavyUser=y.summary?.topUserLabel||"",u.topHeavyUserTokenShare=y.summary?.topUserTokenShare||0,u.extremeInputShare=y.summary?.extremeInputShare||0,D=aO({overview:u,groups:A,promptLogStats:s,requestErrorStats:t,experience:x,clientRequests:y})}else if("apiKeys"===i||"providers"===i)A=an(n,m,o,p,q);else if("clients"===i)y=aN(n,m,q,u,p);else if("sources"===i)y=aN(n,m,q,u,p);else if("experience"===i)v=aq(n,m,q),(x=av(n,m,q,u)).byModel=aw(n,m,q,p),x.slowestRequests=ax(n,m,q,r,p),u.userExperienceScore=x.score,u.userExperienceLabel=x.label,u.slowRequestRate=x.slowRequestRate,u.longInputRate=x.longInputRate;else if("errors"===i){let a,b,c;a=al(n,m,q,"COALESCE(NULLIF(status, ''), 'ok') AS key, COALESCE(NULLIF(status, ''), 'ok') AS label","COALESCE(NULLIF(status, ''), 'ok')"),b=ah(m,q),c=n.all(`SELECT
416
419
  COALESCE(NULLIF(status, ''), 'error') AS status,
417
420
  COALESCE(NULLIF(provider, ''), 'unknown') AS provider,
418
421
  COALESCE(NULLIF(model, ''), 'unknown') AS model,
@@ -424,10 +427,7 @@
424
427
  ${b.clause?`${b.clause} AND NOT ${R} AND NOT ${S}`:`WHERE NOT ${R} AND NOT ${S}`}
425
428
  GROUP BY COALESCE(NULLIF(status, ''), 'error'), COALESCE(NULLIF(provider, ''), 'unknown'), COALESCE(NULLIF(model, ''), 'unknown'), COALESCE(NULLIF(endpoint, ''), 'unknown'), COALESCE(NULLIF(apiKeyId, ''), NULLIF(apiKeyFingerprint, ''), NULLIF(apiKey, ''), 'local-no-key')
426
429
  ORDER BY errors DESC, requests DESC, lastSeen DESC
427
- LIMIT ?`,[...b.params,100])||[],A=aR({statuses:a.map(a=>ak(a)),errors:c.map(a=>{let b="local-no-key"===a.rawApiKey?"":a.rawApiKey,c=o.byKey.get(b)||o.byFingerprint.get(b)||o.all.find(a=>a.id===b);return ak(a,{label:a.status||"error",status:a.status||"error",provider:a.provider||"unknown",providerLabel:af(a.provider,p),model:a.model||"unknown",endpoint:a.endpoint||"unknown",apiKey:c?.fingerprint||ac(b)})})}),t?.topErrors?.length&&(A.errors=t.topErrors),D=aL({overview:u,groups:A,promptLogStats:s,requestErrorStats:t,experience:x,clientRequests:y})}else"raw"===i&&(B=az(n,m,q,r,p),C=aA(n,m,q,r,p));let H=function(a,b,c,d,e=new Map){let f=function(a,b,c,d){let e=aD(a,b,"provider",500),f=aD(a,b,"model",1e3),g=aD(a,b,"endpoint",500),h=aD(a,b,"status",200),i=aD(a,b,"connectionId",1e3).map(a=>{let b=c.get(a),d=b?.name?`${b.name}${b.provider?` \xb7 ${b.provider}`:""}`:a;return{value:a,label:d}}),j=[];for(let c of(function(a,b){let c=ah(aC(b),null),d=c.clause?`${c.clause} AND`:"WHERE";try{let b=a.get(`SELECT 1 AS hasLocal
428
- FROM usageHistory
429
- ${d} (apiKey IS NULL OR apiKey = '')
430
- LIMIT 1`,c.params);return!!b?.hasLocal}catch{return!1}}(a,b)&&j.push({value:"local-no-key",label:"Local / kh\xf4ng d\xf9ng API key"}),d.all.slice(0,500)))j.push({value:c.fingerprint,label:`${c.name||c.fingerprint}${c.ownerUser?` \xb7 ${c.ownerUser}`:""}`});aB(i,b.connectionId,b.connectionId),aB(j,b.apiKey,b.apiKey);let k=e.map(a=>({value:a,label:af(a,c)})),l=f.map(a=>({value:a,label:a})),m=g.map(a=>({value:a,label:a})),n=h.map(a=>({value:a,label:a}));return aB(k,b.provider,b.provider),aB(l,b.model,b.model),aB(m,b.endpoint,b.endpoint),aB(n,b.status,b.status),{providers:k,models:l.map(a=>a.value),endpoints:m.map(a=>a.value),statuses:n.map(a=>a.value),connections:i,apiKeys:j,clientIps:[],sourceTools:[]}}(a,b,e,d);return f.clientIps=(c.topClientIps||[]).map(a=>a.key).filter(Boolean),f.sourceTools=(c.topSourceTools||[]).map(a=>a.key).filter(Boolean),f}(n,m,s,o,p),I=function(a,b,c,d,e,f){let g=["Analytics v3 đang d\xf9ng SQL aggregate tr\xean usageHistory v\xe0 Prompt Logs: KPI, group, time-series, top request/IP/tool/session được tổng hợp ở DB thay v\xec k\xe9o h\xe0ng chục ngh\xecn raw rows về Node.js."];if(c?.noMatch&&g.push("Bộ lọc API key kh\xf4ng khớp API key n\xe0o đang c\xf3, n\xean usage metrics trả về rỗng để tr\xe1nh scan to\xe0n bộ usageHistory bằng LIKE."),b.total>0&&g.push(`Prompt log analytics đang d\xf9ng SQL aggregate tr\xean to\xe0n bộ ${b.total.toLocaleString("vi-VN")} d\xf2ng khớp bộ lọc.`),e?.samples>0&&g.push(`User experience metrics đang t\xednh tr\xean ${e.samples.toLocaleString("vi-VN")} request th\xe0nh c\xf4ng c\xf3 token v\xe0 latency > 0; success 0-token, pending v\xe0 error được loại khỏi nh\xf3m trải nghiệm để kh\xf4ng l\xe0m sai đ\xe1nh gi\xe1 tốc độ model.`),f?.topHeavyUsers?.length&&g.push("Client request monitor bổ sung top user/API key gửi request nặng nhất, top API key/IP d\xf9ng nhiều token nhất, top IP c\xf3 nhiều request nặng, ph\xe2n bố input token theo bucket v\xe0 client c\xf3 lỗi nhiều; c\xe1c bảng n\xe0y chỉ hiển thị API key fingerprint/masked metadata, kh\xf4ng lộ full bearer token."),arguments.length>=4){let a=arguments[3];if(a?.total>0){let b=a.summary||{};g.push(`Request error events đang d\xf9ng SQL aggregate tr\xean to\xe0n bộ ${a.total.toLocaleString("vi-VN")} lỗi khớp bộ lọc trong Prompt Log DB; trong đ\xf3 ${X(b.serverImpacting,0).toLocaleString("vi-VN")} lỗi được ph\xe2n loại l\xe0 server/provider-impacting v\xe0 ${X(b.client,0).toLocaleString("vi-VN")} lỗi do client/request.`)}}return(a.clientIp||a.sourceTool||a.sessionId||a.keyword)&&g.push("Bộ lọc Source IP / Source tool / Session / Keyword \xe1p dụng cho Prompt Logs bằng SQL aggregate. Với request mới sau migration v3, UsageHistory cũng lưu clientIp/sourceTool/session để token/cost c\xf3 thể lọc ch\xednh x\xe1c hơn; dữ liệu cũ trước migration c\xf3 thể chưa c\xf3 c\xe1c field n\xe0y."),b.disabled&&g.push("Prompt Log Database đang tắt, phần thống k\xea Source IP / tool / session sẽ kh\xf4ng c\xf3 dữ liệu."),g}(m,s,q,t,x,y),J=function({scope:a,filters:b,overview:c={},latency:d={},experience:e=aS(),clientRequests:f=aT(),timeSeries:g=[],groups:h=aR(),promptLogStats:i=aP(),requestErrorStats:j=aQ(),anomalies:k=[],recentUsage:l=[],heavyRequests:m=[],options:n={},qualityNotes:o=[]}){return{generatedAt:new Date().toISOString(),analyticsVersion:"v3.6-scoped-analytics",scope:a,filters:{period:b.period,startIso:b.startIso,endIso:b.endIso,provider:b.provider,model:b.model,connectionId:b.connectionId,status:b.status,endpoint:b.endpoint,apiKey:b.apiKey,clientIp:b.clientIp,sourceTool:b.sourceTool,sessionId:b.sessionId,keyword:b.keyword},overview:c,latency:d,experience:e,clientRequests:f,timeSeries:g,groups:h,promptLogs:i,requestErrors:j,anomalies:k,recentUsage:l,heavyRequests:m,options:n,qualityNotes:o}}({scope:i,filters:m,overview:u,latency:v,experience:x,clientRequests:y,timeSeries:z,groups:A,promptLogStats:s,requestErrorStats:t,anomalies:D,recentUsage:B,heavyRequests:C,options:H,qualityNotes:I});if(k.set(j,{createdAt:Date.now(),data:J}),k.size>100){for(let[a,b]of k)if(Date.now()-b.createdAt>15e3&&k.delete(a),k.size<=100)break}return J}var aX=c(9588);let aY="force-dynamic",aZ=["period","dateFrom","dateTo","provider","model","connectionId","status","endpoint","apiKey","clientIp","sourceIp","sourceTool","sessionId","keyword","maxPromptLogRows"];async function a$(a){try{let{response:b}=await (0,aX.hH)({allowMonitorAdmin:!0});if(b)return b;let{searchParams:c}=new URL(a.url),d=function(a){let b={};for(let c of aZ){let d=a.get(c);null!==d&&""!==String(d).trim()&&(b[c]=d)}return b}(c),e=String(c.get("scope")||"").trim(),f="csv"===c.get("format"),g=await aW({...d,scope:f?"all":e});if(f){let a=(function(a){let b=[];for(let[c,d]of(b.push(["section","key","label","requests","success","errors","errorRate","inputTokens","outputTokens","totalTokens","cost","lastSeen"]),[["providers",a.groups.providers],["models",a.groups.models],["providerAccounts",a.groups.providerAccounts],["apiKeys",a.groups.apiKeys],["endpoints",a.groups.endpoints],["clientIps",a.promptLogs.topClientIps],["sourceTools",a.promptLogs.topSourceTools],["requestErrors",a.requestErrors?.topErrors||a.groups.errors],["modelExperience",a.experience?.byModel||[]],["clientHeavyUsers",a.clientRequests?.topHeavyUsers||[]],["clientTopApiKeysByTokens",a.clientRequests?.topApiKeysByTokens||[]],["clientTopSourceIpsByTokens",a.clientRequests?.topSourceIpsByTokens||[]],["clientTopSourceIpsByHeavyRequests",a.clientRequests?.topSourceIpsByHeavyRequests||[]],["clientProblemClients",a.clientRequests?.topProblemClients||[]],["inputBuckets",a.clientRequests?.inputBuckets||[]]]))for(let a of d||[])b.push([c,a.key||"",a.label||a.name||"",a.requests||0,a.success||0,a.errors||0,a.errorRate||0,a.promptTokens||0,a.completionTokens||0,a.totalTokens||0,a.cost||0,a.lastSeen||""]);return b})(g).map(a=>a.map(aM).join(",")).join("\n");return new Response(a,{status:200,headers:{"Content-Type":"text/csv; charset=utf-8","Content-Disposition":`attachment; filename="bluerouter-analytics-${new Date().toISOString().slice(0,10)}.csv"`,"Cache-Control":"no-store"}})}return v.NextResponse.json(g,{headers:{"Cache-Control":"no-store"}})}catch(a){return console.error("[analytics] Failed to build dashboard analytics:",a),v.NextResponse.json({error:a?.message||"Failed to build dashboard analytics"},{status:500})}}let a_=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/api/dashboard/analytics/route",pathname:"/api/dashboard/analytics",filename:"route",bundlePath:"app/api/dashboard/analytics/route"},distDir:".next-cli-build",relativeProjectDir:"",resolvedPagePath:"D:\\bluerouter\\src\\app\\api\\dashboard\\analytics\\route.js",nextConfigOutput:"standalone",userland:d,...{}}),{workAsyncStorage:a0,workUnitAsyncStorage:a1,serverHooks:a2}=a_;function a3(){return(0,g.patchFetch)({workAsyncStorage:a0,workUnitAsyncStorage:a1})}async function a4(a,b,c){c.requestMeta&&(0,h.setRequestMeta)(a,c.requestMeta),a_.isDev&&(0,h.addRequestMeta)(a,"devRequestTimingInternalsEnd",process.hrtime.bigint());let d="/api/dashboard/analytics/route";"/index"===d&&(d="/");let e=await a_.prepare(a,b,{srcPage:d,multiZoneDraftMode:!1});if(!e)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:g,deploymentId:v,params:w,nextConfig:x,parsedUrl:y,isDraftMode:z,prerenderManifest:A,routerServerContext:B,isOnDemandRevalidate:C,revalidateOnlyGenerated:D,resolvedPathname:E,clientReferenceManifest:F,serverActionsManifest:G}=e,H=(0,k.normalizeAppPath)(d),I=!!(A.dynamicRoutes[H]||A.routes[E]),J=async()=>((null==B?void 0:B.render404)?await B.render404(a,b,y,!1):b.end("This page could not be found"),null);if(I&&!z){let a=!!A.routes[E],b=A.dynamicRoutes[H];if(b&&!1===b.fallback&&!a){if(x.adapterPath)return await J();throw new t.NoFallbackError}}let K=null;!I||a_.isDev||z||(K="/index"===(K=E)?"/":K);let L=!0===a_.isDev||!I,M=I&&!L;G&&F&&(0,j.setManifestsSingleton)({page:d,clientReferenceManifest:F,serverActionsManifest:G});let N=a.method||"GET",O=(0,i.getTracer)(),P=O.getActiveScopeSpan(),Q=!!(null==B?void 0:B.isWrappedByNextServer),R=!!(0,h.getRequestMeta)(a,"minimalMode"),S=(0,h.getRequestMeta)(a,"incrementalCache")||await a_.getIncrementalCache(a,x,A,R);null==S||S.resetRequestCache(),globalThis.__incrementalCache=S;let T={params:w,previewProps:A.preview,renderOpts:{experimental:{authInterrupts:!!x.experimental.authInterrupts},cacheComponents:!!x.cacheComponents,supportsDynamicResponse:L,incrementalCache:S,cacheLifeProfiles:x.cacheLife,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d,e)=>a_.onRequestError(a,b,d,e,B)},sharedContext:{buildId:g,deploymentId:v}},U=new l.NodeNextRequest(a),V=new l.NodeNextResponse(b),W=m.NextRequestAdapter.fromNodeNextRequest(U,(0,m.signalFromNodeResponse)(b));try{let e,g=async a=>a_.handle(W,T).finally(()=>{if(!a)return;a.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let c=O.getRootSpanAttributes();if(!c)return;if(c.get("next.span_type")!==n.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${c.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let f=c.get("next.route");if(f){let b=`${N} ${f}`;a.setAttributes({"next.route":f,"http.route":f,"next.span_name":b}),a.updateName(b),e&&e!==a&&(e.setAttribute("http.route",f),e.updateName(b))}else a.updateName(`${N} ${d}`)}),h=async e=>{var h,i;let j=async({previousCacheEntry:f})=>{try{if(!R&&C&&D&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let d=await g(e);a.fetchMetrics=T.renderOpts.fetchMetrics;let h=T.renderOpts.pendingWaitUntil;h&&c.waitUntil&&(c.waitUntil(h),h=void 0);let i=T.renderOpts.collectedTags;if(!I)return await (0,p.I)(U,V,d,T.renderOpts.pendingWaitUntil),null;{let a=await d.blob(),b=(0,q.toNodeOutgoingHttpHeaders)(d.headers);i&&(b[s.NEXT_CACHE_TAGS_HEADER]=i),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==T.renderOpts.collectedRevalidate&&!(T.renderOpts.collectedRevalidate>=s.INFINITE_CACHE)&&T.renderOpts.collectedRevalidate,e=void 0===T.renderOpts.collectedExpire||T.renderOpts.collectedExpire>=s.INFINITE_CACHE?void 0:T.renderOpts.collectedExpire;return{value:{kind:u.CachedRouteKind.APP_ROUTE,status:d.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:e}}}}catch(b){throw(null==f?void 0:f.isStale)&&await a_.onRequestError(a,b,{routerKind:"App Router",routePath:d,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:M,isOnDemandRevalidate:C})},!1,B),b}},k=await a_.handleResponse({req:a,nextConfig:x,cacheKey:K,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:C,revalidateOnlyGenerated:D,responseGenerator:j,waitUntil:c.waitUntil,isMinimalMode:R});if(!I)return null;if((null==k||null==(h=k.value)?void 0:h.kind)!==u.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==k||null==(i=k.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});R||b.setHeader("x-nextjs-cache",C?"REVALIDATED":k.isMiss?"MISS":k.isStale?"STALE":"HIT"),z&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let l=(0,q.fromNodeOutgoingHttpHeaders)(k.value.headers);return R&&I||l.delete(s.NEXT_CACHE_TAGS_HEADER),!k.cacheControl||b.getHeader("Cache-Control")||l.get("Cache-Control")||l.set("Cache-Control",(0,r.getCacheControlHeader)(k.cacheControl)),await (0,p.I)(U,V,new Response(k.value.body,{headers:l,status:k.value.status||200})),null};Q&&P?await h(P):(e=O.getActiveScopeSpan(),await O.withPropagatedContext(a.headers,()=>O.trace(n.BaseServerSpan.handleRequest,{spanName:`${N} ${d}`,kind:i.SpanKind.SERVER,attributes:{"http.method":N,"http.target":a.url}},h),void 0,!Q))}catch(b){if(b instanceof t.NoFallbackError||await a_.onRequestError(a,b,{routerKind:"App Router",routePath:H,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:M,isOnDemandRevalidate:C})},!1,B),I)throw b;return await (0,p.I)(U,V,new Response(null,{status:500})),null}}},63033:a=>{a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},64939:a=>{a.exports=import("pg")},66136:a=>{a.exports=require("timers")},69614:(a,b,c)=>{c.d(b,{V:()=>p});var d=c(88888),e=c(91356),f=c(99129),g=c(73575),h=c(41570),i=c(19035),j=c(24762),k=c(80308),l=c(11980);async function m(a,b,c){if(!(0,i.Gv)(a))throw new f.Ye("Flattened JWS must be an object");if(void 0===a.protected&&void 0===a.header)throw new f.Ye('Flattened JWS must have either of the "protected" or "header" members');if(void 0!==a.protected&&"string"!=typeof a.protected)throw new f.Ye("JWS Protected Header incorrect type");if(void 0===a.payload)throw new f.Ye("JWS Payload missing");if("string"!=typeof a.signature)throw new f.Ye("JWS Signature missing or incorrect type");if(void 0!==a.header&&!(0,i.Gv)(a.header))throw new f.Ye("JWS Unprotected Header incorrect type");let m={};if(a.protected)try{let b=(0,d.D)(a.protected);m=JSON.parse(g.D0.decode(b))}catch{throw new f.Ye("JWS Protected Header is invalid")}if(!(0,i.fz)(m,a.header))throw new f.Ye("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");let n={...m,...a.header},o=(0,k.n)(f.Ye,new Map([["b64",!0]]),c?.crit,m,n),p=!0;if(o.has("b64")&&"boolean"!=typeof(p=m.b64))throw new f.Ye('The "b64" (base64url-encode payload) Header Parameter must be a boolean');let{alg:q}=n;if("string"!=typeof q||!q)throw new f.Ye('JWS "alg" (Algorithm) Header Parameter missing or invalid');let r=c&&function(a,b){if(void 0!==b&&(!Array.isArray(b)||b.some(a=>"string"!=typeof a)))throw TypeError(`"${a}" option must be an array of strings`);if(b)return new Set(b)}("algorithms",c.algorithms);if(r&&!r.has(q))throw new f.Rb('"alg" (Algorithm) Header Parameter value not allowed');if(p){if("string"!=typeof a.payload)throw new f.Ye("JWS Payload must be a string")}else if("string"!=typeof a.payload&&!(a.payload instanceof Uint8Array))throw new f.Ye("JWS Payload must be a string or an Uint8Array instance");let s=!1;"function"==typeof b&&(b=await b(m,a),s=!0),(0,j.y)(q,b,"verify");let t=(0,g.xW)(void 0!==a.protected?(0,g.lF)(a.protected):new Uint8Array,(0,g.lF)("."),"string"==typeof a.payload?p?(0,g.lF)(a.payload):g.Rd.encode(a.payload):a.payload),u=(0,h.h2)(a.signature,"signature",f.Ye),v=await (0,l.l)(b,q);if(!await (0,e.MX)(q,v,u,t))throw new f.h2;let w={payload:p?(0,h.h2)(a.payload,"payload",f.Ye):"string"==typeof a.payload?g.Rd.encode(a.payload):a.payload};return(void 0!==a.protected&&(w.protectedHeader=m),void 0!==a.header&&(w.unprotectedHeader=a.header),s)?{...w,key:v}:w}async function n(a,b,c){if(a instanceof Uint8Array&&(a=g.D0.decode(a)),"string"!=typeof a)throw new f.Ye("Compact JWS must be a string or Uint8Array");let{0:d,1:e,2:h,length:i}=a.split(".");if(3!==i)throw new f.Ye("Invalid Compact JWS");let j=await m({payload:e,protected:d,signature:h},b,c),k={payload:j.payload,protectedHeader:j.protectedHeader};return"function"==typeof b?{...k,key:j.key}:k}var o=c(17347);async function p(a,b,c){let d=await n(a,b,c);if(d.protectedHeader.crit?.includes("b64")&&!1===d.protectedHeader.b64)throw new f.Dp("JWTs MUST NOT use unencoded payload");let e={payload:(0,o.k6)(d.protectedHeader,d.payload,c),protectedHeader:d.protectedHeader};return"function"==typeof b?{...e,key:d.key}:e}},73024:a=>{a.exports=require("node:fs")},74075:a=>{a.exports=require("zlib")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},79428:a=>{a.exports=require("buffer")},79868:a=>{a.exports=require("node:sqlite")},81787:a=>{a.exports=require("bun:sqlite")},86439:a=>{a.exports=require("next/dist/shared/lib/no-fallback-error.external")},87550:a=>{a.exports=require("better-sqlite3")},90389:(a,b,c)=>{c.d(b,{hS:()=>d});let d=Object.freeze({ADMIN:"admin",MONITOR_ADMIN:"monitor_admin",USER:"user",GUEST:"guest"});Object.freeze([{href:"/dashboard/endpoint",label:"Endpoint",icon:"api"},{href:"/dashboard/api-keys",label:"API Keys",icon:"vpn_key"},{href:"/dashboard/usage",label:"Usage",icon:"bar_chart"},{href:"/dashboard/analytics",label:"Analytics",icon:"monitoring"},{href:"/dashboard/quota",label:"Quota Tracker",icon:"data_usage"},{href:"/dashboard/prompt-logs",label:"Prompt Logs",icon:"manage_search"}]),Object.freeze(["/dashboard","/dashboard/endpoint","/dashboard/api-keys","/dashboard/usage","/dashboard/analytics","/dashboard/quota","/dashboard/prompt-logs"])},91645:a=>{a.exports=require("net")},94735:a=>{a.exports=require("events")},94755:(a,b,c)=>{c.d(b,{A:()=>i});var d=c(77598);let e={randomUUID:d.randomUUID},f=new Uint8Array(256),g=f.length;var h=c(50122);let i=function(a,b,c){if(e.randomUUID&&!b&&!a)return e.randomUUID();var i=a,j=c;let k=(i=i||{}).random??i.rng?.()??(g>f.length-16&&((0,d.randomFillSync)(f),g=0),f.slice(g,g+=16));if(k.length<16)throw Error("Random bytes length must be >= 16");if(k[6]=15&k[6]|64,k[8]=63&k[8]|128,b){if((j=j||0)<0||j+16>b.length)throw RangeError(`UUID byte range ${j}:${j+15} is out of buffer bounds`);for(let a=0;a<16;++a)b[j+a]=k[a];return b}return(0,h.k)(k)}},97242:(a,b,c)=>{c.d(b,{DU:()=>s,Ws:()=>t,_3:()=>v,nv:()=>u});var d=c(45903);let e=new Set;function f(a,b,c=null){let d=Number(a);if(!Number.isFinite(d)||d<0)return b;let e=Math.floor(d);return c?Math.min(e,c):e}function g(a){return String(a||"").trim()}async function h(){return(0,d.I6)(await (0,d.L7)())}async function i(a){let b=new(await Promise.resolve().then(c.bind(c,64939))).Client({host:a.host,port:Number(a.port||5432),database:a.database,user:a.username,password:a.password,ssl:!!a.ssl&&{rejectUnauthorized:!1}});return await b.connect(),{type:"postgres",query:async(a,c=[])=>(await b.query(a,c)).rows,queryOne:async(a,c=[])=>(await b.query(a,c)).rows[0]||null,async exec(a,c=[]){await b.query(a,c)},async close(){await b.end()}}}async function j(a){let b=await c.e(8491).then(c.t.bind(c,38491,19)),d=await b.createConnection({host:a.host,port:Number(a.port||3306),database:a.database,user:a.username,password:a.password,ssl:a.ssl?{}:void 0,dateStrings:!0,connectTimeout:3e3});return{type:"mysql",async query(a,b=[]){let[c]=await d.query(a,b);return c},async queryOne(a,b=[]){let[c]=await d.query(a,b);return c[0]||null},async exec(a,b=[]){await d.query(a,b)},async close(){await d.end()}}}async function k(a){if("postgres"===a.type)return i(a);if("mysql"===a.type)return j(a);throw Error(`Unsupported prompt log database type: ${a.type}`)}async function l(a,b){if(!b||b.full_request_json)return b;let c=function(a={}){return String(a.payload_hash||function(a){if(!a)return{};if("object"==typeof a)return a;try{return JSON.parse(a)}catch{return{}}}(a.meta_json).payloadHash||"").trim()}(b);if(!c)return b;try{let d=await a.queryOne("SELECT COUNT(1) AS count FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'prompt_log_payloads'");if(0===Number(d?.count||0))return b;let e=await a.queryOne("SELECT payload_json FROM prompt_log_payloads WHERE payload_hash = ?",[c]);if(!e)return b;let f=e.payload_json;return{...b,full_request_json:"string"==typeof f?f:JSON.stringify(f)}}catch{return b}}async function m(a){let b=await i(a);try{for(let a of["CREATE INDEX IF NOT EXISTS idx_prompt_logs_created_id ON prompt_logs (created_at DESC, id)","CREATE INDEX IF NOT EXISTS idx_prompt_logs_stage_created_at ON prompt_logs (stage, created_at DESC)","CREATE INDEX IF NOT EXISTS idx_prompt_logs_model_created_at ON prompt_logs (model, created_at DESC)","CREATE INDEX IF NOT EXISTS idx_prompt_logs_display_model_created_at ON prompt_logs (display_model, created_at DESC)","CREATE INDEX IF NOT EXISTS idx_prompt_logs_session_created_at ON prompt_logs (session_id, created_at DESC)","CREATE INDEX IF NOT EXISTS idx_prompt_logs_client_ip_created_at ON prompt_logs (client_ip, created_at DESC)","CREATE INDEX IF NOT EXISTS idx_prompt_logs_source_tool_created_at ON prompt_logs (source_tool, created_at DESC)","CREATE INDEX IF NOT EXISTS idx_prompt_logs_connection_created_at ON prompt_logs (connection_id, created_at DESC)","CREATE INDEX IF NOT EXISTS idx_prompt_logs_account_created_at ON prompt_logs (account_name, created_at DESC)","CREATE INDEX IF NOT EXISTS idx_prompt_logs_provider_created_at ON prompt_logs (provider, created_at DESC)","CREATE INDEX IF NOT EXISTS idx_prompt_logs_status_created_at ON prompt_logs (status_code, created_at DESC)","CREATE INDEX IF NOT EXISTS idx_prompt_logs_payload_hash ON prompt_logs (payload_hash)"])await b.exec(a)}finally{await b.close()}}async function n(a,b,c){let d=await a.queryOne("SELECT COUNT(1) AS count FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'prompt_logs' AND INDEX_NAME = ?",[b]);0===Number(d?.count||0)&&await a.exec(c)}async function o(a){let b=await j(a);try{let a=await b.queryOne("SELECT COUNT(1) AS count FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'prompt_logs'");if(0===Number(a?.count||0))return;for(let[a,c]of[["idx_prompt_logs_created_id","CREATE INDEX idx_prompt_logs_created_id ON prompt_logs (created_at DESC, id)"],["idx_prompt_logs_stage_created_at","CREATE INDEX idx_prompt_logs_stage_created_at ON prompt_logs (stage, created_at DESC)"],["idx_prompt_logs_model_created_at","CREATE INDEX idx_prompt_logs_model_created_at ON prompt_logs (model, created_at DESC)"],["idx_prompt_logs_display_model_created_at","CREATE INDEX idx_prompt_logs_display_model_created_at ON prompt_logs (display_model, created_at DESC)"],["idx_prompt_logs_session_created_at","CREATE INDEX idx_prompt_logs_session_created_at ON prompt_logs (session_id, created_at DESC)"],["idx_prompt_logs_client_ip_created_at","CREATE INDEX idx_prompt_logs_client_ip_created_at ON prompt_logs (client_ip, created_at DESC)"],["idx_prompt_logs_source_tool_created_at","CREATE INDEX idx_prompt_logs_source_tool_created_at ON prompt_logs (source_tool, created_at DESC)"],["idx_prompt_logs_connection_created_at","CREATE INDEX idx_prompt_logs_connection_created_at ON prompt_logs (connection_id, created_at DESC)"],["idx_prompt_logs_account_created_at","CREATE INDEX idx_prompt_logs_account_created_at ON prompt_logs (account_name, created_at DESC)"],["idx_prompt_logs_provider_created_at","CREATE INDEX idx_prompt_logs_provider_created_at ON prompt_logs (provider, created_at DESC)"],["idx_prompt_logs_status_created_at","CREATE INDEX idx_prompt_logs_status_created_at ON prompt_logs (status_code, created_at DESC)"],["idx_prompt_logs_payload_hash","CREATE INDEX idx_prompt_logs_payload_hash ON prompt_logs (payload_hash)"]])await n(b,a,c)}finally{await b.close()}}async function p(a){if(!a.enabled)return;let b=`${a.type}:${a.host||""}:${a.port||""}:${a.database||""}`;if(!e.has(b))try{if("postgres"===a.type)await m(a);else if("mysql"===a.type)await o(a);else throw Error(`Unsupported prompt log database type: ${a.type}`);e.add(b)}catch(a){console.warn("[prompt-logs] Unable to ensure query indexes:",a.message)}}async function q(a){let b=await k(a);try{let c=(await b.query("SELECT DISTINCT COALESCE(NULLIF(display_model, ''), model) AS model FROM prompt_logs WHERE model IS NOT NULL AND model <> '' ORDER BY model LIMIT 300")).map(a=>a.model),d=(await b.query("SELECT DISTINCT stage FROM prompt_logs WHERE stage IS NOT NULL AND stage <> '' ORDER BY stage LIMIT 100")).map(a=>a.stage);return{models:c,stages:d,dbInfo:{type:a.type,host:a.host,database:a.database}}}finally{await b.close()}}async function r(a,b){let c=a.type,d=await k(a);try{let e=function(a,b){let c=[],d=[],e=a=>(d.push(a),"postgres"===b)?`$${d.length}`:"?",f="postgres"===b?"ILIKE":"LIKE";if(a.keyword){let b=`%${a.keyword}%`;c.push(`(${["prompt_text","response_text","error_text","model","endpoint","provider_url","provider","account_name","connection_id","display_model","session_id","client_ip","client_host","client_user_agent","source_tool","source_tool_label","source_host"].map(a=>`${a} ${f} ${e(b)}`).join(" OR ")})`)}if(a.model&&c.push(`(model = ${e(a.model)} OR display_model = ${e(a.model)})`),a.stage&&c.push(`stage = ${e(a.stage)}`),a.sessionId&&c.push(`session_id = ${e(a.sessionId)}`),a.clientIp&&c.push(`client_ip ${f} ${e(`%${a.clientIp}%`)}`),a.sourceTool){let b=`%${a.sourceTool}%`;c.push(`(source_tool ${f} ${e(b)} OR source_tool_label ${f} ${e(b)} OR source_host ${f} ${e(b)})`)}return a.dateFrom&&c.push(`created_at >= ${e(a.dateFrom)}`),a.dateTo&&c.push(`created_at <= ${e(a.dateTo)}`),{clause:c.length?`WHERE ${c.join(" AND ")}`:"",params:d,add:e}}(b,c),f=[...e.params],g=await d.queryOne(`SELECT COUNT(*) AS count FROM prompt_logs ${e.clause}`,f),h=e.add(b.limit),i=e.add(b.offset),j="postgres"===c?"LEFT(coalesce(prompt_text,''), 900)":"SUBSTRING(coalesce(prompt_text,''), 1, 900)",k="postgres"===c?"char_length(coalesce(prompt_text,''))":"CHAR_LENGTH(coalesce(prompt_text,''))",l="postgres"===c?"LEFT(coalesce(response_text,''), 400)":"SUBSTRING(coalesce(response_text,''), 1, 400)",m=await d.query(`
430
+ LIMIT ?`,[...b.params,100])||[],A=aU({statuses:a.map(a=>ak(a)),errors:c.map(a=>{let b="local-no-key"===a.rawApiKey?"":a.rawApiKey,c=o.byKey.get(b)||o.byFingerprint.get(b)||o.all.find(a=>a.id===b);return ak(a,{label:a.status||"error",status:a.status||"error",provider:a.provider||"unknown",providerLabel:af(a.provider,p),model:a.model||"unknown",endpoint:a.endpoint||"unknown",apiKey:c?.fingerprint||ac(b)})})}),t?.topErrors?.length&&(A.errors=t.topErrors),D=aO({overview:u,groups:A,promptLogStats:s,requestErrorStats:t,experience:x,clientRequests:y})}else"raw"===i&&(B=az(n,m,q,r,p),C=aA(n,m,q,r,p));let H=function(a,b,c,d,e=new Map){let f=function(a,b,c,d){let e=aF(a,b,"provider",500),f=aF(a,b,"model",1e3),g=aF(a,b,"endpoint",500),h=aF(a,b,"status",200),i=aF(a,b,"connectionId",1e3).map(a=>{let b=c.get(a),d=b?.name?`${b.name}${b.provider?` \xb7 ${b.provider}`:""}`:a;return{value:a,label:d}}),j=[];for(let c of((aG(a,b)||aG(a,aE(b)))&&j.push({value:"local-no-key",label:"Local / kh\xf4ng d\xf9ng API key"}),d.all.slice(0,500)))j.push({value:c.fingerprint,label:`${c.name||c.fingerprint}${c.ownerUser?` \xb7 ${c.ownerUser}`:""}`});aB(i,b.connectionId,b.connectionId),aB(j,b.apiKey,b.apiKey);let k=e.map(a=>({value:a,label:af(a,c)})),l=f.map(a=>({value:a,label:a})),m=g.map(a=>({value:a,label:a})),n=h.map(a=>({value:a,label:a}));return aB(k,b.provider,b.provider),aB(l,b.model,b.model),aB(m,b.endpoint,b.endpoint),aB(n,b.status,b.status),{providers:k,models:l.map(a=>a.value),endpoints:m.map(a=>a.value),statuses:n.map(a=>a.value),connections:i,apiKeys:j,clientIps:[],sourceTools:[]}}(a,b,e,d);return f.clientIps=(c.topClientIps||[]).map(a=>a.key).filter(Boolean),f.sourceTools=(c.topSourceTools||[]).map(a=>a.key).filter(Boolean),f}(n,m,s,o,p),I=function(a,b,c,d,e,f){let g=["Analytics v3 đang d\xf9ng SQL aggregate tr\xean usageHistory v\xe0 Prompt Logs: KPI, group, time-series, top request/IP/tool/session được tổng hợp ở DB thay v\xec k\xe9o h\xe0ng chục ngh\xecn raw rows về Node.js."];if(c?.noMatch&&g.push("Bộ lọc API key kh\xf4ng khớp API key n\xe0o đang c\xf3, n\xean usage metrics trả về rỗng để tr\xe1nh scan to\xe0n bộ usageHistory bằng LIKE."),b.total>0&&g.push(`Prompt log analytics đang d\xf9ng SQL aggregate tr\xean to\xe0n bộ ${b.total.toLocaleString("vi-VN")} d\xf2ng khớp bộ lọc.`),e?.samples>0&&g.push(`User experience metrics đang t\xednh tr\xean ${e.samples.toLocaleString("vi-VN")} request th\xe0nh c\xf4ng c\xf3 token v\xe0 latency > 0; success 0-token, pending v\xe0 error được loại khỏi nh\xf3m trải nghiệm để kh\xf4ng l\xe0m sai đ\xe1nh gi\xe1 tốc độ model.`),f?.topHeavyUsers?.length&&g.push("Client request monitor bổ sung top user/API key gửi request nặng nhất, top API key/IP d\xf9ng nhiều token nhất, top IP c\xf3 nhiều request nặng, ph\xe2n bố input token theo bucket v\xe0 client c\xf3 lỗi nhiều; c\xe1c bảng n\xe0y chỉ hiển thị API key fingerprint/masked metadata, kh\xf4ng lộ full bearer token."),arguments.length>=4){let a=arguments[3];if(a?.total>0){let b=a.summary||{};g.push(`Request error events đang d\xf9ng SQL aggregate tr\xean to\xe0n bộ ${a.total.toLocaleString("vi-VN")} lỗi khớp bộ lọc trong Prompt Log DB; trong đ\xf3 ${X(b.serverImpacting,0).toLocaleString("vi-VN")} lỗi được ph\xe2n loại l\xe0 server/provider-impacting v\xe0 ${X(b.client,0).toLocaleString("vi-VN")} lỗi do client/request.`)}}return(a.clientIp||a.sourceTool||a.sessionId||a.keyword)&&g.push("Bộ lọc Source IP / Source tool / Session / Keyword \xe1p dụng cho Prompt Logs bằng SQL aggregate. Với request mới sau migration v3, UsageHistory cũng lưu clientIp/sourceTool/session để token/cost c\xf3 thể lọc ch\xednh x\xe1c hơn; dữ liệu cũ trước migration c\xf3 thể chưa c\xf3 c\xe1c field n\xe0y."),b.disabled&&g.push("Prompt Log Database đang tắt, phần thống k\xea Source IP / tool / session sẽ kh\xf4ng c\xf3 dữ liệu."),g}(m,s,q,t,x,y),J=function({scope:a,filters:b,overview:c={},latency:d={},experience:e=aV(),clientRequests:f=aW(),timeSeries:g=[],groups:h=aU(),promptLogStats:i=aS(),requestErrorStats:j=aT(),anomalies:k=[],recentUsage:l=[],heavyRequests:m=[],options:n={},qualityNotes:o=[]}){return{generatedAt:new Date().toISOString(),analyticsVersion:"v3.6-scoped-analytics",scope:a,filters:{period:b.period,startIso:b.startIso,endIso:b.endIso,provider:b.provider,model:b.model,connectionId:b.connectionId,status:b.status,endpoint:b.endpoint,apiKey:b.apiKey,clientIp:b.clientIp,sourceTool:b.sourceTool,sessionId:b.sessionId,keyword:b.keyword},overview:c,latency:d,experience:e,clientRequests:f,timeSeries:g,groups:h,promptLogs:i,requestErrors:j,anomalies:k,recentUsage:l,heavyRequests:m,options:n,qualityNotes:o}}({scope:i,filters:m,overview:u,latency:v,experience:x,clientRequests:y,timeSeries:z,groups:A,promptLogStats:s,requestErrorStats:t,anomalies:D,recentUsage:B,heavyRequests:C,options:H,qualityNotes:I});if(k.set(j,{createdAt:Date.now(),data:J}),k.size>100){for(let[a,b]of k)if(Date.now()-b.createdAt>15e3&&k.delete(a),k.size<=100)break}return J}var a$=c(9588);let a_="force-dynamic",a0=["period","dateFrom","dateTo","provider","model","connectionId","status","endpoint","apiKey","clientIp","sourceIp","sourceTool","sessionId","keyword","maxPromptLogRows"];async function a1(a){try{let{response:b}=await (0,a$.hH)({allowMonitorAdmin:!0});if(b)return b;let{searchParams:c}=new URL(a.url),d=function(a){let b={};for(let c of a0){let d=a.get(c);null!==d&&""!==String(d).trim()&&(b[c]=d)}return b}(c),e=String(c.get("scope")||"").trim(),f="csv"===c.get("format"),g=await aZ({...d,scope:f?"all":e});if(f){let a=(function(a){let b=[];for(let[c,d]of(b.push(["section","key","label","requests","success","errors","errorRate","inputTokens","outputTokens","totalTokens","cost","lastSeen"]),[["providers",a.groups.providers],["models",a.groups.models],["providerAccounts",a.groups.providerAccounts],["apiKeys",a.groups.apiKeys],["endpoints",a.groups.endpoints],["clientIps",a.promptLogs.topClientIps],["sourceTools",a.promptLogs.topSourceTools],["requestErrors",a.requestErrors?.topErrors||a.groups.errors],["modelExperience",a.experience?.byModel||[]],["clientHeavyUsers",a.clientRequests?.topHeavyUsers||[]],["clientTopApiKeysByTokens",a.clientRequests?.topApiKeysByTokens||[]],["clientTopSourceIpsByTokens",a.clientRequests?.topSourceIpsByTokens||[]],["clientTopSourceIpsByHeavyRequests",a.clientRequests?.topSourceIpsByHeavyRequests||[]],["clientProblemClients",a.clientRequests?.topProblemClients||[]],["inputBuckets",a.clientRequests?.inputBuckets||[]]]))for(let a of d||[])b.push([c,a.key||"",a.label||a.name||"",a.requests||0,a.success||0,a.errors||0,a.errorRate||0,a.promptTokens||0,a.completionTokens||0,a.totalTokens||0,a.cost||0,a.lastSeen||""]);return b})(g).map(a=>a.map(aP).join(",")).join("\n");return new Response(a,{status:200,headers:{"Content-Type":"text/csv; charset=utf-8","Content-Disposition":`attachment; filename="bluerouter-analytics-${new Date().toISOString().slice(0,10)}.csv"`,"Cache-Control":"no-store"}})}return v.NextResponse.json(g,{headers:{"Cache-Control":"no-store"}})}catch(a){return console.error("[analytics] Failed to build dashboard analytics:",a),v.NextResponse.json({error:a?.message||"Failed to build dashboard analytics"},{status:500})}}let a2=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/api/dashboard/analytics/route",pathname:"/api/dashboard/analytics",filename:"route",bundlePath:"app/api/dashboard/analytics/route"},distDir:".next-cli-build",relativeProjectDir:"",resolvedPagePath:"D:\\bluerouter\\src\\app\\api\\dashboard\\analytics\\route.js",nextConfigOutput:"standalone",userland:d,...{}}),{workAsyncStorage:a3,workUnitAsyncStorage:a4,serverHooks:a5}=a2;function a6(){return(0,g.patchFetch)({workAsyncStorage:a3,workUnitAsyncStorage:a4})}async function a7(a,b,c){c.requestMeta&&(0,h.setRequestMeta)(a,c.requestMeta),a2.isDev&&(0,h.addRequestMeta)(a,"devRequestTimingInternalsEnd",process.hrtime.bigint());let d="/api/dashboard/analytics/route";"/index"===d&&(d="/");let e=await a2.prepare(a,b,{srcPage:d,multiZoneDraftMode:!1});if(!e)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:g,deploymentId:v,params:w,nextConfig:x,parsedUrl:y,isDraftMode:z,prerenderManifest:A,routerServerContext:B,isOnDemandRevalidate:C,revalidateOnlyGenerated:D,resolvedPathname:E,clientReferenceManifest:F,serverActionsManifest:G}=e,H=(0,k.normalizeAppPath)(d),I=!!(A.dynamicRoutes[H]||A.routes[E]),J=async()=>((null==B?void 0:B.render404)?await B.render404(a,b,y,!1):b.end("This page could not be found"),null);if(I&&!z){let a=!!A.routes[E],b=A.dynamicRoutes[H];if(b&&!1===b.fallback&&!a){if(x.adapterPath)return await J();throw new t.NoFallbackError}}let K=null;!I||a2.isDev||z||(K="/index"===(K=E)?"/":K);let L=!0===a2.isDev||!I,M=I&&!L;G&&F&&(0,j.setManifestsSingleton)({page:d,clientReferenceManifest:F,serverActionsManifest:G});let N=a.method||"GET",O=(0,i.getTracer)(),P=O.getActiveScopeSpan(),Q=!!(null==B?void 0:B.isWrappedByNextServer),R=!!(0,h.getRequestMeta)(a,"minimalMode"),S=(0,h.getRequestMeta)(a,"incrementalCache")||await a2.getIncrementalCache(a,x,A,R);null==S||S.resetRequestCache(),globalThis.__incrementalCache=S;let T={params:w,previewProps:A.preview,renderOpts:{experimental:{authInterrupts:!!x.experimental.authInterrupts},cacheComponents:!!x.cacheComponents,supportsDynamicResponse:L,incrementalCache:S,cacheLifeProfiles:x.cacheLife,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d,e)=>a2.onRequestError(a,b,d,e,B)},sharedContext:{buildId:g,deploymentId:v}},U=new l.NodeNextRequest(a),V=new l.NodeNextResponse(b),W=m.NextRequestAdapter.fromNodeNextRequest(U,(0,m.signalFromNodeResponse)(b));try{let e,g=async a=>a2.handle(W,T).finally(()=>{if(!a)return;a.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let c=O.getRootSpanAttributes();if(!c)return;if(c.get("next.span_type")!==n.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${c.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let f=c.get("next.route");if(f){let b=`${N} ${f}`;a.setAttributes({"next.route":f,"http.route":f,"next.span_name":b}),a.updateName(b),e&&e!==a&&(e.setAttribute("http.route",f),e.updateName(b))}else a.updateName(`${N} ${d}`)}),h=async e=>{var h,i;let j=async({previousCacheEntry:f})=>{try{if(!R&&C&&D&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let d=await g(e);a.fetchMetrics=T.renderOpts.fetchMetrics;let h=T.renderOpts.pendingWaitUntil;h&&c.waitUntil&&(c.waitUntil(h),h=void 0);let i=T.renderOpts.collectedTags;if(!I)return await (0,p.I)(U,V,d,T.renderOpts.pendingWaitUntil),null;{let a=await d.blob(),b=(0,q.toNodeOutgoingHttpHeaders)(d.headers);i&&(b[s.NEXT_CACHE_TAGS_HEADER]=i),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==T.renderOpts.collectedRevalidate&&!(T.renderOpts.collectedRevalidate>=s.INFINITE_CACHE)&&T.renderOpts.collectedRevalidate,e=void 0===T.renderOpts.collectedExpire||T.renderOpts.collectedExpire>=s.INFINITE_CACHE?void 0:T.renderOpts.collectedExpire;return{value:{kind:u.CachedRouteKind.APP_ROUTE,status:d.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:e}}}}catch(b){throw(null==f?void 0:f.isStale)&&await a2.onRequestError(a,b,{routerKind:"App Router",routePath:d,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:M,isOnDemandRevalidate:C})},!1,B),b}},k=await a2.handleResponse({req:a,nextConfig:x,cacheKey:K,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:C,revalidateOnlyGenerated:D,responseGenerator:j,waitUntil:c.waitUntil,isMinimalMode:R});if(!I)return null;if((null==k||null==(h=k.value)?void 0:h.kind)!==u.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==k||null==(i=k.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});R||b.setHeader("x-nextjs-cache",C?"REVALIDATED":k.isMiss?"MISS":k.isStale?"STALE":"HIT"),z&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let l=(0,q.fromNodeOutgoingHttpHeaders)(k.value.headers);return R&&I||l.delete(s.NEXT_CACHE_TAGS_HEADER),!k.cacheControl||b.getHeader("Cache-Control")||l.get("Cache-Control")||l.set("Cache-Control",(0,r.getCacheControlHeader)(k.cacheControl)),await (0,p.I)(U,V,new Response(k.value.body,{headers:l,status:k.value.status||200})),null};Q&&P?await h(P):(e=O.getActiveScopeSpan(),await O.withPropagatedContext(a.headers,()=>O.trace(n.BaseServerSpan.handleRequest,{spanName:`${N} ${d}`,kind:i.SpanKind.SERVER,attributes:{"http.method":N,"http.target":a.url}},h),void 0,!Q))}catch(b){if(b instanceof t.NoFallbackError||await a2.onRequestError(a,b,{routerKind:"App Router",routePath:H,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:M,isOnDemandRevalidate:C})},!1,B),I)throw b;return await (0,p.I)(U,V,new Response(null,{status:500})),null}}},63033:a=>{a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},64939:a=>{a.exports=import("pg")},66136:a=>{a.exports=require("timers")},69614:(a,b,c)=>{c.d(b,{V:()=>p});var d=c(88888),e=c(91356),f=c(99129),g=c(73575),h=c(41570),i=c(19035),j=c(24762),k=c(80308),l=c(11980);async function m(a,b,c){if(!(0,i.Gv)(a))throw new f.Ye("Flattened JWS must be an object");if(void 0===a.protected&&void 0===a.header)throw new f.Ye('Flattened JWS must have either of the "protected" or "header" members');if(void 0!==a.protected&&"string"!=typeof a.protected)throw new f.Ye("JWS Protected Header incorrect type");if(void 0===a.payload)throw new f.Ye("JWS Payload missing");if("string"!=typeof a.signature)throw new f.Ye("JWS Signature missing or incorrect type");if(void 0!==a.header&&!(0,i.Gv)(a.header))throw new f.Ye("JWS Unprotected Header incorrect type");let m={};if(a.protected)try{let b=(0,d.D)(a.protected);m=JSON.parse(g.D0.decode(b))}catch{throw new f.Ye("JWS Protected Header is invalid")}if(!(0,i.fz)(m,a.header))throw new f.Ye("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");let n={...m,...a.header},o=(0,k.n)(f.Ye,new Map([["b64",!0]]),c?.crit,m,n),p=!0;if(o.has("b64")&&"boolean"!=typeof(p=m.b64))throw new f.Ye('The "b64" (base64url-encode payload) Header Parameter must be a boolean');let{alg:q}=n;if("string"!=typeof q||!q)throw new f.Ye('JWS "alg" (Algorithm) Header Parameter missing or invalid');let r=c&&function(a,b){if(void 0!==b&&(!Array.isArray(b)||b.some(a=>"string"!=typeof a)))throw TypeError(`"${a}" option must be an array of strings`);if(b)return new Set(b)}("algorithms",c.algorithms);if(r&&!r.has(q))throw new f.Rb('"alg" (Algorithm) Header Parameter value not allowed');if(p){if("string"!=typeof a.payload)throw new f.Ye("JWS Payload must be a string")}else if("string"!=typeof a.payload&&!(a.payload instanceof Uint8Array))throw new f.Ye("JWS Payload must be a string or an Uint8Array instance");let s=!1;"function"==typeof b&&(b=await b(m,a),s=!0),(0,j.y)(q,b,"verify");let t=(0,g.xW)(void 0!==a.protected?(0,g.lF)(a.protected):new Uint8Array,(0,g.lF)("."),"string"==typeof a.payload?p?(0,g.lF)(a.payload):g.Rd.encode(a.payload):a.payload),u=(0,h.h2)(a.signature,"signature",f.Ye),v=await (0,l.l)(b,q);if(!await (0,e.MX)(q,v,u,t))throw new f.h2;let w={payload:p?(0,h.h2)(a.payload,"payload",f.Ye):"string"==typeof a.payload?g.Rd.encode(a.payload):a.payload};return(void 0!==a.protected&&(w.protectedHeader=m),void 0!==a.header&&(w.unprotectedHeader=a.header),s)?{...w,key:v}:w}async function n(a,b,c){if(a instanceof Uint8Array&&(a=g.D0.decode(a)),"string"!=typeof a)throw new f.Ye("Compact JWS must be a string or Uint8Array");let{0:d,1:e,2:h,length:i}=a.split(".");if(3!==i)throw new f.Ye("Invalid Compact JWS");let j=await m({payload:e,protected:d,signature:h},b,c),k={payload:j.payload,protectedHeader:j.protectedHeader};return"function"==typeof b?{...k,key:j.key}:k}var o=c(17347);async function p(a,b,c){let d=await n(a,b,c);if(d.protectedHeader.crit?.includes("b64")&&!1===d.protectedHeader.b64)throw new f.Dp("JWTs MUST NOT use unencoded payload");let e={payload:(0,o.k6)(d.protectedHeader,d.payload,c),protectedHeader:d.protectedHeader};return"function"==typeof b?{...e,key:d.key}:e}},73024:a=>{a.exports=require("node:fs")},74075:a=>{a.exports=require("zlib")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},79428:a=>{a.exports=require("buffer")},79868:a=>{a.exports=require("node:sqlite")},81787:a=>{a.exports=require("bun:sqlite")},86439:a=>{a.exports=require("next/dist/shared/lib/no-fallback-error.external")},87550:a=>{a.exports=require("better-sqlite3")},90389:(a,b,c)=>{c.d(b,{hS:()=>d});let d=Object.freeze({ADMIN:"admin",MONITOR_ADMIN:"monitor_admin",USER:"user",GUEST:"guest"});Object.freeze([{href:"/dashboard/endpoint",label:"Endpoint",icon:"api"},{href:"/dashboard/api-keys",label:"API Keys",icon:"vpn_key"},{href:"/dashboard/usage",label:"Usage",icon:"bar_chart"},{href:"/dashboard/analytics",label:"Analytics",icon:"monitoring"},{href:"/dashboard/quota",label:"Quota Tracker",icon:"data_usage"},{href:"/dashboard/prompt-logs",label:"Prompt Logs",icon:"manage_search"}]),Object.freeze(["/dashboard","/dashboard/endpoint","/dashboard/api-keys","/dashboard/usage","/dashboard/analytics","/dashboard/quota","/dashboard/prompt-logs"])},91645:a=>{a.exports=require("net")},94735:a=>{a.exports=require("events")},94755:(a,b,c)=>{c.d(b,{A:()=>i});var d=c(77598);let e={randomUUID:d.randomUUID},f=new Uint8Array(256),g=f.length;var h=c(50122);let i=function(a,b,c){if(e.randomUUID&&!b&&!a)return e.randomUUID();var i=a,j=c;let k=(i=i||{}).random??i.rng?.()??(g>f.length-16&&((0,d.randomFillSync)(f),g=0),f.slice(g,g+=16));if(k.length<16)throw Error("Random bytes length must be >= 16");if(k[6]=15&k[6]|64,k[8]=63&k[8]|128,b){if((j=j||0)<0||j+16>b.length)throw RangeError(`UUID byte range ${j}:${j+15} is out of buffer bounds`);for(let a=0;a<16;++a)b[j+a]=k[a];return b}return(0,h.k)(k)}},97242:(a,b,c)=>{c.d(b,{DU:()=>s,Ws:()=>t,_3:()=>v,nv:()=>u});var d=c(45903);let e=new Set;function f(a,b,c=null){let d=Number(a);if(!Number.isFinite(d)||d<0)return b;let e=Math.floor(d);return c?Math.min(e,c):e}function g(a){return String(a||"").trim()}async function h(){return(0,d.I6)(await (0,d.L7)())}async function i(a){let b=new(await Promise.resolve().then(c.bind(c,64939))).Client({host:a.host,port:Number(a.port||5432),database:a.database,user:a.username,password:a.password,ssl:!!a.ssl&&{rejectUnauthorized:!1}});return await b.connect(),{type:"postgres",query:async(a,c=[])=>(await b.query(a,c)).rows,queryOne:async(a,c=[])=>(await b.query(a,c)).rows[0]||null,async exec(a,c=[]){await b.query(a,c)},async close(){await b.end()}}}async function j(a){let b=await c.e(8491).then(c.t.bind(c,38491,19)),d=await b.createConnection({host:a.host,port:Number(a.port||3306),database:a.database,user:a.username,password:a.password,ssl:a.ssl?{}:void 0,dateStrings:!0,connectTimeout:3e3});return{type:"mysql",async query(a,b=[]){let[c]=await d.query(a,b);return c},async queryOne(a,b=[]){let[c]=await d.query(a,b);return c[0]||null},async exec(a,b=[]){await d.query(a,b)},async close(){await d.end()}}}async function k(a){if("postgres"===a.type)return i(a);if("mysql"===a.type)return j(a);throw Error(`Unsupported prompt log database type: ${a.type}`)}async function l(a,b){if(!b||b.full_request_json)return b;let c=function(a={}){return String(a.payload_hash||function(a){if(!a)return{};if("object"==typeof a)return a;try{return JSON.parse(a)}catch{return{}}}(a.meta_json).payloadHash||"").trim()}(b);if(!c)return b;try{let d=await a.queryOne("SELECT COUNT(1) AS count FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'prompt_log_payloads'");if(0===Number(d?.count||0))return b;let e=await a.queryOne("SELECT payload_json FROM prompt_log_payloads WHERE payload_hash = ?",[c]);if(!e)return b;let f=e.payload_json;return{...b,full_request_json:"string"==typeof f?f:JSON.stringify(f)}}catch{return b}}async function m(a){let b=await i(a);try{for(let a of["CREATE INDEX IF NOT EXISTS idx_prompt_logs_created_id ON prompt_logs (created_at DESC, id)","CREATE INDEX IF NOT EXISTS idx_prompt_logs_stage_created_at ON prompt_logs (stage, created_at DESC)","CREATE INDEX IF NOT EXISTS idx_prompt_logs_model_created_at ON prompt_logs (model, created_at DESC)","CREATE INDEX IF NOT EXISTS idx_prompt_logs_display_model_created_at ON prompt_logs (display_model, created_at DESC)","CREATE INDEX IF NOT EXISTS idx_prompt_logs_session_created_at ON prompt_logs (session_id, created_at DESC)","CREATE INDEX IF NOT EXISTS idx_prompt_logs_client_ip_created_at ON prompt_logs (client_ip, created_at DESC)","CREATE INDEX IF NOT EXISTS idx_prompt_logs_source_tool_created_at ON prompt_logs (source_tool, created_at DESC)","CREATE INDEX IF NOT EXISTS idx_prompt_logs_connection_created_at ON prompt_logs (connection_id, created_at DESC)","CREATE INDEX IF NOT EXISTS idx_prompt_logs_account_created_at ON prompt_logs (account_name, created_at DESC)","CREATE INDEX IF NOT EXISTS idx_prompt_logs_provider_created_at ON prompt_logs (provider, created_at DESC)","CREATE INDEX IF NOT EXISTS idx_prompt_logs_status_created_at ON prompt_logs (status_code, created_at DESC)","CREATE INDEX IF NOT EXISTS idx_prompt_logs_payload_hash ON prompt_logs (payload_hash)"])await b.exec(a)}finally{await b.close()}}async function n(a,b,c){let d=await a.queryOne("SELECT COUNT(1) AS count FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'prompt_logs' AND INDEX_NAME = ?",[b]);0===Number(d?.count||0)&&await a.exec(c)}async function o(a){let b=await j(a);try{let a=await b.queryOne("SELECT COUNT(1) AS count FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'prompt_logs'");if(0===Number(a?.count||0))return;for(let[a,c]of[["idx_prompt_logs_created_id","CREATE INDEX idx_prompt_logs_created_id ON prompt_logs (created_at DESC, id)"],["idx_prompt_logs_stage_created_at","CREATE INDEX idx_prompt_logs_stage_created_at ON prompt_logs (stage, created_at DESC)"],["idx_prompt_logs_model_created_at","CREATE INDEX idx_prompt_logs_model_created_at ON prompt_logs (model, created_at DESC)"],["idx_prompt_logs_display_model_created_at","CREATE INDEX idx_prompt_logs_display_model_created_at ON prompt_logs (display_model, created_at DESC)"],["idx_prompt_logs_session_created_at","CREATE INDEX idx_prompt_logs_session_created_at ON prompt_logs (session_id, created_at DESC)"],["idx_prompt_logs_client_ip_created_at","CREATE INDEX idx_prompt_logs_client_ip_created_at ON prompt_logs (client_ip, created_at DESC)"],["idx_prompt_logs_source_tool_created_at","CREATE INDEX idx_prompt_logs_source_tool_created_at ON prompt_logs (source_tool, created_at DESC)"],["idx_prompt_logs_connection_created_at","CREATE INDEX idx_prompt_logs_connection_created_at ON prompt_logs (connection_id, created_at DESC)"],["idx_prompt_logs_account_created_at","CREATE INDEX idx_prompt_logs_account_created_at ON prompt_logs (account_name, created_at DESC)"],["idx_prompt_logs_provider_created_at","CREATE INDEX idx_prompt_logs_provider_created_at ON prompt_logs (provider, created_at DESC)"],["idx_prompt_logs_status_created_at","CREATE INDEX idx_prompt_logs_status_created_at ON prompt_logs (status_code, created_at DESC)"],["idx_prompt_logs_payload_hash","CREATE INDEX idx_prompt_logs_payload_hash ON prompt_logs (payload_hash)"]])await n(b,a,c)}finally{await b.close()}}async function p(a){if(!a.enabled)return;let b=`${a.type}:${a.host||""}:${a.port||""}:${a.database||""}`;if(!e.has(b))try{if("postgres"===a.type)await m(a);else if("mysql"===a.type)await o(a);else throw Error(`Unsupported prompt log database type: ${a.type}`);e.add(b)}catch(a){console.warn("[prompt-logs] Unable to ensure query indexes:",a.message)}}async function q(a){let b=await k(a);try{let c=(await b.query("SELECT DISTINCT COALESCE(NULLIF(display_model, ''), model) AS model FROM prompt_logs WHERE model IS NOT NULL AND model <> '' ORDER BY model LIMIT 300")).map(a=>a.model),d=(await b.query("SELECT DISTINCT stage FROM prompt_logs WHERE stage IS NOT NULL AND stage <> '' ORDER BY stage LIMIT 100")).map(a=>a.stage);return{models:c,stages:d,dbInfo:{type:a.type,host:a.host,database:a.database}}}finally{await b.close()}}async function r(a,b){let c=a.type,d=await k(a);try{let e=function(a,b){let c=[],d=[],e=a=>(d.push(a),"postgres"===b)?`$${d.length}`:"?",f="postgres"===b?"ILIKE":"LIKE";if(a.keyword){let b=`%${a.keyword}%`;c.push(`(${["prompt_text","response_text","error_text","model","endpoint","provider_url","provider","account_name","connection_id","display_model","session_id","client_ip","client_host","client_user_agent","source_tool","source_tool_label","source_host"].map(a=>`${a} ${f} ${e(b)}`).join(" OR ")})`)}if(a.model&&c.push(`(model = ${e(a.model)} OR display_model = ${e(a.model)})`),a.stage&&c.push(`stage = ${e(a.stage)}`),a.sessionId&&c.push(`session_id = ${e(a.sessionId)}`),a.clientIp&&c.push(`client_ip ${f} ${e(`%${a.clientIp}%`)}`),a.sourceTool){let b=`%${a.sourceTool}%`;c.push(`(source_tool ${f} ${e(b)} OR source_tool_label ${f} ${e(b)} OR source_host ${f} ${e(b)})`)}return a.dateFrom&&c.push(`created_at >= ${e(a.dateFrom)}`),a.dateTo&&c.push(`created_at <= ${e(a.dateTo)}`),{clause:c.length?`WHERE ${c.join(" AND ")}`:"",params:d,add:e}}(b,c),f=[...e.params],g=await d.queryOne(`SELECT COUNT(*) AS count FROM prompt_logs ${e.clause}`,f),h=e.add(b.limit),i=e.add(b.offset),j="postgres"===c?"LEFT(coalesce(prompt_text,''), 900)":"SUBSTRING(coalesce(prompt_text,''), 1, 900)",k="postgres"===c?"char_length(coalesce(prompt_text,''))":"CHAR_LENGTH(coalesce(prompt_text,''))",l="postgres"===c?"LEFT(coalesce(response_text,''), 400)":"SUBSTRING(coalesce(response_text,''), 1, 400)",m=await d.query(`
431
431
  SELECT
432
432
  id,
433
433
  created_at,
@@ -1 +1 @@
1
- {"version":1,"files":["../../../../../../cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-2.0.90-to-3.0.1-3.0.1-20260617-111304/data.sqlite","../../../../../../cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-3.0.1-to-3.0.2-3.0.2-20260617-143354/data.sqlite","../../../../../../cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-3.0.2-to-3.0.3-3.0.3-20260617-150718/data.sqlite","../../../../../../cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-3.0.3-to-3.0.4-3.0.4-20260617-154748/data.sqlite","../../../../../../cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-3.0.4-to-3.0.5-3.0.5-20260617-171451/data.sqlite","../../../../../../cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite","../../../../../../cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-shm","../../../../../../cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-wal","../../../../../../cli/.build-home/AppData/Roaming/bluerouter/jwt-secret","../../../../../../cli/.build-home/AppData/Roaming/bluerouter/machine-id","../../../../../../cli/.build-home/AppData/Roaming/nextjs-nodejs/Config/config.json","../../../../../../node_modules/@swc/helpers/_/_interop_require_default/package.json","../../../../../../node_modules/@swc/helpers/cjs/_interop_require_default.cjs","../../../../../../node_modules/@swc/helpers/package.json","../../../../../../node_modules/better-sqlite3/build/Release/better_sqlite3.node","../../../../../../node_modules/better-sqlite3/lib/database.js","../../../../../../node_modules/better-sqlite3/lib/index.js","../../../../../../node_modules/better-sqlite3/lib/methods/aggregate.js","../../../../../../node_modules/better-sqlite3/lib/methods/backup.js","../../../../../../node_modules/better-sqlite3/lib/methods/function.js","../../../../../../node_modules/better-sqlite3/lib/methods/inspect.js","../../../../../../node_modules/better-sqlite3/lib/methods/pragma.js","../../../../../../node_modules/better-sqlite3/lib/methods/serialize.js","../../../../../../node_modules/better-sqlite3/lib/methods/table.js","../../../../../../node_modules/better-sqlite3/lib/methods/transaction.js","../../../../../../node_modules/better-sqlite3/lib/methods/wrappers.js","../../../../../../node_modules/better-sqlite3/lib/sqlite-error.js","../../../../../../node_modules/better-sqlite3/lib/util.js","../../../../../../node_modules/better-sqlite3/package.json","../../../../../../node_modules/bindings/bindings.js","../../../../../../node_modules/bindings/package.json","../../../../../../node_modules/file-uri-to-path/index.js","../../../../../../node_modules/file-uri-to-path/package.json","../../../../../../node_modules/next/dist/build/adapter/setup-node-env.external.js","../../../../../../node_modules/next/dist/client/components/app-router-headers.js","../../../../../../node_modules/next/dist/client/components/hooks-server-context.js","../../../../../../node_modules/next/dist/client/components/static-generation-bailout.js","../../../../../../node_modules/next/dist/client/lib/console.js","../../../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../../../../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../../../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../../../node_modules/next/dist/compiled/next-server/app-route.runtime.prod.js","../../../../../../node_modules/next/dist/compiled/source-map/package.json","../../../../../../node_modules/next/dist/compiled/source-map/source-map.js","../../../../../../node_modules/next/dist/compiled/stacktrace-parser/package.json","../../../../../../node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js","../../../../../../node_modules/next/dist/compiled/ws/index.js","../../../../../../node_modules/next/dist/compiled/ws/package.json","../../../../../../node_modules/next/dist/lib/client-and-server-references.js","../../../../../../node_modules/next/dist/lib/constants.js","../../../../../../node_modules/next/dist/lib/framework/boundary-constants.js","../../../../../../node_modules/next/dist/lib/interop-default.js","../../../../../../node_modules/next/dist/lib/is-error.js","../../../../../../node_modules/next/dist/lib/picocolors.js","../../../../../../node_modules/next/dist/lib/scheduler.js","../../../../../../node_modules/next/dist/lib/semver-noop.js","../../../../../../node_modules/next/dist/server/app-render/action-async-storage-instance.js","../../../../../../node_modules/next/dist/server/app-render/action-async-storage.external.js","../../../../../../node_modules/next/dist/server/app-render/after-task-async-storage-instance.js","../../../../../../node_modules/next/dist/server/app-render/after-task-async-storage.external.js","../../../../../../node_modules/next/dist/server/app-render/async-local-storage.js","../../../../../../node_modules/next/dist/server/app-render/cache-signal.js","../../../../../../node_modules/next/dist/server/app-render/console-async-storage-instance.js","../../../../../../node_modules/next/dist/server/app-render/console-async-storage.external.js","../../../../../../node_modules/next/dist/server/app-render/dynamic-access-async-storage-instance.js","../../../../../../node_modules/next/dist/server/app-render/dynamic-access-async-storage.external.js","../../../../../../node_modules/next/dist/server/app-render/dynamic-rendering.js","../../../../../../node_modules/next/dist/server/app-render/instant-validation/boundary-constants.js","../../../../../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.external.js","../../../../../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.instance.js","../../../../../../node_modules/next/dist/server/app-render/staged-rendering.js","../../../../../../node_modules/next/dist/server/app-render/work-async-storage-instance.js","../../../../../../node_modules/next/dist/server/app-render/work-async-storage.external.js","../../../../../../node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js","../../../../../../node_modules/next/dist/server/app-render/work-unit-async-storage.external.js","../../../../../../node_modules/next/dist/server/dev/browser-logs/file-logger.js","../../../../../../node_modules/next/dist/server/dynamic-rendering-utils.js","../../../../../../node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js","../../../../../../node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js","../../../../../../node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js","../../../../../../node_modules/next/dist/server/lib/lru-cache.js","../../../../../../node_modules/next/dist/server/lib/parse-stack.js","../../../../../../node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js","../../../../../../node_modules/next/dist/server/lib/router-utils/instrumentation-node-extensions.js","../../../../../../node_modules/next/dist/server/lib/source-maps.js","../../../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../../../node_modules/next/dist/server/load-manifest.external.js","../../../../../../node_modules/next/dist/server/node-environment-baseline.js","../../../../../../node_modules/next/dist/server/node-environment-extensions/console-dim.external.js","../../../../../../node_modules/next/dist/server/node-environment-extensions/console-exit.js","../../../../../../node_modules/next/dist/server/node-environment-extensions/console-file.js","../../../../../../node_modules/next/dist/server/node-environment-extensions/date.js","../../../../../../node_modules/next/dist/server/node-environment-extensions/error-inspect.js","../../../../../../node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.js","../../../../../../node_modules/next/dist/server/node-environment-extensions/io-utils.js","../../../../../../node_modules/next/dist/server/node-environment-extensions/node-crypto.js","../../../../../../node_modules/next/dist/server/node-environment-extensions/random.js","../../../../../../node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.js","../../../../../../node_modules/next/dist/server/node-environment-extensions/web-crypto.js","../../../../../../node_modules/next/dist/server/node-environment.js","../../../../../../node_modules/next/dist/server/node-polyfill-crypto.js","../../../../../../node_modules/next/dist/server/patch-error-inspect.js","../../../../../../node_modules/next/dist/server/require-hook.js","../../../../../../node_modules/next/dist/server/response-cache/types.js","../../../../../../node_modules/next/dist/server/runtime-reacts.external.js","../../../../../../node_modules/next/dist/shared/lib/deep-freeze.js","../../../../../../node_modules/next/dist/shared/lib/invariant-error.js","../../../../../../node_modules/next/dist/shared/lib/is-plain-object.js","../../../../../../node_modules/next/dist/shared/lib/is-thenable.js","../../../../../../node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js","../../../../../../node_modules/next/dist/shared/lib/no-fallback-error.external.js","../../../../../../node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js","../../../../../../node_modules/next/dist/shared/lib/promise-with-resolvers.js","../../../../../../node_modules/next/dist/shared/lib/router/utils/app-paths.js","../../../../../../node_modules/next/dist/shared/lib/segment.js","../../../../../../node_modules/next/dist/shared/lib/server-reference-info.js","../../../../../../node_modules/next/package.json","../../../../../../node_modules/pg-cloudflare/dist/empty.js","../../../../../../node_modules/pg-cloudflare/dist/index.js","../../../../../../node_modules/pg-cloudflare/package.json","../../../../../../node_modules/pg-connection-string/index.js","../../../../../../node_modules/pg-connection-string/package.json","../../../../../../node_modules/pg-int8/index.js","../../../../../../node_modules/pg-int8/package.json","../../../../../../node_modules/pg-pool/index.js","../../../../../../node_modules/pg-pool/package.json","../../../../../../node_modules/pg-protocol/dist/buffer-reader.js","../../../../../../node_modules/pg-protocol/dist/buffer-writer.js","../../../../../../node_modules/pg-protocol/dist/index.js","../../../../../../node_modules/pg-protocol/dist/messages.js","../../../../../../node_modules/pg-protocol/dist/parser.js","../../../../../../node_modules/pg-protocol/dist/serializer.js","../../../../../../node_modules/pg-protocol/package.json","../../../../../../node_modules/pg-types/index.js","../../../../../../node_modules/pg-types/lib/arrayParser.js","../../../../../../node_modules/pg-types/lib/binaryParsers.js","../../../../../../node_modules/pg-types/lib/builtins.js","../../../../../../node_modules/pg-types/lib/textParsers.js","../../../../../../node_modules/pg-types/package.json","../../../../../../node_modules/pg/esm/index.mjs","../../../../../../node_modules/pg/lib/client.js","../../../../../../node_modules/pg/lib/connection-parameters.js","../../../../../../node_modules/pg/lib/connection.js","../../../../../../node_modules/pg/lib/crypto/cert-signatures.js","../../../../../../node_modules/pg/lib/crypto/sasl.js","../../../../../../node_modules/pg/lib/crypto/utils.js","../../../../../../node_modules/pg/lib/defaults.js","../../../../../../node_modules/pg/lib/index.js","../../../../../../node_modules/pg/lib/native/client.js","../../../../../../node_modules/pg/lib/native/index.js","../../../../../../node_modules/pg/lib/native/query.js","../../../../../../node_modules/pg/lib/query.js","../../../../../../node_modules/pg/lib/result.js","../../../../../../node_modules/pg/lib/stream.js","../../../../../../node_modules/pg/lib/type-overrides.js","../../../../../../node_modules/pg/lib/utils.js","../../../../../../node_modules/pg/package.json","../../../../../../node_modules/pgpass/lib/helper.js","../../../../../../node_modules/pgpass/lib/index.js","../../../../../../node_modules/pgpass/package.json","../../../../../../node_modules/postgres-array/index.js","../../../../../../node_modules/postgres-array/package.json","../../../../../../node_modules/postgres-bytea/index.js","../../../../../../node_modules/postgres-bytea/package.json","../../../../../../node_modules/postgres-date/index.js","../../../../../../node_modules/postgres-date/package.json","../../../../../../node_modules/postgres-interval/index.js","../../../../../../node_modules/postgres-interval/package.json","../../../../../../node_modules/react/cjs/react.development.js","../../../../../../node_modules/react/cjs/react.production.js","../../../../../../node_modules/react/index.js","../../../../../../node_modules/react/package.json","../../../../../../node_modules/split2/index.js","../../../../../../node_modules/split2/package.json","../../../../../../node_modules/sql.js/dist/sql-wasm.js","../../../../../../node_modules/sql.js/package.json","../../../../../../node_modules/xtend/mutable.js","../../../../../../node_modules/xtend/package.json","../../../../../../package.json","../../../../../../src/lib/db/adapters/betterSqliteAdapter.js","../../../../../../src/lib/db/adapters/bunSqliteAdapter.js","../../../../../../src/lib/db/adapters/nodeSqliteAdapter.js","../../../../../../src/lib/db/adapters/sqljsAdapter.js","../../../../../../src/lib/db/migrate.js","../../../../../../src/shared/utils/apiKey.js","../../../../../package.json","../../../../chunks/12.js","../../../../chunks/1220.js","../../../../chunks/1813.js","../../../../chunks/1998.js","../../../../chunks/232.js","../../../../chunks/2338.js","../../../../chunks/2409.js","../../../../chunks/241.js","../../../../chunks/2506.js","../../../../chunks/2549.js","../../../../chunks/2680.js","../../../../chunks/3104.js","../../../../chunks/3110.js","../../../../chunks/318.js","../../../../chunks/319.js","../../../../chunks/3593.js","../../../../chunks/3801.js","../../../../chunks/3813.js","../../../../chunks/3913.js","../../../../chunks/4013.js","../../../../chunks/402.js","../../../../chunks/4306.js","../../../../chunks/4404.js","../../../../chunks/4632.js","../../../../chunks/4684.js","../../../../chunks/4739.js","../../../../chunks/4741.js","../../../../chunks/4746.js","../../../../chunks/4780.js","../../../../chunks/4790.js","../../../../chunks/4803.js","../../../../chunks/4867.js","../../../../chunks/507.js","../../../../chunks/5199.js","../../../../chunks/5206.js","../../../../chunks/5258.js","../../../../chunks/5296.js","../../../../chunks/533.js","../../../../chunks/5433.js","../../../../chunks/5573.js","../../../../chunks/5681.js","../../../../chunks/5852.js","../../../../chunks/5901.js","../../../../chunks/595.js","../../../../chunks/6064.js","../../../../chunks/6103.js","../../../../chunks/6108.js","../../../../chunks/6182.js","../../../../chunks/6252.js","../../../../chunks/6567.js","../../../../chunks/6604.js","../../../../chunks/6844.js","../../../../chunks/6935.js","../../../../chunks/6936.js","../../../../chunks/698.js","../../../../chunks/7130.js","../../../../chunks/7153.js","../../../../chunks/7250.js","../../../../chunks/7324.js","../../../../chunks/7341.js","../../../../chunks/7464.js","../../../../chunks/7774.js","../../../../chunks/7812.js","../../../../chunks/7965.js","../../../../chunks/8062.js","../../../../chunks/8255.js","../../../../chunks/8352.js","../../../../chunks/8376.js","../../../../chunks/8469.js","../../../../chunks/8491.js","../../../../chunks/8520.js","../../../../chunks/8590.js","../../../../chunks/8895.js","../../../../chunks/8971.js","../../../../chunks/918.js","../../../../chunks/9489.js","../../../../chunks/9528.js","../../../../chunks/9609.js","../../../../webpack-runtime.js","route_client-reference-manifest.js"]}
1
+ {"version":1,"files":["../../../../../../cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-3.0.1-to-3.0.2-3.0.2-20260617-143354/data.sqlite","../../../../../../cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-3.0.2-to-3.0.3-3.0.3-20260617-150718/data.sqlite","../../../../../../cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-3.0.3-to-3.0.4-3.0.4-20260617-154748/data.sqlite","../../../../../../cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-3.0.4-to-3.0.5-3.0.5-20260617-171451/data.sqlite","../../../../../../cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-3.0.5-to-3.0.6-3.0.6-20260617-172736/data.sqlite","../../../../../../cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite","../../../../../../cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-shm","../../../../../../cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-wal","../../../../../../cli/.build-home/AppData/Roaming/bluerouter/jwt-secret","../../../../../../cli/.build-home/AppData/Roaming/bluerouter/machine-id","../../../../../../cli/.build-home/AppData/Roaming/nextjs-nodejs/Config/config.json","../../../../../../node_modules/@swc/helpers/_/_interop_require_default/package.json","../../../../../../node_modules/@swc/helpers/cjs/_interop_require_default.cjs","../../../../../../node_modules/@swc/helpers/package.json","../../../../../../node_modules/better-sqlite3/build/Release/better_sqlite3.node","../../../../../../node_modules/better-sqlite3/lib/database.js","../../../../../../node_modules/better-sqlite3/lib/index.js","../../../../../../node_modules/better-sqlite3/lib/methods/aggregate.js","../../../../../../node_modules/better-sqlite3/lib/methods/backup.js","../../../../../../node_modules/better-sqlite3/lib/methods/function.js","../../../../../../node_modules/better-sqlite3/lib/methods/inspect.js","../../../../../../node_modules/better-sqlite3/lib/methods/pragma.js","../../../../../../node_modules/better-sqlite3/lib/methods/serialize.js","../../../../../../node_modules/better-sqlite3/lib/methods/table.js","../../../../../../node_modules/better-sqlite3/lib/methods/transaction.js","../../../../../../node_modules/better-sqlite3/lib/methods/wrappers.js","../../../../../../node_modules/better-sqlite3/lib/sqlite-error.js","../../../../../../node_modules/better-sqlite3/lib/util.js","../../../../../../node_modules/better-sqlite3/package.json","../../../../../../node_modules/bindings/bindings.js","../../../../../../node_modules/bindings/package.json","../../../../../../node_modules/file-uri-to-path/index.js","../../../../../../node_modules/file-uri-to-path/package.json","../../../../../../node_modules/next/dist/build/adapter/setup-node-env.external.js","../../../../../../node_modules/next/dist/client/components/app-router-headers.js","../../../../../../node_modules/next/dist/client/components/hooks-server-context.js","../../../../../../node_modules/next/dist/client/components/static-generation-bailout.js","../../../../../../node_modules/next/dist/client/lib/console.js","../../../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../../../../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../../../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../../../node_modules/next/dist/compiled/next-server/app-route.runtime.prod.js","../../../../../../node_modules/next/dist/compiled/source-map/package.json","../../../../../../node_modules/next/dist/compiled/source-map/source-map.js","../../../../../../node_modules/next/dist/compiled/stacktrace-parser/package.json","../../../../../../node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js","../../../../../../node_modules/next/dist/compiled/ws/index.js","../../../../../../node_modules/next/dist/compiled/ws/package.json","../../../../../../node_modules/next/dist/lib/client-and-server-references.js","../../../../../../node_modules/next/dist/lib/constants.js","../../../../../../node_modules/next/dist/lib/framework/boundary-constants.js","../../../../../../node_modules/next/dist/lib/interop-default.js","../../../../../../node_modules/next/dist/lib/is-error.js","../../../../../../node_modules/next/dist/lib/picocolors.js","../../../../../../node_modules/next/dist/lib/scheduler.js","../../../../../../node_modules/next/dist/lib/semver-noop.js","../../../../../../node_modules/next/dist/server/app-render/action-async-storage-instance.js","../../../../../../node_modules/next/dist/server/app-render/action-async-storage.external.js","../../../../../../node_modules/next/dist/server/app-render/after-task-async-storage-instance.js","../../../../../../node_modules/next/dist/server/app-render/after-task-async-storage.external.js","../../../../../../node_modules/next/dist/server/app-render/async-local-storage.js","../../../../../../node_modules/next/dist/server/app-render/cache-signal.js","../../../../../../node_modules/next/dist/server/app-render/console-async-storage-instance.js","../../../../../../node_modules/next/dist/server/app-render/console-async-storage.external.js","../../../../../../node_modules/next/dist/server/app-render/dynamic-access-async-storage-instance.js","../../../../../../node_modules/next/dist/server/app-render/dynamic-access-async-storage.external.js","../../../../../../node_modules/next/dist/server/app-render/dynamic-rendering.js","../../../../../../node_modules/next/dist/server/app-render/instant-validation/boundary-constants.js","../../../../../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.external.js","../../../../../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.instance.js","../../../../../../node_modules/next/dist/server/app-render/staged-rendering.js","../../../../../../node_modules/next/dist/server/app-render/work-async-storage-instance.js","../../../../../../node_modules/next/dist/server/app-render/work-async-storage.external.js","../../../../../../node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js","../../../../../../node_modules/next/dist/server/app-render/work-unit-async-storage.external.js","../../../../../../node_modules/next/dist/server/dev/browser-logs/file-logger.js","../../../../../../node_modules/next/dist/server/dynamic-rendering-utils.js","../../../../../../node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js","../../../../../../node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js","../../../../../../node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js","../../../../../../node_modules/next/dist/server/lib/lru-cache.js","../../../../../../node_modules/next/dist/server/lib/parse-stack.js","../../../../../../node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js","../../../../../../node_modules/next/dist/server/lib/router-utils/instrumentation-node-extensions.js","../../../../../../node_modules/next/dist/server/lib/source-maps.js","../../../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../../../node_modules/next/dist/server/load-manifest.external.js","../../../../../../node_modules/next/dist/server/node-environment-baseline.js","../../../../../../node_modules/next/dist/server/node-environment-extensions/console-dim.external.js","../../../../../../node_modules/next/dist/server/node-environment-extensions/console-exit.js","../../../../../../node_modules/next/dist/server/node-environment-extensions/console-file.js","../../../../../../node_modules/next/dist/server/node-environment-extensions/date.js","../../../../../../node_modules/next/dist/server/node-environment-extensions/error-inspect.js","../../../../../../node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.js","../../../../../../node_modules/next/dist/server/node-environment-extensions/io-utils.js","../../../../../../node_modules/next/dist/server/node-environment-extensions/node-crypto.js","../../../../../../node_modules/next/dist/server/node-environment-extensions/random.js","../../../../../../node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.js","../../../../../../node_modules/next/dist/server/node-environment-extensions/web-crypto.js","../../../../../../node_modules/next/dist/server/node-environment.js","../../../../../../node_modules/next/dist/server/node-polyfill-crypto.js","../../../../../../node_modules/next/dist/server/patch-error-inspect.js","../../../../../../node_modules/next/dist/server/require-hook.js","../../../../../../node_modules/next/dist/server/response-cache/types.js","../../../../../../node_modules/next/dist/server/runtime-reacts.external.js","../../../../../../node_modules/next/dist/shared/lib/deep-freeze.js","../../../../../../node_modules/next/dist/shared/lib/invariant-error.js","../../../../../../node_modules/next/dist/shared/lib/is-plain-object.js","../../../../../../node_modules/next/dist/shared/lib/is-thenable.js","../../../../../../node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js","../../../../../../node_modules/next/dist/shared/lib/no-fallback-error.external.js","../../../../../../node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js","../../../../../../node_modules/next/dist/shared/lib/promise-with-resolvers.js","../../../../../../node_modules/next/dist/shared/lib/router/utils/app-paths.js","../../../../../../node_modules/next/dist/shared/lib/segment.js","../../../../../../node_modules/next/dist/shared/lib/server-reference-info.js","../../../../../../node_modules/next/package.json","../../../../../../node_modules/pg-cloudflare/dist/empty.js","../../../../../../node_modules/pg-cloudflare/dist/index.js","../../../../../../node_modules/pg-cloudflare/package.json","../../../../../../node_modules/pg-connection-string/index.js","../../../../../../node_modules/pg-connection-string/package.json","../../../../../../node_modules/pg-int8/index.js","../../../../../../node_modules/pg-int8/package.json","../../../../../../node_modules/pg-pool/index.js","../../../../../../node_modules/pg-pool/package.json","../../../../../../node_modules/pg-protocol/dist/buffer-reader.js","../../../../../../node_modules/pg-protocol/dist/buffer-writer.js","../../../../../../node_modules/pg-protocol/dist/index.js","../../../../../../node_modules/pg-protocol/dist/messages.js","../../../../../../node_modules/pg-protocol/dist/parser.js","../../../../../../node_modules/pg-protocol/dist/serializer.js","../../../../../../node_modules/pg-protocol/package.json","../../../../../../node_modules/pg-types/index.js","../../../../../../node_modules/pg-types/lib/arrayParser.js","../../../../../../node_modules/pg-types/lib/binaryParsers.js","../../../../../../node_modules/pg-types/lib/builtins.js","../../../../../../node_modules/pg-types/lib/textParsers.js","../../../../../../node_modules/pg-types/package.json","../../../../../../node_modules/pg/esm/index.mjs","../../../../../../node_modules/pg/lib/client.js","../../../../../../node_modules/pg/lib/connection-parameters.js","../../../../../../node_modules/pg/lib/connection.js","../../../../../../node_modules/pg/lib/crypto/cert-signatures.js","../../../../../../node_modules/pg/lib/crypto/sasl.js","../../../../../../node_modules/pg/lib/crypto/utils.js","../../../../../../node_modules/pg/lib/defaults.js","../../../../../../node_modules/pg/lib/index.js","../../../../../../node_modules/pg/lib/native/client.js","../../../../../../node_modules/pg/lib/native/index.js","../../../../../../node_modules/pg/lib/native/query.js","../../../../../../node_modules/pg/lib/query.js","../../../../../../node_modules/pg/lib/result.js","../../../../../../node_modules/pg/lib/stream.js","../../../../../../node_modules/pg/lib/type-overrides.js","../../../../../../node_modules/pg/lib/utils.js","../../../../../../node_modules/pg/package.json","../../../../../../node_modules/pgpass/lib/helper.js","../../../../../../node_modules/pgpass/lib/index.js","../../../../../../node_modules/pgpass/package.json","../../../../../../node_modules/postgres-array/index.js","../../../../../../node_modules/postgres-array/package.json","../../../../../../node_modules/postgres-bytea/index.js","../../../../../../node_modules/postgres-bytea/package.json","../../../../../../node_modules/postgres-date/index.js","../../../../../../node_modules/postgres-date/package.json","../../../../../../node_modules/postgres-interval/index.js","../../../../../../node_modules/postgres-interval/package.json","../../../../../../node_modules/react/cjs/react.development.js","../../../../../../node_modules/react/cjs/react.production.js","../../../../../../node_modules/react/index.js","../../../../../../node_modules/react/package.json","../../../../../../node_modules/split2/index.js","../../../../../../node_modules/split2/package.json","../../../../../../node_modules/sql.js/dist/sql-wasm.js","../../../../../../node_modules/sql.js/package.json","../../../../../../node_modules/xtend/mutable.js","../../../../../../node_modules/xtend/package.json","../../../../../../package.json","../../../../../../src/lib/db/adapters/betterSqliteAdapter.js","../../../../../../src/lib/db/adapters/bunSqliteAdapter.js","../../../../../../src/lib/db/adapters/nodeSqliteAdapter.js","../../../../../../src/lib/db/adapters/sqljsAdapter.js","../../../../../../src/lib/db/migrate.js","../../../../../../src/shared/utils/apiKey.js","../../../../../package.json","../../../../chunks/12.js","../../../../chunks/1220.js","../../../../chunks/1813.js","../../../../chunks/1998.js","../../../../chunks/232.js","../../../../chunks/2338.js","../../../../chunks/2409.js","../../../../chunks/241.js","../../../../chunks/2506.js","../../../../chunks/2549.js","../../../../chunks/2680.js","../../../../chunks/3104.js","../../../../chunks/3110.js","../../../../chunks/318.js","../../../../chunks/319.js","../../../../chunks/3593.js","../../../../chunks/3801.js","../../../../chunks/3813.js","../../../../chunks/3913.js","../../../../chunks/4013.js","../../../../chunks/402.js","../../../../chunks/4306.js","../../../../chunks/4404.js","../../../../chunks/4632.js","../../../../chunks/4684.js","../../../../chunks/4739.js","../../../../chunks/4741.js","../../../../chunks/4746.js","../../../../chunks/4780.js","../../../../chunks/4790.js","../../../../chunks/4803.js","../../../../chunks/4867.js","../../../../chunks/507.js","../../../../chunks/5199.js","../../../../chunks/5206.js","../../../../chunks/5258.js","../../../../chunks/5296.js","../../../../chunks/533.js","../../../../chunks/5433.js","../../../../chunks/5573.js","../../../../chunks/5681.js","../../../../chunks/5852.js","../../../../chunks/5901.js","../../../../chunks/595.js","../../../../chunks/6064.js","../../../../chunks/6103.js","../../../../chunks/6108.js","../../../../chunks/6182.js","../../../../chunks/6252.js","../../../../chunks/6567.js","../../../../chunks/6604.js","../../../../chunks/6844.js","../../../../chunks/6935.js","../../../../chunks/6936.js","../../../../chunks/698.js","../../../../chunks/7130.js","../../../../chunks/7153.js","../../../../chunks/7250.js","../../../../chunks/7324.js","../../../../chunks/7341.js","../../../../chunks/7464.js","../../../../chunks/7774.js","../../../../chunks/7812.js","../../../../chunks/7965.js","../../../../chunks/8062.js","../../../../chunks/8255.js","../../../../chunks/8352.js","../../../../chunks/8376.js","../../../../chunks/8469.js","../../../../chunks/8491.js","../../../../chunks/8520.js","../../../../chunks/8590.js","../../../../chunks/8895.js","../../../../chunks/8971.js","../../../../chunks/918.js","../../../../chunks/9489.js","../../../../chunks/9528.js","../../../../chunks/9609.js","../../../../webpack-runtime.js","route_client-reference-manifest.js"]}