@jheavenknows/bluerouter 5.0.31 → 5.0.32

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 (431) hide show
  1. package/app/.next-cli-build/BUILD_ID +1 -1
  2. package/app/.next-cli-build/app-path-routes-manifest.json +2 -2
  3. package/app/.next-cli-build/build-manifest.json +2 -2
  4. package/app/.next-cli-build/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  5. package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page.js +1 -1
  6. package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page_client-reference-manifest.js +1 -1
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovider/page_client-reference-manifest.js +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page_client-reference-manifest.js +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page_client-reference-manifest.js +1 -1
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  32. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  33. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  34. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  35. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  36. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  37. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  38. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  39. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  40. package/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  41. package/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  42. package/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  43. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  44. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  45. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  46. package/app/.next-cli-build/server/app/_not-found.rsc +5 -5
  47. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +5 -5
  48. package/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  49. package/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +5 -5
  50. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  51. package/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  52. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  53. package/app/.next-cli-build/server/app/api/auth/ldap/test/route.js.nft.json +1 -1
  54. package/app/.next-cli-build/server/app/api/auth/ldap/users/route.js.nft.json +1 -1
  55. package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  56. package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  57. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  58. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  59. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  60. package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  61. package/app/.next-cli-build/server/app/api/branding/[asset]/route.js.nft.json +1 -1
  62. package/app/.next-cli-build/server/app/api/branding/route.js.nft.json +1 -1
  63. package/app/.next-cli-build/server/app/api/branding/upload/route.js.nft.json +1 -1
  64. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  65. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  66. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/autostart/route.js.nft.json +1 -1
  67. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/prompt-log-db/route.js.nft.json +1 -1
  68. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/root-ca/route.js.nft.json +1 -1
  69. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  70. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  71. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  72. package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  73. package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  74. package/app/.next-cli-build/server/app/api/dashboard/analytics/route.js.nft.json +1 -1
  75. package/app/.next-cli-build/server/app/api/dashboard/combos/route.js.nft.json +1 -1
  76. package/app/.next-cli-build/server/app/api/dashboard/endpoint/route.js.nft.json +1 -1
  77. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/[id]/route.js.nft.json +1 -1
  78. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/options/route.js.nft.json +1 -1
  79. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/route.js.nft.json +1 -1
  80. package/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js.nft.json +1 -1
  81. package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  82. package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  83. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  84. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  85. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  86. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  87. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  88. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  89. package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  90. package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  91. package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  92. package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  93. package/app/.next-cli-build/server/app/api/models/route.js +1 -1
  94. package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  95. package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  96. package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  97. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  98. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  99. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  100. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  101. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  102. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  103. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  104. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  105. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/api-key-models/route.js.nft.json +1 -1
  106. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/import-models/route.js.nft.json +1 -1
  107. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/models/[...routeModel]/route.js.nft.json +1 -1
  108. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/route.js.nft.json +1 -1
  109. package/app/.next-cli-build/server/app/api/personal-cloud-providers/permissions/route.js.nft.json +1 -1
  110. package/app/.next-cli-build/server/app/api/personal-cloud-providers/route.js.nft.json +1 -1
  111. package/app/.next-cli-build/server/app/api/personal-cloud-providers/routing/route.js.nft.json +1 -1
  112. package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  113. package/app/.next-cli-build/server/app/api/provider-health/route.js.nft.json +1 -1
  114. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  115. package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  116. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  117. package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  118. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  119. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  120. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  121. package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  122. package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  123. package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  124. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  125. package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  126. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  127. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  128. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  129. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  130. package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  131. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  132. package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  133. package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  134. package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  135. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  136. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  137. package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  138. package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  139. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  140. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  141. package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  142. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  143. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  144. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  145. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  146. package/app/.next-cli-build/server/app/api/tunnel/tailscale-login/route.js.nft.json +1 -1
  147. package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js.nft.json +1 -1
  148. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  149. package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  150. package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  151. package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  152. package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  153. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  154. package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  155. package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  156. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  157. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  158. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  159. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  160. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  161. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  162. package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  163. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  164. package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  165. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  166. package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  167. package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  168. package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  169. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  170. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  171. package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  172. package/app/.next-cli-build/server/app/api/version/route.js +1 -1
  173. package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  174. package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  175. package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  176. package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  177. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  178. package/app/.next-cli-build/server/app/callback.html +1 -1
  179. package/app/.next-cli-build/server/app/callback.rsc +5 -5
  180. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +5 -5
  181. package/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  182. package/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +5 -5
  183. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  184. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  185. package/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  186. package/app/.next-cli-build/server/app/dashboard/analytics.html +1 -1
  187. package/app/.next-cli-build/server/app/dashboard/analytics.rsc +6 -6
  188. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard/analytics/__PAGE__.segment.rsc +1 -1
  189. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard/analytics.segment.rsc +1 -1
  190. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  191. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  192. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_full.segment.rsc +6 -6
  193. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_head.segment.rsc +1 -1
  194. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_index.segment.rsc +5 -5
  195. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_tree.segment.rsc +1 -1
  196. package/app/.next-cli-build/server/app/dashboard/api-keys.html +1 -1
  197. package/app/.next-cli-build/server/app/dashboard/api-keys.rsc +7 -7
  198. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard/api-keys/__PAGE__.segment.rsc +2 -2
  199. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard/api-keys.segment.rsc +1 -1
  200. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  201. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  202. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_full.segment.rsc +7 -7
  203. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_head.segment.rsc +1 -1
  204. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_index.segment.rsc +5 -5
  205. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_tree.segment.rsc +1 -1
  206. package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  207. package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +7 -7
  208. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  209. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  210. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  211. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  212. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +7 -7
  213. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  214. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +5 -5
  215. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  216. package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  217. package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +7 -7
  218. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  219. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  220. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  221. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  222. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +7 -7
  223. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  224. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +5 -5
  225. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  226. package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  227. package/app/.next-cli-build/server/app/dashboard/combos.rsc +7 -7
  228. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  229. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  230. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  231. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  232. package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +7 -7
  233. package/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  234. package/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +5 -5
  235. package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  236. package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  237. package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +7 -7
  238. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  239. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  240. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  241. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  242. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +7 -7
  243. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  244. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +5 -5
  245. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  246. package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  247. package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +7 -7
  248. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  249. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  250. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  251. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  252. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  253. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +7 -7
  254. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  255. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +5 -5
  256. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  257. package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  258. package/app/.next-cli-build/server/app/dashboard/mitm.rsc +7 -7
  259. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  260. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  261. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  262. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  263. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +7 -7
  264. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  265. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +5 -5
  266. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  267. package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  268. package/app/.next-cli-build/server/app/dashboard/profile.rsc +6 -6
  269. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +1 -1
  270. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  271. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  272. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  273. package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +6 -6
  274. package/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  275. package/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +5 -5
  276. package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  277. package/app/.next-cli-build/server/app/dashboard/prompt-logs.html +1 -1
  278. package/app/.next-cli-build/server/app/dashboard/prompt-logs.rsc +6 -6
  279. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs/__PAGE__.segment.rsc +1 -1
  280. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs.segment.rsc +1 -1
  281. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  282. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  283. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_full.segment.rsc +6 -6
  284. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_head.segment.rsc +1 -1
  285. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_index.segment.rsc +5 -5
  286. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_tree.segment.rsc +1 -1
  287. package/app/.next-cli-build/server/app/dashboard/provider-health.html +1 -1
  288. package/app/.next-cli-build/server/app/dashboard/provider-health.rsc +6 -6
  289. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health/__PAGE__.segment.rsc +1 -1
  290. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health.segment.rsc +1 -1
  291. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  292. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  293. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_full.segment.rsc +6 -6
  294. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_head.segment.rsc +1 -1
  295. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_index.segment.rsc +5 -5
  296. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_tree.segment.rsc +1 -1
  297. package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  298. package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +7 -7
  299. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  300. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  301. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  302. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  303. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  304. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +7 -7
  305. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  306. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +5 -5
  307. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  308. package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  309. package/app/.next-cli-build/server/app/dashboard/providers.rsc +7 -7
  310. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  311. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  312. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  313. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  314. package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +7 -7
  315. package/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  316. package/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +5 -5
  317. package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  318. package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  319. package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +7 -7
  320. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  321. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  322. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  323. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  324. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +7 -7
  325. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  326. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +5 -5
  327. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  328. package/app/.next-cli-build/server/app/dashboard/quota.html +1 -1
  329. package/app/.next-cli-build/server/app/dashboard/quota.rsc +8 -8
  330. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  331. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  332. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  333. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  334. package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +8 -8
  335. package/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  336. package/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +5 -5
  337. package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  338. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  339. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  340. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +5 -5
  341. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +5 -5
  342. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  343. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +5 -5
  344. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  345. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  346. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  347. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  348. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  349. package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
  350. package/app/.next-cli-build/server/app/dashboard/skills.rsc +7 -7
  351. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
  352. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
  353. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  354. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  355. package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +7 -7
  356. package/app/.next-cli-build/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
  357. package/app/.next-cli-build/server/app/dashboard/skills.segments/_index.segment.rsc +5 -5
  358. package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +1 -1
  359. package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  360. package/app/.next-cli-build/server/app/dashboard/translator.rsc +7 -7
  361. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  362. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  363. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  364. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  365. package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +7 -7
  366. package/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  367. package/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +5 -5
  368. package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  369. package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  370. package/app/.next-cli-build/server/app/dashboard/usage.rsc +7 -7
  371. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  372. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  373. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  374. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  375. package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +7 -7
  376. package/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  377. package/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +5 -5
  378. package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  379. package/app/.next-cli-build/server/app/dashboard.html +1 -1
  380. package/app/.next-cli-build/server/app/dashboard.rsc +7 -7
  381. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  382. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  383. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  384. package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +7 -7
  385. package/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  386. package/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +5 -5
  387. package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  388. package/app/.next-cli-build/server/app/index.html +1 -1
  389. package/app/.next-cli-build/server/app/index.rsc +5 -5
  390. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  391. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +5 -5
  392. package/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  393. package/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +5 -5
  394. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  395. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  396. package/app/.next-cli-build/server/app/landing.html +1 -1
  397. package/app/.next-cli-build/server/app/landing.rsc +5 -5
  398. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +5 -5
  399. package/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  400. package/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +5 -5
  401. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  402. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  403. package/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  404. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  405. package/app/.next-cli-build/server/app/login.html +1 -1
  406. package/app/.next-cli-build/server/app/login.rsc +6 -6
  407. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +6 -6
  408. package/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  409. package/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +5 -5
  410. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  411. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  412. package/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  413. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  414. package/app/.next-cli-build/server/app-paths-manifest.json +2 -2
  415. package/app/.next-cli-build/server/chunks/2338.js +1 -1
  416. package/app/.next-cli-build/server/chunks/3110.js +1 -1
  417. package/app/.next-cli-build/server/chunks/4746.js +1 -1
  418. package/app/.next-cli-build/server/chunks/6328.js +1 -1
  419. package/app/.next-cli-build/server/chunks/9434.js +1 -1
  420. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  421. package/app/.next-cli-build/server/pages/404.html +1 -1
  422. package/app/.next-cli-build/server/pages/500.html +1 -1
  423. package/app/.next-cli-build/static/chunks/{5263-f88ae040ff6e3eae.js → 5263-432ceaaed3643136.js} +1 -1
  424. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/api-keys/{page-c20e119ecfe4f8e7.js → page-12b85fbd18442460.js} +1 -1
  425. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-shm +0 -0
  426. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-wal +0 -0
  427. package/app/package.json +1 -1
  428. package/package.json +1 -1
  429. /package/app/.next-cli-build/static/{yopfPcv353p5_vZVhyMSI → IVZohB3ZT9sZGFxHrPUg3}/_buildManifest.js +0 -0
  430. /package/app/.next-cli-build/static/{yopfPcv353p5_vZVhyMSI → IVZohB3ZT9sZGFxHrPUg3}/_ssgManifest.js +0 -0
  431. /package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/{upgrade-5.0.26-to-5.0.27-5.0.27-20260625-125701 → upgrade-5.0.30-to-5.0.31-5.0.31-20260625-153028}/data.sqlite +0 -0
@@ -1,4 +1,4 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7593],{56484:(e,t,s)=>{"use strict";s.d(t,{default:()=>O});var n=s(95155),r=s(12115),l=s(35497),a=s(94027),o=s(11059);let i=Object.freeze({enabled:!0,requestsPerMinute:20,promptCharsMax:12e4,maxOutputTokens:0,forceThinkingOff:!0,allowedIpCidrs:[],expiresAt:""});function d(e){return String(e||"").trim().toLowerCase()}function c(e){return Array.isArray(e)?[...new Set(e.map(e=>String(e||"").trim()).filter(Boolean))]:[]}function x(e,t){let s=c(e?.allowedModels),n=s[0]||String(t||"programmer").trim()||"programmer",r=s.find(e=>/fast|small|haiku/i.test(e))||s.find(e=>e!==n)||n;return{codingModel:n,fastModel:r}}function m({icon:e,materialIcon:t,image:s,children:r,className:l=""}){return(0,n.jsxs)("span",{className:`inline-flex items-center gap-1.5 ${l}`,children:[s?(0,n.jsx)("img",{src:s,alt:"","aria-hidden":"true",className:"size-4 rounded-sm object-contain"}):t?(0,n.jsx)("span",{"aria-hidden":"true",className:"material-symbols-outlined text-[17px] leading-none",children:t}):e?(0,n.jsx)("span",{"aria-hidden":"true",className:"text-base leading-none",children:e}):null,(0,n.jsx)("span",{children:r})]})}function u(e,t=0){let s=Number(e);return Number.isFinite(s)?Math.max(0,Math.floor(s)):t}function h(e,t=!0){return null==e||""===e?t:!0===e||"true"===e||1===e||"1"===e}function p(e){return Array.isArray(e)?[...new Set(e.map(e=>String(e||"").trim()).filter(Boolean))]:[]}function b(e){return e&&"object"==typeof e&&!Array.isArray(e)&&Object.keys(e).length>0}function g(e={},t={}){let s={...t},n=e&&"object"==typeof e&&!Array.isArray(e)?e:{};return{enabled:h(n.enabled??s.enabled,!0),requestsPerMinute:u(n.requestsPerMinute??s.requestsPerMinute,0),promptCharsMax:u(n.promptCharsMax??s.promptCharsMax,0),maxOutputTokens:u(n.maxOutputTokens??n.outputTokensMax??n.maxTokens??n.max_tokens??n.max_completion_tokens??s.maxOutputTokens,0),forceThinkingOff:h(n.forceThinkingOff??s.forceThinkingOff,!0),allowedIpCidrs:p(n.allowedIpCidrs??s.allowedIpCidrs),expiresAt:String(n.expiresAt??s.expiresAt??"").trim()}}function f({models:e,emptyLabel:t="Chưa g\xe1n model"}){let s=c(e);return 0===s.length?(0,n.jsx)("span",{className:"text-xs text-text-muted",children:t}):(0,n.jsxs)("div",{className:"mt-2 flex flex-wrap gap-1.5",children:[s.slice(0,8).map(e=>(0,n.jsx)("span",{className:"rounded-full border border-border bg-surface px-2 py-1 font-mono text-xs",children:e},e)),s.length>8?(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-1 text-xs",children:["+",s.length-8," model kh\xe1c"]}):null]})}function y({limits:e,showThinking:t=!1,showOutputLimit:s=!1}){if(!b(e))return(0,n.jsx)("div",{className:"mt-2 flex flex-wrap gap-2 text-xs text-text-muted",children:(0,n.jsx)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:"policy: chưa set, kh\xf4ng giới hạn"})});let r=g(e);return(0,n.jsxs)("div",{className:"mt-2 flex flex-wrap gap-2 text-xs text-text-muted",children:[(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:["policy: ",r.enabled?"bật":"tắt"]}),(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:[r.requestsPerMinute||"∞"," req/ph\xfat"]}),(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:[r.promptCharsMax||"∞"," chars prompt"]}),s?(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:[r.maxOutputTokens||"∞"," output tokens"]}):null,t?(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:["thinking: ",r.forceThinkingOff?"force off":"client tự quyết"]}):null,r.allowedIpCidrs.length>0?(0,n.jsx)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:"IP locked"}):null]})}function j({label:e,value:t,onChange:s,hint:r}){return(0,n.jsxs)("label",{className:"block",children:[(0,n.jsx)("span",{className:"mb-1 block text-xs font-medium text-text-muted",children:e}),(0,n.jsx)("input",{type:"number",min:"0",value:t,onChange:e=>s(u(e.target.value,0)),className:"w-full rounded-xl border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary"}),r?(0,n.jsx)("span",{className:"mt-1 block text-xs text-text-muted",children:r}):null]})}function v({isOpen:e,keyName:t,policy:s,setPolicy:r,onClose:a,onSave:o,onClear:d,saving:c,clearLabel:x="X\xf3a policy / kh\xf4ng limit"}){let m=g(s,i),u=(e,t)=>r(s=>g({...s,[e]:t},i));return(0,n.jsx)(l.aF,{isOpen:e,onClose:a,title:`Policy API key: ${t||"API Key"}`,size:"xl",children:(0,n.jsxs)("div",{className:"space-y-4",children:[(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface/60 p-3 text-sm text-text-muted",children:["Key mới tự c\xf3 ",(0,n.jsx)("b",{children:"default policy"}),". Chỉ admin được sửa policy. Request/ph\xfat = 0 nghĩa l\xe0 kh\xf4ng giới hạn tần suất. Max output tokens = 0 nghĩa l\xe0 kh\xf4ng \xe9p giới hạn output."]}),(0,n.jsxs)("label",{className:"flex items-center justify-between gap-3 rounded-xl border border-border p-3 text-sm",children:[(0,n.jsxs)("span",{children:[(0,n.jsx)("b",{children:"Bật policy"}),(0,n.jsx)("br",{}),(0,n.jsx)("span",{className:"text-xs text-text-muted",children:"Tắt mục n\xe0y th\xec policy được lưu nhưng kh\xf4ng \xe1p limit."})]}),(0,n.jsx)("input",{type:"checkbox",checked:m.enabled,onChange:e=>u("enabled",e.target.checked)})]}),(0,n.jsxs)("div",{className:"grid gap-3 md:grid-cols-2",children:[(0,n.jsx)(j,{label:"Request / ph\xfat",value:m.requestsPerMinute,onChange:e=>u("requestsPerMinute",e),hint:"0 = kh\xf4ng giới hạn tần suất. Khuyến nghị user thường: 10–20 req/ph\xfat."}),(0,n.jsx)(j,{label:"Max output tokens",value:m.maxOutputTokens,onChange:e=>u("maxOutputTokens",e),hint:"0 = kh\xf4ng giới hạn. VS Code khuyến nghị 2048–3072; chat d\xe0i 4096–8192."})]}),(0,n.jsx)(j,{label:"Prompt chars tối đa",value:m.promptCharsMax,onChange:e=>u("promptCharsMax",e),hint:"0 = kh\xf4ng giới hạn input/prompt."}),(0,n.jsxs)("label",{className:"flex items-center justify-between gap-3 rounded-xl border border-border p-3 text-sm",children:[(0,n.jsxs)("span",{children:[(0,n.jsx)("b",{children:"Force Thinking Off"}),(0,n.jsx)("br",{}),(0,n.jsx)("span",{className:"text-xs text-text-muted",children:"Khi bật, gateway \xe9p request c\xf3 chat_template_kwargs.enable_thinking=false theo chuẩn llama.cpp."})]}),(0,n.jsx)("input",{type:"checkbox",checked:m.forceThinkingOff,onChange:e=>u("forceThinkingOff",e.target.checked)})]}),(0,n.jsxs)("label",{className:"block",children:[(0,n.jsx)("span",{className:"mb-1 block text-xs font-medium text-text-muted",children:"IP/CIDR được ph\xe9p"}),(0,n.jsx)("textarea",{value:p(m.allowedIpCidrs).join("\n"),onChange:e=>u("allowedIpCidrs",[...new Set(String(e.target.value||"").split(/[\n,]+/).map(e=>e.trim()).filter(Boolean))]),rows:3,className:"w-full rounded-xl border border-border bg-background px-3 py-2 font-mono text-sm text-text-main outline-none focus:border-primary",placeholder:"10.0.0.0/8\n192.168.0.0/16"}),(0,n.jsx)("span",{className:"mt-1 block text-xs text-text-muted",children:"Để trống = mọi IP. Hỗ trợ IPv4 exact hoặc CIDR."})]}),(0,n.jsxs)("label",{className:"block",children:[(0,n.jsx)("span",{className:"mb-1 block text-xs font-medium text-text-muted",children:"Hết hạn l\xfac"}),(0,n.jsx)("input",{value:m.expiresAt,onChange:e=>u("expiresAt",e.target.value),className:"w-full rounded-xl border border-border bg-background px-3 py-2 font-mono text-sm text-text-main outline-none focus:border-primary",placeholder:"2026-12-31T23:59:59+07:00 hoặc để trống"})]}),(0,n.jsxs)("div",{className:"flex flex-wrap justify-end gap-2",children:[(0,n.jsx)(l.$n,{variant:"ghost",onClick:a,children:"Hủy"}),d?(0,n.jsx)(l.$n,{variant:"outline",onClick:d,disabled:c,children:x}):null,(0,n.jsx)(l.$n,{onClick:()=>o(m),disabled:c,children:c?"Đang lưu...":"Lưu policy"})]})]})})}function N({open:e,keyName:t,models:s,setModels:a,activeProviders:o,modelAliases:i,onClose:d,onSave:x,saving:m,personalOnly:u,extraModels:h}){let[p,b]=(0,r.useState)(!1),g=c(s),f=e=>{let t=e?.value||e?.name||e;a(e=>c(e).filter(e=>e!==t))};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(l.aF,{isOpen:e,onClose:d,title:`Model access: ${t||"API Key"}`,size:"xl",children:(0,n.jsxs)("div",{className:"space-y-4",children:[(0,n.jsx)("p",{className:"text-sm text-text-muted",children:"Chọn một hoặc nhiều model m\xe0 API key n\xe0y được ph\xe9p sử dụng. Trang n\xe0y kh\xf4ng cho lưu danh s\xe1ch model rỗng."}),(0,n.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,n.jsx)("span",{className:"text-sm font-medium",children:"Model được ph\xe9p d\xf9ng"}),(0,n.jsx)(l.$n,{size:"sm",variant:"outline",onClick:()=>b(!0),children:"Th\xeam model"})]}),0===g.length?(0,n.jsx)("div",{className:"rounded-xl border border-dashed border-border p-4 text-sm text-text-muted",children:"Chưa chọn model n\xe0o. H\xe3y th\xeam \xedt nhất một model trước khi lưu."}):(0,n.jsx)("div",{className:"flex flex-wrap gap-2",children:g.map(e=>(0,n.jsxs)("button",{type:"button",onClick:()=>f(e),className:"rounded-full border border-primary/30 bg-primary/10 px-2 py-1 font-mono text-xs text-primary transition hover:bg-red-500/10 hover:text-red-600",title:"Bấm để gỡ model n\xe0y",children:[e," \xd7"]},e))}),(0,n.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,n.jsx)(l.$n,{variant:"ghost",onClick:d,children:"Hủy"}),(0,n.jsx)(l.$n,{onClick:x,disabled:m||0===g.length,children:m?"Đang lưu...":"Lưu danh s\xe1ch model"})]})]})}),(0,n.jsx)(l.rq,{isOpen:p,onClose:()=>b(!1),onSelect:e=>{let t=e?.value||e?.name||e;t&&a(e=>c([...e,t]))},onDeselect:f,activeProviders:o,modelAliases:i,title:"Chọn model được ph\xe9p d\xf9ng",addedModelValues:g,closeOnSelect:!1,personalOnly:u,extraModels:h})]})}function k({label:e,value:t,hint:s}){return(0,n.jsxs)("div",{className:"rounded-2xl border border-border bg-surface/70 p-4",children:[(0,n.jsx)("div",{className:"text-xs font-medium uppercase tracking-wide text-text-muted",children:e}),(0,n.jsx)("div",{className:"mt-2 text-2xl font-semibold text-text-main",children:t}),s?(0,n.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:s}):null]})}function w({pagination:e,pageSize:t,onPageChange:s,onPageSizeChange:r,loading:a}){let o=Number(e?.page||1),i=Number(e?.totalPages||1),d=Number(e?.total||0),c=0===d?0:(o-1)*t+1,x=Math.min(d,o*t);return(0,n.jsxs)("div",{className:"flex flex-col gap-3 border-t border-border px-4 py-3 md:flex-row md:items-center md:justify-between",children:[(0,n.jsxs)("div",{className:"text-sm text-text-muted",children:["Hiển thị ",(0,n.jsx)("b",{children:c}),"–",(0,n.jsx)("b",{children:x})," / ",(0,n.jsx)("b",{children:d})," API keys"]}),(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,n.jsxs)("select",{value:t,onChange:e=>r(Number(e.target.value)),className:"rounded-xl border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary",disabled:a,children:[(0,n.jsx)("option",{value:25,children:"25 / trang"}),(0,n.jsx)("option",{value:50,children:"50 / trang"}),(0,n.jsx)("option",{value:100,children:"100 / trang"})]}),(0,n.jsx)(l.$n,{variant:"outline",size:"sm",onClick:()=>s(1),disabled:a||o<=1,children:"Đầu"}),(0,n.jsx)(l.$n,{variant:"outline",size:"sm",onClick:()=>s(Math.max(1,o-1)),disabled:a||o<=1,children:"Trước"}),(0,n.jsxs)("span",{className:"rounded-xl border border-border bg-surface px-3 py-2 text-sm",children:["Trang ",o,"/",i]}),(0,n.jsx)(l.$n,{variant:"outline",size:"sm",onClick:()=>s(Math.min(i,o+1)),disabled:a||o>=i,children:"Sau"}),(0,n.jsx)(l.$n,{variant:"outline",size:"sm",onClick:()=>s(i),disabled:a||o>=i,children:"Cuối"})]})]})}function C({image:e,label:t,onClick:s}){return(0,n.jsx)("button",{type:"button",onClick:s,title:t,"aria-label":t,className:"flex h-9 w-9 items-center justify-center rounded-xl border border-border bg-background transition hover:border-primary/50 hover:bg-surface focus:outline-none focus:ring-2 focus:ring-primary/20",children:(0,n.jsx)("img",{src:e,alt:"","aria-hidden":"true",className:"size-5 rounded-sm object-contain"})})}function P({apiKey:e,onClaudeSettings:t,onOpenCodeSettings:s,onCodexSettings:r,onQwenSettings:l}){return(0,n.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,n.jsx)(C,{image:"/providers/claude.png",label:"Claude Code Settings",onClick:()=>t(e)}),(0,n.jsx)(C,{image:"/providers/opencode.png",label:"OpenCode Settings",onClick:()=>s(e)}),(0,n.jsx)(C,{image:"/providers/codex.png",label:"Codex Settings",onClick:()=>r(e)}),(0,n.jsx)(C,{image:"/providers/qwen.png",label:"Qwen Code Settings",onClick:()=>l(e)})]})}function A({apiKey:e,owner:t,isAdmin:s,onRename:l,onRotate:a,onEditModels:o,onEditPolicy:i,onAssignOwner:d,onDelete:c}){let[x,u]=(0,r.useState)(!1),h=(0,r.useRef)(null);(0,r.useEffect)(()=>{if(!x)return;let e=e=>{!h.current||h.current.contains(e.target)||u(!1)},t=e=>{"Escape"===e.key&&u(!1)};return document.addEventListener("pointerdown",e,!0),document.addEventListener("keydown",t),()=>{document.removeEventListener("pointerdown",e,!0),document.removeEventListener("keydown",t)}},[h,x,u]);let p=e=>{u(!1),e()};return(0,n.jsxs)("details",{ref:h,className:"group",open:x,onToggle:e=>u(e.currentTarget.open),children:[(0,n.jsx)("summary",{title:"Thao t\xe1c kh\xe1c",className:"flex h-9 cursor-pointer list-none items-center rounded-xl border border-border bg-background px-3 text-sm font-medium text-text-main transition hover:border-primary/50 hover:bg-surface focus:outline-none focus:ring-2 focus:ring-primary/20 [&::-webkit-details-marker]:hidden",children:(0,n.jsx)("span",{"aria-hidden":"true",className:"text-lg leading-none",children:"⋯"})}),(0,n.jsxs)("div",{className:"ml-auto mt-2 w-48 overflow-hidden rounded-xl border border-border bg-background py-1 text-left shadow-xl shadow-black/10",children:[(0,n.jsx)("button",{type:"button",className:"block w-full px-3 py-2 text-left text-sm text-text-main transition hover:bg-surface",onClick:()=>p(()=>l(e.id,e.name)),children:(0,n.jsx)(m,{icon:"✏️",children:"Đổi t\xean"})}),(0,n.jsx)("button",{type:"button",className:"block w-full px-3 py-2 text-left text-sm text-text-main transition hover:bg-surface",onClick:()=>p(()=>a(e)),children:(0,n.jsx)(m,{materialIcon:"key",children:"Đổi key"})}),(0,n.jsx)("div",{className:"my-1 border-t border-border"}),(0,n.jsx)("button",{type:"button",className:"block w-full px-3 py-2 text-left text-sm text-text-main transition hover:bg-surface",onClick:()=>p(()=>o(e)),children:(0,n.jsx)(m,{icon:"\uD83D\uDCE6",children:"Models"})}),s?(0,n.jsx)("button",{type:"button",className:"block w-full px-3 py-2 text-left text-sm text-text-main transition hover:bg-surface",onClick:()=>p(()=>i(e)),children:(0,n.jsx)(m,{icon:"\uD83D\uDEE1️",children:"Policy"})}):null,s?(0,n.jsx)("button",{type:"button",className:"block w-full px-3 py-2 text-left text-sm text-text-main transition hover:bg-surface",onClick:()=>p(()=>d(e.id,t)),children:(0,n.jsx)(m,{icon:"\uD83D\uDC64",children:"Owner"})}):null,(0,n.jsx)("div",{className:"my-1 border-t border-border"}),(0,n.jsx)("button",{type:"button",className:"block w-full px-3 py-2 text-left text-sm font-medium text-red-600 transition hover:bg-red-500/10",onClick:()=>p(()=>c(e.id)),children:(0,n.jsx)(m,{icon:"\uD83D\uDDD1️",children:"X\xf3a"})})]})]})}function S({keys:e,visibleKeys:t,copied:s,copy:r,isAdmin:a,onToggleVisible:o,onToggleActive:i,onApiTest:d,onClaudeSettings:x,onOpenCodeSettings:m,onCodexSettings:u,onQwenSettings:h,onRename:p,onRotate:f,onEditModels:y,onEditPolicy:j,onAssignOwner:v,onDelete:N}){return(0,n.jsx)("div",{className:"overflow-hidden rounded-2xl border border-border",children:(0,n.jsx)("div",{className:"overflow-x-auto",children:(0,n.jsxs)("table",{className:"min-w-full divide-y divide-border text-sm",children:[(0,n.jsx)("thead",{className:"bg-surface/80 text-left text-xs uppercase tracking-wide text-text-muted",children:(0,n.jsxs)("tr",{children:[(0,n.jsx)("th",{className:"whitespace-nowrap px-4 py-3 font-medium",children:"T\xean / Key"}),(0,n.jsx)("th",{className:"whitespace-nowrap px-4 py-3 font-medium",children:"Trạng th\xe1i"}),(0,n.jsx)("th",{className:"whitespace-nowrap px-4 py-3 font-medium",children:"Owner"}),(0,n.jsx)("th",{className:"whitespace-nowrap px-4 py-3 font-medium",children:"Model"}),(0,n.jsx)("th",{className:"whitespace-nowrap px-4 py-3 font-medium",children:"Policy"}),(0,n.jsx)("th",{className:"whitespace-nowrap px-4 py-3 font-medium",children:"Ng\xe0y tạo"}),(0,n.jsx)("th",{className:"whitespace-nowrap px-4 py-3 text-right font-medium",children:"Thao t\xe1c"})]})}),(0,n.jsx)("tbody",{className:"divide-y divide-border bg-background",children:e.map(e=>{var k;let w=t.has(e.id),C=e.ownerUser||e.createdByUser||"chưa g\xe1n",S=c(e.allowedModels),O=b(e.limits),I=g(e.limits||{});return(0,n.jsxs)("tr",{className:"align-top transition hover:bg-surface/50",children:[(0,n.jsxs)("td",{className:"min-w-[280px] px-4 py-4",children:[(0,n.jsx)("div",{className:"font-medium text-text-main",children:e.name||"API Key"}),(0,n.jsxs)("div",{className:"group/key mt-2 flex max-w-[380px] items-center gap-2 rounded-xl border border-border bg-surface px-3 py-2 font-mono text-xs text-text-main",children:[(0,n.jsx)("span",{className:"min-w-0 flex-1 truncate",children:w?e.key:(k=e.key)?k.length>12?`${k.slice(0,8)}...${k.slice(-4)}`:k:""}),(0,n.jsx)("button",{type:"button",title:w?"Ẩn key":"Hiện key","aria-label":w?"Ẩn key":"Hiện key",className:"shrink-0 rounded p-0.5 text-text-muted transition hover:bg-sidebar hover:text-primary",onClick:()=>o(e.id),children:(0,n.jsx)("span",{className:"material-symbols-outlined text-sm",children:w?"visibility_off":"visibility"})}),(0,n.jsxs)("div",{className:"relative shrink-0 group/btn",children:[(0,n.jsx)("button",{type:"button",onClick:()=>r(e.key,e.id),className:"rounded p-0.5 text-text-muted transition hover:bg-sidebar hover:text-primary","aria-label":s===e.id?"Đ\xe3 copy":"Copy API key",children:(0,n.jsx)("span",{className:"material-symbols-outlined text-sm",children:s===e.id?"check":"content_copy"})}),(0,n.jsx)("span",{className:"pointer-events-none absolute left-1/2 top-5 mt-1 -translate-x-1/2 whitespace-nowrap text-[10px] text-text-muted opacity-0 transition-opacity group-hover/btn:opacity-100",children:s===e.id?"Copied!":"Copy"})]}),(0,n.jsxs)("div",{className:"relative shrink-0 group/btn",children:[(0,n.jsx)("button",{type:"button",onClick:()=>d(e),className:"rounded p-0.5 text-text-muted transition hover:bg-sidebar hover:text-primary","aria-label":"Test API key bằng curl",children:(0,n.jsx)("span",{className:"material-symbols-outlined text-sm",children:"science"})}),(0,n.jsx)("span",{className:"pointer-events-none absolute left-1/2 top-5 mt-1 -translate-x-1/2 whitespace-nowrap text-[10px] text-text-muted opacity-0 transition-opacity group-hover/btn:opacity-100",children:"Test"})]})]}),e.createdByUser?(0,n.jsxs)("div",{className:"mt-2 text-xs text-text-muted",children:["Tạo bởi: ",e.createdByUser]}):null]}),(0,n.jsx)("td",{className:"whitespace-nowrap px-4 py-4",children:(0,n.jsx)(l.lM,{checked:!!e.isActive,onChange:t=>i(e.id,t)})}),(0,n.jsx)("td",{className:"min-w-[160px] px-4 py-4",children:(0,n.jsx)("div",{className:"break-all text-sm text-text-main",children:C})}),(0,n.jsx)("td",{className:"min-w-[220px] px-4 py-4",children:S.length>0?(0,n.jsxs)("div",{className:"flex flex-wrap gap-1.5",children:[S.slice(0,3).map(e=>(0,n.jsx)("span",{className:"rounded-full border border-border bg-surface px-2 py-1 font-mono text-xs",children:e},e)),S.length>3?(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-1 text-xs",children:["+",S.length-3]}):null]}):(0,n.jsx)("span",{className:"rounded-full border border-amber-500/30 bg-amber-500/10 px-2 py-1 text-xs text-amber-700 dark:text-amber-300",children:"Legacy full access"})}),(0,n.jsx)("td",{className:"min-w-[220px] px-4 py-4",children:O?(0,n.jsxs)("div",{className:"flex flex-wrap gap-1.5 text-xs",children:[(0,n.jsx)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:I.enabled?"bật":"tắt"}),(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:[I.requestsPerMinute||"∞","/ph\xfat"]}),(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:[I.promptCharsMax||"∞"," chars"]}),a&&I.maxOutputTokens>0?(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:[I.maxOutputTokens," out"]}):null,a&&I.forceThinkingOff?(0,n.jsx)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:"thinking off"}):null,I.allowedIpCidrs.length>0?(0,n.jsx)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:"IP locked"}):null]}):(0,n.jsx)("span",{className:"rounded-full border border-border bg-surface px-2 py-1 text-xs text-text-muted",children:"chưa set"})}),(0,n.jsx)("td",{className:"min-w-[150px] px-4 py-4 text-xs text-text-muted",children:function(e){if(!e)return"kh\xf4ng r\xf5";try{return new Date(e).toLocaleString()}catch{return String(e)}}(e.createdAt)}),(0,n.jsx)("td",{className:"min-w-[200px] px-4 py-4",children:(0,n.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[(0,n.jsx)(A,{apiKey:e,owner:C,isAdmin:a,onRename:p,onRotate:f,onEditModels:y,onEditPolicy:j,onAssignOwner:v,onDelete:N}),(0,n.jsx)(P,{apiKey:e,onClaudeSettings:x,onOpenCodeSettings:m,onCodexSettings:u,onQwenSettings:h})]})})]},e.id)})})]})})})}function O(){let e,t,s,m,[h,p]=(0,r.useState)([]),[j,C]=(0,r.useState)(!0),[P,A]=(0,r.useState)(""),[O,I]=(0,r.useState)(!1),[M,$]=(0,r.useState)(""),[T,E]=(0,r.useState)(""),[K,_]=(0,r.useState)(""),[L,R]=(0,r.useState)(""),[D,U]=(0,r.useState)(new Set),[F,B]=(0,r.useState)(null),[q,z]=(0,r.useState)([]),[H,W]=(0,r.useState)(""),[Y,J]=(0,r.useState)(!1),[Q,V]=(0,r.useState)(!1),[X,Z]=(0,r.useState)([]),[G,ee]=(0,r.useState)([]),[et,es]=(0,r.useState)(!1),[en,er]=(0,r.useState)(i),[el,ea]=(0,r.useState)(i),[eo,ei]=(0,r.useState)(!1),[ed,ec]=(0,r.useState)(!1),[ex,em]=(0,r.useState)(!1),[eu,eh]=(0,r.useState)([]),[ep,eb]=(0,r.useState)({}),[eg,ef]=(0,r.useState)(!1),[ey,ej]=(0,r.useState)(!1),[ev,eN]=(0,r.useState)(null),[ek,ew]=(0,r.useState)([]),[eC,eP]=(0,r.useState)(!1),[eA,eS]=(0,r.useState)(null),[eO,eI]=(0,r.useState)(i),[eM,e$]=(0,r.useState)(!1),[eT,eE]=(0,r.useState)(2),[eK,e_]=(0,r.useState)(0),[eL,eR]=(0,r.useState)(0),[eD,eU]=(0,r.useState)(""),[eF,eB]=(0,r.useState)(null),[eq,ez]=(0,r.useState)(null),[eH,eW]=(0,r.useState)(null),[eY,eJ]=(0,r.useState)(null),[eQ,eV]=(0,r.useState)(null),[eX,eZ]=(0,r.useState)(""),[eG,e0]=(0,r.useState)(""),[e1,e3]=(0,r.useState)("all"),[e2,e4]=(0,r.useState)(1),[e5,e8]=(0,r.useState)(25),[e6,e7]=(0,r.useState)({page:1,pageSize:25,total:0,totalAll:0,totalPages:1,status:"all",search:""}),{copied:e9,copy:te}=(0,o.C)(),{isAdmin:tt,isMonitorAdmin:ts,canManageApiKeys:tn,userId:tr}=(0,a.s)(),tl=tt||ts||tn,ta=Number.isFinite(Number(eT))?Number(eT):2,to=Number.isFinite(Number(eK))?Number(eK):h.length,ti=Number.isFinite(Number(eL))?Number(eL):Number(e6.totalAll||e6.total||0),td=Number(e6.total||0),tc=!tl&&to>=ta,tx=eD?`${eD}/v1`:"/v1",tm=eD?`${eD}/v1/chat/completions`:"/v1/chat/completions",tu=c(X)[0]||"",th=(e=c(eF?.allowedModels)[0],t=String(tu||"").trim(),e||t||"YOUR_MODEL"),tp=eF?g(eF.limits||{}):i,tb=tp.maxOutputTokens>0?tp.maxOutputTokens:0,tg=eF?function({endpoint:e,apiKey:t,model:s,maxOutputTokens:n=0}){let r=String(e||"/v1/chat/completions").replace(/"/g,""),l=String(t||"YOUR_API_KEY").replace(/"/g,""),a=u(n,0),o={model:String(s||"YOUR_MODEL"),messages:[{role:"user",content:"Say hi.\nReply in one short sentence."}],temperature:.2,stream:!1};a>0&&(o.max_tokens=a);let i=JSON.stringify(o).replace(/"/g,'\\"');return`curl.exe -X POST "${r}" ^
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7593],{56484:(e,t,s)=>{"use strict";s.d(t,{default:()=>O});var n=s(95155),r=s(12115),l=s(35497),a=s(94027),o=s(11059);let i=Object.freeze({enabled:!0,requestsPerMinute:20,promptCharsMax:12e4,maxOutputTokens:0,forceThinkingOff:!0,allowedIpCidrs:[],expiresAt:""});function d(e){return String(e||"").trim().toLowerCase()}function c(e){return Array.isArray(e)?[...new Set(e.map(e=>String(e||"").trim()).filter(Boolean))]:[]}function x(e,t){let s=c(e?.allowedModels),n=s[0]||String(t||"programmer").trim()||"programmer",r=s.find(e=>/fast|small|haiku/i.test(e))||s.find(e=>e!==n)||n;return{codingModel:n,fastModel:r}}function m({icon:e,materialIcon:t,image:s,children:r,className:l=""}){return(0,n.jsxs)("span",{className:`inline-flex items-center gap-1.5 ${l}`,children:[s?(0,n.jsx)("img",{src:s,alt:"","aria-hidden":"true",className:"size-4 rounded-sm object-contain"}):t?(0,n.jsx)("span",{"aria-hidden":"true",className:"material-symbols-outlined text-[17px] leading-none",children:t}):e?(0,n.jsx)("span",{"aria-hidden":"true",className:"text-base leading-none",children:e}):null,(0,n.jsx)("span",{children:r})]})}function u(e,t=0){let s=Number(e);return Number.isFinite(s)?Math.max(0,Math.floor(s)):t}function h(e,t=!0){return null==e||""===e?t:!0===e||"true"===e||1===e||"1"===e}function p(e){return Array.isArray(e)?[...new Set(e.map(e=>String(e||"").trim()).filter(Boolean))]:[]}function b(e){return e&&"object"==typeof e&&!Array.isArray(e)&&Object.keys(e).length>0}function g(e={},t={}){let s={...t},n=e&&"object"==typeof e&&!Array.isArray(e)?e:{};return{enabled:h(n.enabled??s.enabled,!0),requestsPerMinute:u(n.requestsPerMinute??s.requestsPerMinute,0),promptCharsMax:u(n.promptCharsMax??s.promptCharsMax,0),maxOutputTokens:u(n.maxOutputTokens??n.outputTokensMax??n.maxTokens??n.max_tokens??n.max_completion_tokens??s.maxOutputTokens,0),forceThinkingOff:h(n.forceThinkingOff??s.forceThinkingOff,!0),allowedIpCidrs:p(n.allowedIpCidrs??s.allowedIpCidrs),expiresAt:String(n.expiresAt??s.expiresAt??"").trim()}}function f({models:e,emptyLabel:t="Chưa g\xe1n model"}){let s=c(e);return 0===s.length?(0,n.jsx)("span",{className:"text-xs text-text-muted",children:t}):(0,n.jsxs)("div",{className:"mt-2 flex flex-wrap gap-1.5",children:[s.slice(0,8).map(e=>(0,n.jsx)("span",{className:"rounded-full border border-border bg-surface px-2 py-1 font-mono text-xs",children:e},e)),s.length>8?(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-1 text-xs",children:["+",s.length-8," model kh\xe1c"]}):null]})}function y({limits:e,showThinking:t=!1,showOutputLimit:s=!1}){if(!b(e))return(0,n.jsx)("div",{className:"mt-2 flex flex-wrap gap-2 text-xs text-text-muted",children:(0,n.jsx)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:"policy: chưa set, kh\xf4ng giới hạn"})});let r=g(e);return(0,n.jsxs)("div",{className:"mt-2 flex flex-wrap gap-2 text-xs text-text-muted",children:[(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:["policy: ",r.enabled?"bật":"tắt"]}),(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:[r.requestsPerMinute||"∞"," req/ph\xfat"]}),(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:[r.promptCharsMax||"∞"," chars prompt"]}),s?(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:[r.maxOutputTokens||"∞"," output tokens"]}):null,t?(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:["thinking: ",r.forceThinkingOff?"force off":"client tự quyết"]}):null,r.allowedIpCidrs.length>0?(0,n.jsx)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:"IP locked"}):null]})}function j({label:e,value:t,onChange:s,hint:r}){return(0,n.jsxs)("label",{className:"block",children:[(0,n.jsx)("span",{className:"mb-1 block text-xs font-medium text-text-muted",children:e}),(0,n.jsx)("input",{type:"number",min:"0",value:t,onChange:e=>s(u(e.target.value,0)),className:"w-full rounded-xl border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary"}),r?(0,n.jsx)("span",{className:"mt-1 block text-xs text-text-muted",children:r}):null]})}function v({isOpen:e,keyName:t,policy:s,setPolicy:r,onClose:a,onSave:o,onClear:d,saving:c,clearLabel:x="X\xf3a policy / kh\xf4ng limit"}){let m=g(s,i),u=(e,t)=>r(s=>g({...s,[e]:t},i));return(0,n.jsx)(l.aF,{isOpen:e,onClose:a,title:`Policy API key: ${t||"API Key"}`,size:"xl",children:(0,n.jsxs)("div",{className:"space-y-4",children:[(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface/60 p-3 text-sm text-text-muted",children:["Key mới tự c\xf3 ",(0,n.jsx)("b",{children:"default policy"}),". Chỉ admin được sửa policy. Request/ph\xfat = 0 nghĩa l\xe0 kh\xf4ng giới hạn tần suất. Max output tokens = 0 nghĩa l\xe0 kh\xf4ng \xe9p giới hạn output."]}),(0,n.jsxs)("label",{className:"flex items-center justify-between gap-3 rounded-xl border border-border p-3 text-sm",children:[(0,n.jsxs)("span",{children:[(0,n.jsx)("b",{children:"Bật policy"}),(0,n.jsx)("br",{}),(0,n.jsx)("span",{className:"text-xs text-text-muted",children:"Tắt mục n\xe0y th\xec policy được lưu nhưng kh\xf4ng \xe1p limit."})]}),(0,n.jsx)("input",{type:"checkbox",checked:m.enabled,onChange:e=>u("enabled",e.target.checked)})]}),(0,n.jsxs)("div",{className:"grid gap-3 md:grid-cols-2",children:[(0,n.jsx)(j,{label:"Request / ph\xfat",value:m.requestsPerMinute,onChange:e=>u("requestsPerMinute",e),hint:"0 = kh\xf4ng giới hạn tần suất. Khuyến nghị user thường: 10–20 req/ph\xfat."}),(0,n.jsx)(j,{label:"Max output tokens",value:m.maxOutputTokens,onChange:e=>u("maxOutputTokens",e),hint:"0 = kh\xf4ng giới hạn. VS Code khuyến nghị 2048–3072; chat d\xe0i 4096–8192."})]}),(0,n.jsx)(j,{label:"Prompt chars tối đa",value:m.promptCharsMax,onChange:e=>u("promptCharsMax",e),hint:"0 = kh\xf4ng giới hạn input/prompt."}),(0,n.jsxs)("label",{className:"flex items-center justify-between gap-3 rounded-xl border border-border p-3 text-sm",children:[(0,n.jsxs)("span",{children:[(0,n.jsx)("b",{children:"Force Thinking Off"}),(0,n.jsx)("br",{}),(0,n.jsx)("span",{className:"text-xs text-text-muted",children:"Khi bật, gateway \xe9p request c\xf3 chat_template_kwargs.enable_thinking=false theo chuẩn llama.cpp."})]}),(0,n.jsx)("input",{type:"checkbox",checked:m.forceThinkingOff,onChange:e=>u("forceThinkingOff",e.target.checked)})]}),(0,n.jsxs)("label",{className:"block",children:[(0,n.jsx)("span",{className:"mb-1 block text-xs font-medium text-text-muted",children:"IP/CIDR được ph\xe9p"}),(0,n.jsx)("textarea",{value:p(m.allowedIpCidrs).join("\n"),onChange:e=>u("allowedIpCidrs",[...new Set(String(e.target.value||"").split(/[\n,]+/).map(e=>e.trim()).filter(Boolean))]),rows:3,className:"w-full rounded-xl border border-border bg-background px-3 py-2 font-mono text-sm text-text-main outline-none focus:border-primary",placeholder:"10.0.0.0/8\n192.168.0.0/16"}),(0,n.jsx)("span",{className:"mt-1 block text-xs text-text-muted",children:"Để trống = mọi IP. Hỗ trợ IPv4 exact hoặc CIDR."})]}),(0,n.jsxs)("label",{className:"block",children:[(0,n.jsx)("span",{className:"mb-1 block text-xs font-medium text-text-muted",children:"Hết hạn l\xfac"}),(0,n.jsx)("input",{value:m.expiresAt,onChange:e=>u("expiresAt",e.target.value),className:"w-full rounded-xl border border-border bg-background px-3 py-2 font-mono text-sm text-text-main outline-none focus:border-primary",placeholder:"2026-12-31T23:59:59+07:00 hoặc để trống"})]}),(0,n.jsxs)("div",{className:"flex flex-wrap justify-end gap-2",children:[(0,n.jsx)(l.$n,{variant:"ghost",onClick:a,children:"Hủy"}),d?(0,n.jsx)(l.$n,{variant:"outline",onClick:d,disabled:c,children:x}):null,(0,n.jsx)(l.$n,{onClick:()=>o(m),disabled:c,children:c?"Đang lưu...":"Lưu policy"})]})]})})}function N({open:e,keyName:t,models:s,setModels:a,activeProviders:o,modelAliases:i,onClose:d,onSave:x,saving:m,personalOnly:u,extraModels:h}){let[p,b]=(0,r.useState)(!1),g=c(s),f=e=>{let t=e?.value||e?.name||e;a(e=>c(e).filter(e=>e!==t))};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(l.aF,{isOpen:e,onClose:d,title:`Model access: ${t||"API Key"}`,size:"xl",children:(0,n.jsxs)("div",{className:"space-y-4",children:[(0,n.jsx)("p",{className:"text-sm text-text-muted",children:"Chọn một hoặc nhiều model m\xe0 API key n\xe0y được ph\xe9p sử dụng. Trang n\xe0y kh\xf4ng cho lưu danh s\xe1ch model rỗng."}),(0,n.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,n.jsx)("span",{className:"text-sm font-medium",children:"Model được ph\xe9p d\xf9ng"}),(0,n.jsx)(l.$n,{size:"sm",variant:"outline",onClick:()=>b(!0),children:"Th\xeam model"})]}),0===g.length?(0,n.jsx)("div",{className:"rounded-xl border border-dashed border-border p-4 text-sm text-text-muted",children:"Chưa chọn model n\xe0o. H\xe3y th\xeam \xedt nhất một model trước khi lưu."}):(0,n.jsx)("div",{className:"flex flex-wrap gap-2",children:g.map(e=>(0,n.jsxs)("button",{type:"button",onClick:()=>f(e),className:"rounded-full border border-primary/30 bg-primary/10 px-2 py-1 font-mono text-xs text-primary transition hover:bg-red-500/10 hover:text-red-600",title:"Bấm để gỡ model n\xe0y",children:[e," \xd7"]},e))}),(0,n.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,n.jsx)(l.$n,{variant:"ghost",onClick:d,children:"Hủy"}),(0,n.jsx)(l.$n,{onClick:x,disabled:m||0===g.length,children:m?"Đang lưu...":"Lưu danh s\xe1ch model"})]})]})}),(0,n.jsx)(l.rq,{isOpen:p,onClose:()=>b(!1),onSelect:e=>{let t=e?.value||e?.name||e;t&&a(e=>c([...e,t]))},onDeselect:f,activeProviders:o,modelAliases:i,title:"Chọn model được ph\xe9p d\xf9ng",addedModelValues:g,closeOnSelect:!1,personalOnly:u,extraModels:h})]})}function k({label:e,value:t,hint:s}){return(0,n.jsxs)("div",{className:"rounded-2xl border border-border bg-surface/70 p-4",children:[(0,n.jsx)("div",{className:"text-xs font-medium uppercase tracking-wide text-text-muted",children:e}),(0,n.jsx)("div",{className:"mt-2 text-2xl font-semibold text-text-main",children:t}),s?(0,n.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:s}):null]})}function w({pagination:e,pageSize:t,onPageChange:s,onPageSizeChange:r,loading:a}){let o=Number(e?.page||1),i=Number(e?.totalPages||1),d=Number(e?.total||0),c=0===d?0:(o-1)*t+1,x=Math.min(d,o*t);return(0,n.jsxs)("div",{className:"flex flex-col gap-3 border-t border-border px-4 py-3 md:flex-row md:items-center md:justify-between",children:[(0,n.jsxs)("div",{className:"text-sm text-text-muted",children:["Hiển thị ",(0,n.jsx)("b",{children:c}),"–",(0,n.jsx)("b",{children:x})," / ",(0,n.jsx)("b",{children:d})," API keys"]}),(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,n.jsxs)("select",{value:t,onChange:e=>r(Number(e.target.value)),className:"rounded-xl border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary",disabled:a,children:[(0,n.jsx)("option",{value:25,children:"25 / trang"}),(0,n.jsx)("option",{value:50,children:"50 / trang"}),(0,n.jsx)("option",{value:100,children:"100 / trang"})]}),(0,n.jsx)(l.$n,{variant:"outline",size:"sm",onClick:()=>s(1),disabled:a||o<=1,children:"Đầu"}),(0,n.jsx)(l.$n,{variant:"outline",size:"sm",onClick:()=>s(Math.max(1,o-1)),disabled:a||o<=1,children:"Trước"}),(0,n.jsxs)("span",{className:"rounded-xl border border-border bg-surface px-3 py-2 text-sm",children:["Trang ",o,"/",i]}),(0,n.jsx)(l.$n,{variant:"outline",size:"sm",onClick:()=>s(Math.min(i,o+1)),disabled:a||o>=i,children:"Sau"}),(0,n.jsx)(l.$n,{variant:"outline",size:"sm",onClick:()=>s(i),disabled:a||o>=i,children:"Cuối"})]})]})}function C({image:e,label:t,onClick:s}){return(0,n.jsx)("button",{type:"button",onClick:s,title:t,"aria-label":t,className:"flex h-9 w-9 items-center justify-center rounded-xl border border-border bg-background transition hover:border-primary/50 hover:bg-surface focus:outline-none focus:ring-2 focus:ring-primary/20",children:(0,n.jsx)("img",{src:e,alt:"","aria-hidden":"true",className:"size-5 rounded-sm object-contain"})})}function P({apiKey:e,onClaudeSettings:t,onOpenCodeSettings:s,onCodexSettings:r,onQwenSettings:l}){return(0,n.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,n.jsx)(C,{image:"/providers/claude.png",label:"Claude Code Settings",onClick:()=>t(e)}),(0,n.jsx)(C,{image:"/providers/opencode.png",label:"OpenCode Settings",onClick:()=>s(e)}),(0,n.jsx)(C,{image:"/providers/codex.png",label:"Codex Settings",onClick:()=>r(e)}),(0,n.jsx)(C,{image:"/providers/qwen.png",label:"Qwen Code Settings",onClick:()=>l(e)})]})}function A({apiKey:e,owner:t,isAdmin:s,onRename:l,onRotate:a,onEditModels:o,onEditPolicy:i,onAssignOwner:d,onDelete:c}){let[x,u]=(0,r.useState)(!1),h=(0,r.useRef)(null);(0,r.useEffect)(()=>{if(!x)return;let e=e=>{!h.current||h.current.contains(e.target)||u(!1)},t=e=>{"Escape"===e.key&&u(!1)};return document.addEventListener("pointerdown",e,!0),document.addEventListener("keydown",t),()=>{document.removeEventListener("pointerdown",e,!0),document.removeEventListener("keydown",t)}},[h,x,u]);let p=e=>{u(!1),e()};return(0,n.jsxs)("details",{ref:h,className:"group",open:x,onToggle:e=>u(e.currentTarget.open),children:[(0,n.jsx)("summary",{title:"Thao t\xe1c kh\xe1c",className:"flex h-9 cursor-pointer list-none items-center rounded-xl border border-border bg-background px-3 text-sm font-medium text-text-main transition hover:border-primary/50 hover:bg-surface focus:outline-none focus:ring-2 focus:ring-primary/20 [&::-webkit-details-marker]:hidden",children:(0,n.jsx)("span",{"aria-hidden":"true",className:"text-lg leading-none",children:"⋯"})}),(0,n.jsxs)("div",{className:"ml-auto mt-2 w-48 overflow-hidden rounded-xl border border-border bg-background py-1 text-left shadow-xl shadow-black/10",children:[(0,n.jsx)("button",{type:"button",className:"block w-full px-3 py-2 text-left text-sm text-text-main transition hover:bg-surface",onClick:()=>p(()=>l(e.id,e.name)),children:(0,n.jsx)(m,{icon:"✏️",children:"Đổi t\xean"})}),(0,n.jsx)("button",{type:"button",className:"block w-full px-3 py-2 text-left text-sm text-text-main transition hover:bg-surface",onClick:()=>p(()=>a(e)),children:(0,n.jsx)(m,{materialIcon:"key",children:"Đổi key"})}),(0,n.jsx)("div",{className:"my-1 border-t border-border"}),(0,n.jsx)("button",{type:"button",className:"block w-full px-3 py-2 text-left text-sm text-text-main transition hover:bg-surface",onClick:()=>p(()=>o(e)),children:(0,n.jsx)(m,{icon:"\uD83D\uDCE6",children:"Models"})}),s?(0,n.jsx)("button",{type:"button",className:"block w-full px-3 py-2 text-left text-sm text-text-main transition hover:bg-surface",onClick:()=>p(()=>i(e)),children:(0,n.jsx)(m,{icon:"\uD83D\uDEE1️",children:"Policy"})}):null,s?(0,n.jsx)("button",{type:"button",className:"block w-full px-3 py-2 text-left text-sm text-text-main transition hover:bg-surface",onClick:()=>p(()=>d(e.id,t)),children:(0,n.jsx)(m,{icon:"\uD83D\uDC64",children:"Owner"})}):null,(0,n.jsx)("div",{className:"my-1 border-t border-border"}),(0,n.jsx)("button",{type:"button",className:"block w-full px-3 py-2 text-left text-sm font-medium text-red-600 transition hover:bg-red-500/10",onClick:()=>p(()=>c(e.id)),children:(0,n.jsx)(m,{icon:"\uD83D\uDDD1️",children:"X\xf3a"})})]})]})}function S({keys:e,visibleKeys:t,copied:s,copy:r,isAdmin:a,onToggleVisible:o,onToggleActive:i,onApiTest:d,onClaudeSettings:x,onOpenCodeSettings:m,onCodexSettings:u,onQwenSettings:h,onRename:p,onRotate:f,onEditModels:y,onEditPolicy:j,onAssignOwner:v,onDelete:N}){return(0,n.jsx)("div",{className:"overflow-hidden rounded-2xl border border-border",children:(0,n.jsx)("div",{className:"overflow-x-auto",children:(0,n.jsxs)("table",{className:"min-w-full divide-y divide-border text-sm",children:[(0,n.jsx)("thead",{className:"bg-surface/80 text-left text-xs uppercase tracking-wide text-text-muted",children:(0,n.jsxs)("tr",{children:[(0,n.jsx)("th",{className:"whitespace-nowrap px-4 py-3 font-medium",children:"T\xean / Key"}),(0,n.jsx)("th",{className:"whitespace-nowrap px-4 py-3 font-medium",children:"Trạng th\xe1i"}),(0,n.jsx)("th",{className:"whitespace-nowrap px-4 py-3 font-medium",children:"Owner"}),(0,n.jsx)("th",{className:"whitespace-nowrap px-4 py-3 font-medium",children:"Model"}),(0,n.jsx)("th",{className:"whitespace-nowrap px-4 py-3 font-medium",children:"Policy"}),(0,n.jsx)("th",{className:"whitespace-nowrap px-4 py-3 font-medium",children:"Ng\xe0y tạo"}),(0,n.jsx)("th",{className:"whitespace-nowrap px-4 py-3 text-right font-medium",children:"Thao t\xe1c"})]})}),(0,n.jsx)("tbody",{className:"divide-y divide-border bg-background",children:e.map(e=>{var k;let w=t.has(e.id),C=e.ownerUser||e.createdByUser||"chưa g\xe1n",S=c(e.allowedModels),O=b(e.limits),I=g(e.limits||{});return(0,n.jsxs)("tr",{className:"align-top transition hover:bg-surface/50",children:[(0,n.jsxs)("td",{className:"min-w-[280px] px-4 py-4",children:[(0,n.jsx)("div",{className:"font-medium text-text-main",children:e.name||"API Key"}),(0,n.jsxs)("div",{className:"group/key mt-2 flex max-w-[380px] items-center gap-2 rounded-xl border border-border bg-surface px-3 py-2 font-mono text-xs text-text-main",children:[(0,n.jsx)("span",{className:"min-w-0 flex-1 truncate",children:w?e.key:(k=e.key)?k.length>12?`${k.slice(0,8)}...${k.slice(-4)}`:k:""}),(0,n.jsx)("button",{type:"button",title:w?"Ẩn key":"Hiện key","aria-label":w?"Ẩn key":"Hiện key",className:"shrink-0 rounded p-0.5 text-text-muted transition hover:bg-sidebar hover:text-primary",onClick:()=>o(e.id),children:(0,n.jsx)("span",{className:"material-symbols-outlined text-sm",children:w?"visibility_off":"visibility"})}),(0,n.jsxs)("div",{className:"relative shrink-0 group/btn",children:[(0,n.jsx)("button",{type:"button",onClick:()=>r(e.key,e.id),className:"rounded p-0.5 text-text-muted transition hover:bg-sidebar hover:text-primary","aria-label":s===e.id?"Đ\xe3 copy":"Copy API key",children:(0,n.jsx)("span",{className:"material-symbols-outlined text-sm",children:s===e.id?"check":"content_copy"})}),(0,n.jsx)("span",{className:"pointer-events-none absolute left-1/2 top-5 mt-1 -translate-x-1/2 whitespace-nowrap text-[10px] text-text-muted opacity-0 transition-opacity group-hover/btn:opacity-100",children:s===e.id?"Copied!":"Copy"})]}),(0,n.jsxs)("div",{className:"relative shrink-0 group/btn",children:[(0,n.jsx)("button",{type:"button",onClick:()=>d(e),className:"rounded p-0.5 text-text-muted transition hover:bg-sidebar hover:text-primary","aria-label":"Test API key bằng curl",children:(0,n.jsx)("span",{className:"material-symbols-outlined text-sm",children:"science"})}),(0,n.jsx)("span",{className:"pointer-events-none absolute left-1/2 top-5 mt-1 -translate-x-1/2 whitespace-nowrap text-[10px] text-text-muted opacity-0 transition-opacity group-hover/btn:opacity-100",children:"Test"})]})]}),e.createdByUser?(0,n.jsxs)("div",{className:"mt-2 text-xs text-text-muted",children:["Tạo bởi: ",e.createdByUser]}):null]}),(0,n.jsx)("td",{className:"whitespace-nowrap px-4 py-4",children:(0,n.jsx)(l.lM,{checked:!!e.isActive,onChange:t=>i(e.id,t)})}),(0,n.jsx)("td",{className:"min-w-[160px] px-4 py-4",children:(0,n.jsx)("div",{className:"break-all text-sm text-text-main",children:C})}),(0,n.jsx)("td",{className:"px-4 py-4 align-top",children:S.length>0?(0,n.jsxs)("div",{className:"flex flex-col items-start gap-1",children:[S.slice(0,3).map(e=>(0,n.jsx)("span",{className:"max-w-full truncate rounded-full border border-border bg-surface px-2 py-1 font-mono text-xs",children:e},e)),S.length>3?(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-1 text-xs",children:["+",S.length-3]}):null]}):(0,n.jsx)("span",{className:"inline-block rounded-full border border-amber-500/30 bg-amber-500/10 px-2 py-1 text-xs text-amber-700 dark:text-amber-300",children:"Legacy full access"})}),(0,n.jsx)("td",{className:"px-4 py-4 align-top",children:O?(0,n.jsxs)("div",{className:"flex flex-col items-start gap-1 text-xs",children:[(0,n.jsx)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:I.enabled?"bật":"tắt"}),(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:[I.requestsPerMinute||"∞","/ph\xfat"]}),(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:[I.promptCharsMax||"∞"," chars"]}),a&&I.maxOutputTokens>0?(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:[I.maxOutputTokens," out"]}):null,a&&I.forceThinkingOff?(0,n.jsx)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:"thinking off"}):null,I.allowedIpCidrs.length>0?(0,n.jsx)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:"IP locked"}):null]}):(0,n.jsx)("span",{className:"inline-block rounded-full border border-border bg-surface px-2 py-1 text-xs text-text-muted",children:"chưa set"})}),(0,n.jsx)("td",{className:"min-w-[150px] px-4 py-4 text-xs text-text-muted",children:function(e){if(!e)return"kh\xf4ng r\xf5";try{return new Date(e).toLocaleString()}catch{return String(e)}}(e.createdAt)}),(0,n.jsx)("td",{className:"min-w-[200px] px-4 py-4",children:(0,n.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[(0,n.jsx)(A,{apiKey:e,owner:C,isAdmin:a,onRename:p,onRotate:f,onEditModels:y,onEditPolicy:j,onAssignOwner:v,onDelete:N}),(0,n.jsx)(P,{apiKey:e,onClaudeSettings:x,onOpenCodeSettings:m,onCodexSettings:u,onQwenSettings:h})]})})]},e.id)})})]})})})}function O(){let e,t,s,m,[h,p]=(0,r.useState)([]),[j,C]=(0,r.useState)(!0),[P,A]=(0,r.useState)(""),[O,I]=(0,r.useState)(!1),[M,$]=(0,r.useState)(""),[T,E]=(0,r.useState)(""),[K,_]=(0,r.useState)(""),[L,R]=(0,r.useState)(""),[D,U]=(0,r.useState)(new Set),[F,B]=(0,r.useState)(null),[q,z]=(0,r.useState)([]),[H,W]=(0,r.useState)(""),[Y,J]=(0,r.useState)(!1),[Q,V]=(0,r.useState)(!1),[X,Z]=(0,r.useState)([]),[G,ee]=(0,r.useState)([]),[et,es]=(0,r.useState)(!1),[en,er]=(0,r.useState)(i),[el,ea]=(0,r.useState)(i),[eo,ei]=(0,r.useState)(!1),[ed,ec]=(0,r.useState)(!1),[ex,em]=(0,r.useState)(!1),[eu,eh]=(0,r.useState)([]),[ep,eb]=(0,r.useState)({}),[eg,ef]=(0,r.useState)(!1),[ey,ej]=(0,r.useState)(!1),[ev,eN]=(0,r.useState)(null),[ek,ew]=(0,r.useState)([]),[eC,eP]=(0,r.useState)(!1),[eA,eS]=(0,r.useState)(null),[eO,eI]=(0,r.useState)(i),[eM,e$]=(0,r.useState)(!1),[eT,eE]=(0,r.useState)(2),[eK,e_]=(0,r.useState)(0),[eL,eR]=(0,r.useState)(0),[eD,eU]=(0,r.useState)(""),[eF,eB]=(0,r.useState)(null),[eq,ez]=(0,r.useState)(null),[eH,eW]=(0,r.useState)(null),[eY,eJ]=(0,r.useState)(null),[eQ,eV]=(0,r.useState)(null),[eX,eZ]=(0,r.useState)(""),[eG,e0]=(0,r.useState)(""),[e1,e3]=(0,r.useState)("all"),[e2,e4]=(0,r.useState)(1),[e5,e8]=(0,r.useState)(25),[e6,e7]=(0,r.useState)({page:1,pageSize:25,total:0,totalAll:0,totalPages:1,status:"all",search:""}),{copied:e9,copy:te}=(0,o.C)(),{isAdmin:tt,isMonitorAdmin:ts,canManageApiKeys:tn,userId:tr}=(0,a.s)(),tl=tt||ts||tn,ta=Number.isFinite(Number(eT))?Number(eT):2,to=Number.isFinite(Number(eK))?Number(eK):h.length,ti=Number.isFinite(Number(eL))?Number(eL):Number(e6.totalAll||e6.total||0),td=Number(e6.total||0),tc=!tl&&to>=ta,tx=eD?`${eD}/v1`:"/v1",tm=eD?`${eD}/v1/chat/completions`:"/v1/chat/completions",tu=c(X)[0]||"",th=(e=c(eF?.allowedModels)[0],t=String(tu||"").trim(),e||t||"YOUR_MODEL"),tp=eF?g(eF.limits||{}):i,tb=tp.maxOutputTokens>0?tp.maxOutputTokens:0,tg=eF?function({endpoint:e,apiKey:t,model:s,maxOutputTokens:n=0}){let r=String(e||"/v1/chat/completions").replace(/"/g,""),l=String(t||"YOUR_API_KEY").replace(/"/g,""),a=u(n,0),o={model:String(s||"YOUR_MODEL"),messages:[{role:"user",content:"Say hi.\nReply in one short sentence."}],temperature:.2,stream:!1};a>0&&(o.max_tokens=a);let i=JSON.stringify(o).replace(/"/g,'\\"');return`curl.exe -X POST "${r}" ^
2
2
  -H "Authorization: Bearer ${l}" ^
3
3
  -H "Content-Type: application/json" ^
4
4
  -d "${i}"`}({endpoint:tm,apiKey:eF.key,model:th,maxOutputTokens:tb}):"",tf=eq?x(eq,tu):{codingModel:"programmer",fastModel:"programmer-fast"},ty=eq?function({baseUrl:e,apiKey:t,codingModel:s,fastModel:n}){return JSON.stringify({env:{ANTHROPIC_BASE_URL:e||"https://models-gateway.example.com/v1",ANTHROPIC_AUTH_TOKEN:t||"sk-xxxxx",ANTHROPIC_MODEL:s||"programmer",ANTHROPIC_SMALL_FAST_MODEL:n||s||"programmer-fast",ANTHROPIC_DEFAULT_OPUS_MODEL:s||"programmer",ANTHROPIC_DEFAULT_SONNET_MODEL:s||"programmer",ANTHROPIC_DEFAULT_HAIKU_MODEL:n||s||"programmer-fast"},theme:"dark",hasCompletedOnboarding:!0},null,2)}({baseUrl:tx,apiKey:eq.key,codingModel:tf.codingModel,fastModel:tf.fastModel}):"",tj=eq?['npm install -g @anthropic-ai/claude-code\nclaude --version\nmkdir $env:USERPROFILE\\.claude -Force\n$utf8NoBom = New-Object System.Text.UTF8Encoding $false\n[System.IO.File]::WriteAllText("$env:USERPROFILE\\.claude\\settings.json", @\'',ty,"'@, $utf8NoBom)\ncd D:\\path\\to\\your-project\nclaude"].join("\n"):"",tv=eH?x(eH,tu):{codingModel:"programmer",fastModel:"programmer-fast"},tN=eH?function({baseUrl:e,apiKey:t,codingModel:s,fastModel:n}){let r=s||"programmer",l=n||r||"programmer-fast";return JSON.stringify({$schema:"https://opencode.ai/config.json",provider:{bluerouter:{npm:"@ai-sdk/openai-compatible",name:"BlueRouter",options:{baseURL:e||"https://models-gateway.example.com/v1",apiKey:t||"sk-xxxxx"},models:{[r]:{name:r,modalities:{input:["text","image"],output:["text"]}},[l]:{name:l,modalities:{input:["text"],output:["text"]}}}}},model:r,small_model:l,agent:{explorer:{description:"Fast explorer subagent for codebase exploration",mode:"subagent",model:l}}},null,2)}({baseUrl:tx,apiKey:eH.key,codingModel:tv.codingModel,fastModel:tv.fastModel}):"",tk=eH?['npm install -g opencode-ai\nopencode --version\nmkdir $env:APPDATA\\opencode -Force\n$utf8NoBom = New-Object System.Text.UTF8Encoding $false\n[System.IO.File]::WriteAllText("$env:APPDATA\\opencode\\opencode.json", @\'',tN,"'@, $utf8NoBom)\ncd D:\\path\\to\\your-project\nopencode"].join("\n"):"",tw=eY?x(eY,tu):{codingModel:"programmer",fastModel:"programmer-fast"},tC=eY?function({baseUrl:e,codingModel:t,fastModel:s}){let n=t||"programmer";return`model = "${n}"
package/app/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bluerouter-app",
3
- "version": "5.0.31",
3
+ "version": "5.0.32",
4
4
  "description": "Router web dashboard",
5
5
  "private": false,
6
6
  "scripts": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jheavenknows/bluerouter",
3
- "version": "5.0.31",
3
+ "version": "5.0.32",
4
4
  "description": "Bluerouter CLI - Start and manage Bluerouter server",
5
5
  "bin": {
6
6
  "bluerouter": "./cli.js"