aigetwey 1.3.6 → 1.3.8

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 (153) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/dashboard/.next/BUILD_ID +1 -1
  3. package/dashboard/.next/build-manifest.json +3 -3
  4. package/dashboard/.next/diagnostics/route-bundle-stats.json +27 -27
  5. package/dashboard/.next/fallback-build-manifest.json +3 -3
  6. package/dashboard/.next/server/app/(console)/combos/page_client-reference-manifest.js +1 -1
  7. package/dashboard/.next/server/app/(console)/config/page_client-reference-manifest.js +1 -1
  8. package/dashboard/.next/server/app/(console)/console/page_client-reference-manifest.js +1 -1
  9. package/dashboard/.next/server/app/(console)/endpoint/page_client-reference-manifest.js +1 -1
  10. package/dashboard/.next/server/app/(console)/page_client-reference-manifest.js +1 -1
  11. package/dashboard/.next/server/app/(console)/providers/[id]/page_client-reference-manifest.js +1 -1
  12. package/dashboard/.next/server/app/(console)/providers/page_client-reference-manifest.js +1 -1
  13. package/dashboard/.next/server/app/(console)/quota/page_client-reference-manifest.js +1 -1
  14. package/dashboard/.next/server/app/(console)/tools/[id]/page_client-reference-manifest.js +1 -1
  15. package/dashboard/.next/server/app/(console)/tools/page_client-reference-manifest.js +1 -1
  16. package/dashboard/.next/server/app/(console)/usage/page_client-reference-manifest.js +1 -1
  17. package/dashboard/.next/server/app/_global-error.html +1 -1
  18. package/dashboard/.next/server/app/_global-error.rsc +1 -1
  19. package/dashboard/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  20. package/dashboard/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  21. package/dashboard/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  22. package/dashboard/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  23. package/dashboard/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  24. package/dashboard/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  25. package/dashboard/.next/server/app/_not-found.html +1 -1
  26. package/dashboard/.next/server/app/_not-found.rsc +2 -2
  27. package/dashboard/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  28. package/dashboard/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  29. package/dashboard/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  30. package/dashboard/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  31. package/dashboard/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  32. package/dashboard/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  33. package/dashboard/.next/server/app/combos.html +1 -1
  34. package/dashboard/.next/server/app/combos.rsc +5 -5
  35. package/dashboard/.next/server/app/combos.segments/!KGNvbnNvbGUp/combos/__PAGE__.segment.rsc +2 -2
  36. package/dashboard/.next/server/app/combos.segments/!KGNvbnNvbGUp/combos.segment.rsc +1 -1
  37. package/dashboard/.next/server/app/combos.segments/!KGNvbnNvbGUp.segment.rsc +3 -3
  38. package/dashboard/.next/server/app/combos.segments/_full.segment.rsc +5 -5
  39. package/dashboard/.next/server/app/combos.segments/_head.segment.rsc +1 -1
  40. package/dashboard/.next/server/app/combos.segments/_index.segment.rsc +2 -2
  41. package/dashboard/.next/server/app/combos.segments/_tree.segment.rsc +2 -2
  42. package/dashboard/.next/server/app/config.html +1 -1
  43. package/dashboard/.next/server/app/config.rsc +5 -5
  44. package/dashboard/.next/server/app/config.segments/!KGNvbnNvbGUp/config/__PAGE__.segment.rsc +2 -2
  45. package/dashboard/.next/server/app/config.segments/!KGNvbnNvbGUp/config.segment.rsc +1 -1
  46. package/dashboard/.next/server/app/config.segments/!KGNvbnNvbGUp.segment.rsc +3 -3
  47. package/dashboard/.next/server/app/config.segments/_full.segment.rsc +5 -5
  48. package/dashboard/.next/server/app/config.segments/_head.segment.rsc +1 -1
  49. package/dashboard/.next/server/app/config.segments/_index.segment.rsc +2 -2
  50. package/dashboard/.next/server/app/config.segments/_tree.segment.rsc +2 -2
  51. package/dashboard/.next/server/app/console.html +1 -1
  52. package/dashboard/.next/server/app/console.rsc +5 -5
  53. package/dashboard/.next/server/app/console.segments/!KGNvbnNvbGUp/console/__PAGE__.segment.rsc +2 -2
  54. package/dashboard/.next/server/app/console.segments/!KGNvbnNvbGUp/console.segment.rsc +1 -1
  55. package/dashboard/.next/server/app/console.segments/!KGNvbnNvbGUp.segment.rsc +3 -3
  56. package/dashboard/.next/server/app/console.segments/_full.segment.rsc +5 -5
  57. package/dashboard/.next/server/app/console.segments/_head.segment.rsc +1 -1
  58. package/dashboard/.next/server/app/console.segments/_index.segment.rsc +2 -2
  59. package/dashboard/.next/server/app/console.segments/_tree.segment.rsc +2 -2
  60. package/dashboard/.next/server/app/endpoint.html +1 -1
  61. package/dashboard/.next/server/app/endpoint.rsc +5 -5
  62. package/dashboard/.next/server/app/endpoint.segments/!KGNvbnNvbGUp/endpoint/__PAGE__.segment.rsc +2 -2
  63. package/dashboard/.next/server/app/endpoint.segments/!KGNvbnNvbGUp/endpoint.segment.rsc +1 -1
  64. package/dashboard/.next/server/app/endpoint.segments/!KGNvbnNvbGUp.segment.rsc +3 -3
  65. package/dashboard/.next/server/app/endpoint.segments/_full.segment.rsc +5 -5
  66. package/dashboard/.next/server/app/endpoint.segments/_head.segment.rsc +1 -1
  67. package/dashboard/.next/server/app/endpoint.segments/_index.segment.rsc +2 -2
  68. package/dashboard/.next/server/app/endpoint.segments/_tree.segment.rsc +2 -2
  69. package/dashboard/.next/server/app/index.html +1 -1
  70. package/dashboard/.next/server/app/index.rsc +5 -5
  71. package/dashboard/.next/server/app/index.segments/!KGNvbnNvbGUp/__PAGE__.segment.rsc +2 -2
  72. package/dashboard/.next/server/app/index.segments/!KGNvbnNvbGUp.segment.rsc +3 -3
  73. package/dashboard/.next/server/app/index.segments/_full.segment.rsc +5 -5
  74. package/dashboard/.next/server/app/index.segments/_head.segment.rsc +1 -1
  75. package/dashboard/.next/server/app/index.segments/_index.segment.rsc +2 -2
  76. package/dashboard/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  77. package/dashboard/.next/server/app/login/page_client-reference-manifest.js +1 -1
  78. package/dashboard/.next/server/app/login.html +1 -1
  79. package/dashboard/.next/server/app/login.rsc +2 -2
  80. package/dashboard/.next/server/app/login.segments/_full.segment.rsc +2 -2
  81. package/dashboard/.next/server/app/login.segments/_head.segment.rsc +1 -1
  82. package/dashboard/.next/server/app/login.segments/_index.segment.rsc +2 -2
  83. package/dashboard/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  84. package/dashboard/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
  85. package/dashboard/.next/server/app/login.segments/login.segment.rsc +1 -1
  86. package/dashboard/.next/server/app/providers.html +1 -1
  87. package/dashboard/.next/server/app/providers.rsc +5 -5
  88. package/dashboard/.next/server/app/providers.segments/!KGNvbnNvbGUp/providers/__PAGE__.segment.rsc +2 -2
  89. package/dashboard/.next/server/app/providers.segments/!KGNvbnNvbGUp/providers.segment.rsc +1 -1
  90. package/dashboard/.next/server/app/providers.segments/!KGNvbnNvbGUp.segment.rsc +3 -3
  91. package/dashboard/.next/server/app/providers.segments/_full.segment.rsc +5 -5
  92. package/dashboard/.next/server/app/providers.segments/_head.segment.rsc +1 -1
  93. package/dashboard/.next/server/app/providers.segments/_index.segment.rsc +2 -2
  94. package/dashboard/.next/server/app/providers.segments/_tree.segment.rsc +2 -2
  95. package/dashboard/.next/server/app/quota.html +1 -1
  96. package/dashboard/.next/server/app/quota.rsc +5 -5
  97. package/dashboard/.next/server/app/quota.segments/!KGNvbnNvbGUp/quota/__PAGE__.segment.rsc +2 -2
  98. package/dashboard/.next/server/app/quota.segments/!KGNvbnNvbGUp/quota.segment.rsc +1 -1
  99. package/dashboard/.next/server/app/quota.segments/!KGNvbnNvbGUp.segment.rsc +3 -3
  100. package/dashboard/.next/server/app/quota.segments/_full.segment.rsc +5 -5
  101. package/dashboard/.next/server/app/quota.segments/_head.segment.rsc +1 -1
  102. package/dashboard/.next/server/app/quota.segments/_index.segment.rsc +2 -2
  103. package/dashboard/.next/server/app/quota.segments/_tree.segment.rsc +2 -2
  104. package/dashboard/.next/server/app/tools.html +1 -1
  105. package/dashboard/.next/server/app/tools.rsc +5 -5
  106. package/dashboard/.next/server/app/tools.segments/!KGNvbnNvbGUp/tools/__PAGE__.segment.rsc +2 -2
  107. package/dashboard/.next/server/app/tools.segments/!KGNvbnNvbGUp/tools.segment.rsc +1 -1
  108. package/dashboard/.next/server/app/tools.segments/!KGNvbnNvbGUp.segment.rsc +3 -3
  109. package/dashboard/.next/server/app/tools.segments/_full.segment.rsc +5 -5
  110. package/dashboard/.next/server/app/tools.segments/_head.segment.rsc +1 -1
  111. package/dashboard/.next/server/app/tools.segments/_index.segment.rsc +2 -2
  112. package/dashboard/.next/server/app/tools.segments/_tree.segment.rsc +2 -2
  113. package/dashboard/.next/server/chunks/[root-of-the-server]__043un18._.js +1 -1
  114. package/dashboard/.next/server/chunks/[root-of-the-server]__043un18._.js.map +1 -1
  115. package/dashboard/.next/server/chunks/_0digmky._.js +1 -1
  116. package/dashboard/.next/server/chunks/_0digmky._.js.map +1 -1
  117. package/dashboard/.next/server/chunks/ssr/_1jt-_lv._.js +1 -1
  118. package/dashboard/.next/server/chunks/ssr/_1jt-_lv._.js.map +1 -1
  119. package/dashboard/.next/server/chunks/ssr/_1mumvwn._.js +1 -1
  120. package/dashboard/.next/server/chunks/ssr/_1mumvwn._.js.map +1 -1
  121. package/dashboard/.next/server/chunks/ssr/src_components_0nuo5yx._.js +1 -1
  122. package/dashboard/.next/server/chunks/ssr/src_components_0nuo5yx._.js.map +1 -1
  123. package/dashboard/.next/server/chunks/ssr/src_components_EndpointView_tsx_0awdzb5._.js +1 -1
  124. package/dashboard/.next/server/chunks/ssr/src_components_EndpointView_tsx_0awdzb5._.js.map +1 -1
  125. package/dashboard/.next/server/chunks/ssr/src_components_ProviderDetail_tsx_06sxu0r._.js +1 -1
  126. package/dashboard/.next/server/chunks/ssr/src_components_ProviderDetail_tsx_06sxu0r._.js.map +1 -1
  127. package/dashboard/.next/server/chunks/ssr/src_components_ToolDetail_tsx_0qperd-._.js +1 -1
  128. package/dashboard/.next/server/chunks/ssr/src_components_ToolDetail_tsx_0qperd-._.js.map +1 -1
  129. package/dashboard/.next/server/middleware-build-manifest.js +3 -3
  130. package/dashboard/.next/server/pages/404.html +1 -1
  131. package/dashboard/.next/server/pages/500.html +1 -1
  132. package/dashboard/.next/static/chunks/{0_fo_1xhw25rd.js → 063d_vdu_m-g_.js} +1 -1
  133. package/dashboard/.next/static/chunks/{3i6nr2y3h_7s2.js → 0tq5u12liycmg.js} +1 -1
  134. package/dashboard/.next/static/chunks/{17nxt0zmkvdgv.js → 13824732j7-dk.js} +1 -1
  135. package/dashboard/.next/static/chunks/{00415cmd3ji2s.js → 16vbdc0g5xea0.js} +1 -1
  136. package/dashboard/.next/static/chunks/{05i93ivai9obr.js → 3mhsmb2ks1vev.js} +1 -1
  137. package/dashboard/.next/static/chunks/452cgglyyo7hp.css +3 -0
  138. package/dashboard/.next/trace +1 -1
  139. package/dashboard/.next/trace-build +1 -1
  140. package/dashboard/src/components/EndpointView.tsx +13 -7
  141. package/dashboard/src/components/ProviderDetail.tsx +1 -1
  142. package/dashboard/src/components/ProviderManager.tsx +1 -1
  143. package/dashboard/src/components/ToolDetail.tsx +160 -20
  144. package/dashboard/src/components/TopBar.tsx +33 -15
  145. package/dashboard/src/lib/session.ts +6 -1
  146. package/dist/cli.js +1 -1
  147. package/dist/cli.js.map +1 -1
  148. package/package.json +1 -1
  149. package/src/cli.ts +1 -1
  150. package/dashboard/.next/static/chunks/2284qz1hy9776.css +0 -3
  151. /package/dashboard/.next/static/{kpgVHg6Rdnh2YUO8-xGjX → l0QkSM6jT0jiUc4m4dh6K}/_buildManifest.js +0 -0
  152. /package/dashboard/.next/static/{kpgVHg6Rdnh2YUO8-xGjX → l0QkSM6jT0jiUc4m4dh6K}/_clientMiddlewareManifest.js +0 -0
  153. /package/dashboard/.next/static/{kpgVHg6Rdnh2YUO8-xGjX → l0QkSM6jT0jiUc4m4dh6K}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[88644,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"InvariantError",{enumerable:!0,get:function(){return d}});class d extends Error{constructor(a,b){super(`Invariant: ${a.endsWith(".")?a:a+"."} This is a bug in Next.js.`,b),this.name="InvariantError"}}},39118,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={DEFAULT_SEGMENT_KEY:function(){return l},NOT_FOUND_SEGMENT_KEY:function(){return m},PAGE_SEGMENT_KEY:function(){return k},addSearchParamsIfPageSegment:function(){return i},computeSelectedLayoutSegment:function(){return j},getSegmentValue:function(){return f},getSelectedLayoutSegmentPath:function(){return function a(b,c,d=!0,e=[]){let g;if(d)g=b[1][c];else{let a=b[1];g=a.children??Object.values(a)[0]}if(!g)return e;let h=f(g[0]);return!h||h.startsWith(k)?e:(e.push(h),a(g,c,!1,e))}},isGroupSegment:function(){return g},isParallelRouteSegment:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});function f(a){return Array.isArray(a)?a[1]:a}function g(a){return"("===a[0]&&a.endsWith(")")}function h(a){return a.startsWith("@")&&"@children"!==a}function i(a,b){if(a.includes(k)){let a=JSON.stringify(b);return"{}"!==a?k+"?"+a:k}return a}function j(a,b){if(!a||0===a.length)return null;let c="children"===b?a[0]:a[a.length-1];return c===l?null:c}let k="__PAGE__",l="__DEFAULT__",m="/_not-found"},54427,(a,b,c)=>{"use strict";function d(){let a,b,c=new Promise((c,d)=>{a=c,b=d});return{resolve:a,reject:b,promise:c}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"createPromiseWithResolvers",{enumerable:!0,get:function(){return d}})},7078,a=>{"use strict";var b=a.i(87924);let c={primary:"bg-accent text-accent-ink shadow-warm hover:bg-accent-hover border border-transparent font-semibold",ghost:"bg-transparent text-text-muted border border-border hover:text-text hover:border-text-subtle",danger:"bg-transparent text-text-muted border border-border hover:text-danger hover:border-danger/50"};a.s(["Button",0,function({variant:a="primary",className:d,...e}){return(0,b.jsx)("button",{className:`inline-flex items-center justify-center gap-1.5 rounded-brand px-3.5 py-2 text-[13px] font-medium transition-colors duration-150 cursor-pointer disabled:opacity-45 disabled:cursor-not-allowed ${c[a]}${d?` ${d}`:""}`,...e})},"Field",0,function({label:a,hint:c,children:d}){return(0,b.jsxs)("label",{className:"flex flex-col gap-1.5",children:[(0,b.jsxs)("span",{className:"text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:[a,c&&(0,b.jsxs)("span",{className:"ml-1.5 lowercase tracking-normal text-text-subtle/70",children:["· ",c]})]}),d]})},"Input",0,function({className:a,...c}){return(0,b.jsx)("input",{className:`w-full rounded-brand border border-border bg-bg px-3 py-2 text-[13px] text-text placeholder:text-text-subtle focus:border-accent focus:outline-none transition-colors${a?` ${a}`:""}`,...c})},"Select",0,function({className:a,...c}){return(0,b.jsx)("select",{className:`w-full rounded-brand border border-border bg-bg px-3 py-2 text-[13px] text-text focus:border-accent focus:outline-none transition-colors${a?` ${a}`:""}`,...c})}])},56173,a=>{"use strict";async function b(a,b,c){let d;try{d=await fetch(`/api/gw${b}`,{method:a,headers:void 0!==c?{"content-type":"application/json"}:{},body:void 0!==c?JSON.stringify(c):void 0})}catch(a){return{ok:!1,status:0,data:null,error:a.message}}let e=await d.text(),f=null;try{f=e?JSON.parse(e):null}catch{f=null}if(!d.ok){let a=f?.error??`request failed (${d.status})`;return{ok:!1,status:d.status,data:f,error:a}}return{ok:!0,status:d.status,data:f}}async function c(a,b,c){let d;try{d=await fetch(b,{method:a,headers:void 0!==c?{"content-type":"application/json"}:{},body:void 0!==c?JSON.stringify(c):void 0})}catch(a){return{ok:!1,status:0,data:null,error:a.message}}let e=await d.text(),f=e?JSON.parse(e):null;if(!d.ok){let a=f?.error??`request failed (${d.status})`;return{ok:!1,status:d.status,data:f,error:a}}return{ok:!0,status:d.status,data:f}}a.s(["account",0,{changePassword:(a,b)=>c("POST","/api/password",{current:a,next:b})},"adminApi",0,{providers:()=>b("GET","/admin/providers"),budgets:()=>b("GET","/admin/budgets"),models:()=>b("GET","/admin/models"),keys:()=>b("GET","/admin/keys"),keysUsage:()=>b("GET","/admin/keys/usage"),setBudget:a=>b("PUT","/admin/budgets",a),clearBudget:a=>b("DELETE",`/admin/budgets/${encodeURIComponent(a)}`),addProvider:a=>b("POST","/admin/providers",a),editProvider:(a,c)=>b("PUT",`/admin/providers/${encodeURIComponent(a)}`,c),renameProvider:(a,c)=>b("PUT",`/admin/providers/${encodeURIComponent(a)}/rename`,{id:c}),removeProvider:a=>b("DELETE",`/admin/providers/${encodeURIComponent(a)}`),addKey:(a,c,d)=>b("POST",`/admin/providers/${encodeURIComponent(a)}/keys`,{key:c,name:d}),editKey:(a,c,d)=>b("PUT",`/admin/providers/${encodeURIComponent(a)}/keys/${c}`,d),removeKey:(a,c)=>b("DELETE",`/admin/providers/${encodeURIComponent(a)}/keys/${c}`),revealKey:(a,c)=>b("GET",`/admin/providers/${encodeURIComponent(a)}/keys/${c}/reveal`),addModel:(a,c,d)=>b("POST",`/admin/providers/${encodeURIComponent(a)}/models`,{model:c,...d}),addModels:(a,c)=>b("POST",`/admin/providers/${encodeURIComponent(a)}/models`,{models:c}),removeModel:(a,c)=>b("DELETE",`/admin/providers/${encodeURIComponent(a)}/models?model=${encodeURIComponent(c)}`),clearModels:a=>b("DELETE",`/admin/providers/${encodeURIComponent(a)}/models`),pricing:()=>b("GET","/admin/pricing"),setModelPrice:(a,c,d)=>b("PUT",`/admin/providers/${encodeURIComponent(a)}/models/price`,{model:c,...d}),testProvider:a=>b("POST",`/admin/providers/${encodeURIComponent(a)}/test`),testKey:(a,c)=>b("POST",`/admin/providers/${encodeURIComponent(a)}/keys/${c}/test`),testModel:(a,c)=>b("POST",`/admin/providers/${encodeURIComponent(a)}/models/test?model=${encodeURIComponent(c)}`),validateProvider:a=>b("POST","/admin/providers/validate",a),discoverModels:a=>b("POST",`/admin/providers/${encodeURIComponent(a)}/connect`),reorderKey:(a,c,d)=>b("PUT",`/admin/providers/${encodeURIComponent(a)}/keys/reorder`,{from:c,to:d}),toggleKey:(a,c,d)=>b("PUT",`/admin/providers/${encodeURIComponent(a)}/keys/${c}/toggle`,{enabled:d}),setProviderStrategy:(a,c,d)=>b("PUT",`/admin/providers/${encodeURIComponent(a)}/strategy`,{strategy:c,sticky:d}),setProviderDisabled:(a,c)=>b("PUT",`/admin/providers/${encodeURIComponent(a)}/disabled`,{disabled:c}),setRoute:(a,c)=>b("PUT",`/admin/routes/${encodeURIComponent(a)}`,c),removeRoute:a=>b("DELETE",`/admin/routes/${encodeURIComponent(a)}`),endpoint:()=>b("GET","/admin/endpoint"),setRtk:a=>b("PUT","/admin/endpoint/rtk",{enabled:a}),setCaveman:a=>b("PUT","/admin/endpoint/caveman",{level:a}),setPonytail:a=>b("PUT","/admin/endpoint/ponytail",{level:a}),addServerKey:(a,c)=>b("POST","/admin/endpoint/keys",{key:a,name:c}),editServerKey:(a,c)=>b("PUT",`/admin/endpoint/keys/${a}`,{name:c}),setServerKeyScope:(a,c)=>b("PUT",`/admin/endpoint/keys/${a}/scope`,c),removeServerKey:a=>b("DELETE",`/admin/endpoint/keys/${a}`),revealServerKey:a=>b("GET",`/admin/endpoint/keys/${a}/reveal`),setHeadroom:a=>b("PUT","/admin/endpoint/headroom",a),headroomStatus:()=>b("GET","/admin/headroom/status"),headroomStart:()=>b("POST","/admin/headroom/start"),headroomStop:()=>b("POST","/admin/headroom/stop"),putConfig:a=>b("PUT","/admin/config",{text:a}),version:()=>b("GET","/admin/version"),shutdown:()=>b("POST","/admin/shutdown")},"cliConfig",0,{status:a=>c("GET",`/api/cli-detect/${encodeURIComponent(a)}`),apply:(a,b)=>c("POST",`/api/cli-detect/${encodeURIComponent(a)}`,b),reset:a=>c("DELETE",`/api/cli-detect/${encodeURIComponent(a)}`)}])},73858,a=>{"use strict";var b=a.i(87924),c=a.i(7078),d=a.i(93026);a.s(["ConfirmModal",0,function({title:a,message:e,confirmLabel:f="Delete",onConfirm:g,onCancel:h,busy:i}){return(0,b.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 p-6",onClick:h,children:(0,b.jsxs)("div",{className:"w-full max-w-sm rounded-brand-lg border border-border bg-surface p-5 shadow-elevated",onClick:a=>a.stopPropagation(),children:[(0,b.jsxs)("div",{className:"mb-2 flex items-center gap-2",children:[(0,b.jsx)("span",{className:"flex h-7 w-7 items-center justify-center rounded-full bg-danger/10 text-danger",children:(0,b.jsx)(d.Icon,{name:"warning",size:16})}),(0,b.jsx)("h2",{className:"text-[15px] font-semibold text-text",children:a})]}),(0,b.jsx)("p",{className:"mb-4 text-[12.5px] text-text-muted",children:e}),(0,b.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,b.jsx)(c.Button,{variant:"ghost",onClick:h,children:"Cancel"}),(0,b.jsx)(c.Button,{variant:"danger",disabled:i,onClick:g,children:f})]})]})})}])},68862,a=>{"use strict";var b=a.i(87924),c=a.i(38246),d=a.i(50944),e=a.i(93026);let f=[{href:"/",label:"Endpoint & Key",icon:"api"},{href:"/providers",label:"Providers",icon:"dns"},{href:"/combos",label:"Combos",icon:"layers"},{href:"/usage",label:"Usage",icon:"bar_chart"},{href:"/quota",label:"Budgets",icon:"data_usage"},{href:"/tools",label:"CLI Tools",icon:"terminal"}],g=[{href:"/console",label:"Server Console",icon:"terminal"},{href:"/config",label:"Settings",icon:"settings"}];a.s(["Rail",0,function(){let a=(0,d.usePathname)(),h=(0,d.useRouter)();async function i(){await fetch("/api/logout",{method:"POST"}),h.replace("/login"),h.refresh()}let j=d=>{let f,g="/"===(f=d.href)?"/"===a||a.startsWith("/endpoint"):a===f||a.startsWith(`${f}/`);return(0,b.jsx)(c.default,{href:d.href,"data-label":d.label,className:`rail-icon${g?" rail-icon-active":""}`,"aria-label":d.label,children:(0,b.jsx)(e.Icon,{name:d.icon,size:20,fill:g})},d.href)};return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(c.default,{href:"/",className:"rail-brand","aria-label":"aigetwey",children:(0,b.jsxs)("svg",{viewBox:"0 0 512 512",width:"26",height:"26","aria-hidden":!0,children:[(0,b.jsx)("text",{x:"120",y:"338",fontFamily:"ui-sans-serif, Arial, sans-serif",fontSize:"260",fontWeight:"800",textAnchor:"middle",fill:"#14140f",children:"a"}),(0,b.jsxs)("g",{fill:"none",stroke:"#14140f",strokeWidth:"34",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,b.jsx)("polyline",{points:"276,182 352,256 276,330"}),(0,b.jsx)("polyline",{points:"346,182 422,256 346,330"})]})]})}),(0,b.jsxs)("nav",{className:"flex flex-col items-center gap-3",children:[f.map(j),(0,b.jsx)("div",{className:"rail-divider"}),g.map(j)]}),(0,b.jsx)("button",{onClick:i,"data-label":"Disconnect",className:"rail-icon","aria-label":"Disconnect",children:(0,b.jsx)(e.Icon,{name:"logout",size:19})})]})}])},8255,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(50944),e=a.i(93026),f=a.i(1221),g=a.i(73858),h=a.i(56173);let i={"":"Endpoint & Key",endpoint:"Endpoint & Key",providers:"Providers",combos:"Combos",usage:"Usage",quota:"Budgets",tools:"CLI Tools",console:"Server Console",config:"Settings"};a.s(["TopBar",0,function(){let a=(0,d.usePathname)(),{theme:j,toggle:k}=(0,f.useTheme)(),l="/"===a?"":a.split("/")[1]??"",m=i[l]??l,[n,o]=(0,c.useState)(null),[p,q]=(0,c.useState)(!1),[r,s]=(0,c.useState)(!1),[t,u]=(0,c.useState)(!1);async function v(){u(!0),await h.adminApi.shutdown(),s(!0),q(!1),u(!1)}return(0,c.useEffect)(()=>{h.adminApi.version().then(a=>{a.ok&&a.data&&o(a.data)})},[]),(0,b.jsxs)("header",{className:"console-topbar",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 text-[13px]",children:[(0,b.jsx)("span",{className:"text-text-subtle",children:"aigetwey"}),(0,b.jsx)("span",{className:"text-text-subtle",children:"/"}),(0,b.jsx)("span",{className:"font-medium text-text",children:m})]}),(0,b.jsxs)("div",{className:"ml-auto flex items-center gap-2.5",children:[n&&(0,b.jsxs)("span",{className:"flex items-center gap-1 text-[11px] text-text-subtle",title:n.updateAvailable?`Update available: v${n.latest}`:"You're on the latest version",children:["v",n.current,n.updateAvailable&&(0,b.jsxs)("span",{className:"flex items-center gap-1 rounded-full bg-warning/12 px-1.5 py-0.5 text-warning",children:[(0,b.jsx)(e.Icon,{name:"arrow_upward",size:11}),"v",n.latest]})]}),(0,b.jsx)("button",{onClick:k,className:"flex h-8 w-8 items-center justify-center rounded-full text-text-subtle transition-colors hover:text-text","aria-label":"Toggle theme",title:"dark"===j?"Switch to light mode":"Switch to dark mode",children:(0,b.jsx)(e.Icon,{name:"dark"===j?"light_mode":"dark_mode",size:18})}),(0,b.jsx)("button",{onClick:()=>q(!0),className:"flex h-8 w-8 items-center justify-center rounded-full text-text-subtle transition-colors hover:text-danger","aria-label":"Shut down gateway",title:"Shut down the gateway",children:(0,b.jsx)(e.Icon,{name:"power_settings_new",size:18})}),(0,b.jsxs)("div",{className:"flex items-center gap-2 rounded-full border border-border bg-surface py-1 pl-1 pr-3",children:[(0,b.jsx)("span",{className:"flex h-6 w-6 items-center justify-center rounded-full bg-accent text-[11px] font-bold text-accent-ink",children:"A"}),(0,b.jsx)("span",{className:"text-[12px] text-text-muted",children:"admin"})]})]}),p&&(0,b.jsx)(g.ConfirmModal,{title:"Shut down gateway?",message:"The gateway process will stop and all requests will fail until you restart it (run.sh). The dashboard stays up but can't reach the gateway.",confirmLabel:"Shut down",busy:t,onConfirm:v,onCancel:()=>q(!1)}),r&&(0,b.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/70 p-6",children:(0,b.jsxs)("div",{className:"w-full max-w-sm rounded-brand-lg border border-border bg-surface p-5 text-center shadow-elevated",children:[(0,b.jsx)("span",{className:"mx-auto mb-2 flex h-9 w-9 items-center justify-center rounded-full bg-danger/10 text-danger",children:(0,b.jsx)(e.Icon,{name:"power_settings_new",size:20})}),(0,b.jsx)("h2",{className:"text-[15px] font-semibold text-text",children:"Gateway stopped"}),(0,b.jsxs)("p",{className:"mt-1 text-[12.5px] text-text-muted",children:["Restart it with ",(0,b.jsx)("code",{className:"rounded bg-surface-2 px-1",children:"run.sh"}),", then reload this page."]})]})})]})}])}];
1
+ module.exports=[88644,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"InvariantError",{enumerable:!0,get:function(){return d}});class d extends Error{constructor(a,b){super(`Invariant: ${a.endsWith(".")?a:a+"."} This is a bug in Next.js.`,b),this.name="InvariantError"}}},39118,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={DEFAULT_SEGMENT_KEY:function(){return l},NOT_FOUND_SEGMENT_KEY:function(){return m},PAGE_SEGMENT_KEY:function(){return k},addSearchParamsIfPageSegment:function(){return i},computeSelectedLayoutSegment:function(){return j},getSegmentValue:function(){return f},getSelectedLayoutSegmentPath:function(){return function a(b,c,d=!0,e=[]){let g;if(d)g=b[1][c];else{let a=b[1];g=a.children??Object.values(a)[0]}if(!g)return e;let h=f(g[0]);return!h||h.startsWith(k)?e:(e.push(h),a(g,c,!1,e))}},isGroupSegment:function(){return g},isParallelRouteSegment:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});function f(a){return Array.isArray(a)?a[1]:a}function g(a){return"("===a[0]&&a.endsWith(")")}function h(a){return a.startsWith("@")&&"@children"!==a}function i(a,b){if(a.includes(k)){let a=JSON.stringify(b);return"{}"!==a?k+"?"+a:k}return a}function j(a,b){if(!a||0===a.length)return null;let c="children"===b?a[0]:a[a.length-1];return c===l?null:c}let k="__PAGE__",l="__DEFAULT__",m="/_not-found"},54427,(a,b,c)=>{"use strict";function d(){let a,b,c=new Promise((c,d)=>{a=c,b=d});return{resolve:a,reject:b,promise:c}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"createPromiseWithResolvers",{enumerable:!0,get:function(){return d}})},7078,a=>{"use strict";var b=a.i(87924);let c={primary:"bg-accent text-accent-ink shadow-warm hover:bg-accent-hover border border-transparent font-semibold",ghost:"bg-transparent text-text-muted border border-border hover:text-text hover:border-text-subtle",danger:"bg-transparent text-text-muted border border-border hover:text-danger hover:border-danger/50"};a.s(["Button",0,function({variant:a="primary",className:d,...e}){return(0,b.jsx)("button",{className:`inline-flex items-center justify-center gap-1.5 rounded-brand px-3.5 py-2 text-[13px] font-medium transition-colors duration-150 cursor-pointer disabled:opacity-45 disabled:cursor-not-allowed ${c[a]}${d?` ${d}`:""}`,...e})},"Field",0,function({label:a,hint:c,children:d}){return(0,b.jsxs)("label",{className:"flex flex-col gap-1.5",children:[(0,b.jsxs)("span",{className:"text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:[a,c&&(0,b.jsxs)("span",{className:"ml-1.5 lowercase tracking-normal text-text-subtle/70",children:["· ",c]})]}),d]})},"Input",0,function({className:a,...c}){return(0,b.jsx)("input",{className:`w-full rounded-brand border border-border bg-bg px-3 py-2 text-[13px] text-text placeholder:text-text-subtle focus:border-accent focus:outline-none transition-colors${a?` ${a}`:""}`,...c})},"Select",0,function({className:a,...c}){return(0,b.jsx)("select",{className:`w-full rounded-brand border border-border bg-bg px-3 py-2 text-[13px] text-text focus:border-accent focus:outline-none transition-colors${a?` ${a}`:""}`,...c})}])},56173,a=>{"use strict";async function b(a,b,c){let d;try{d=await fetch(`/api/gw${b}`,{method:a,headers:void 0!==c?{"content-type":"application/json"}:{},body:void 0!==c?JSON.stringify(c):void 0})}catch(a){return{ok:!1,status:0,data:null,error:a.message}}let e=await d.text(),f=null;try{f=e?JSON.parse(e):null}catch{f=null}if(!d.ok){let a=f?.error??`request failed (${d.status})`;return{ok:!1,status:d.status,data:f,error:a}}return{ok:!0,status:d.status,data:f}}async function c(a,b,c){let d;try{d=await fetch(b,{method:a,headers:void 0!==c?{"content-type":"application/json"}:{},body:void 0!==c?JSON.stringify(c):void 0})}catch(a){return{ok:!1,status:0,data:null,error:a.message}}let e=await d.text(),f=e?JSON.parse(e):null;if(!d.ok){let a=f?.error??`request failed (${d.status})`;return{ok:!1,status:d.status,data:f,error:a}}return{ok:!0,status:d.status,data:f}}a.s(["account",0,{changePassword:(a,b)=>c("POST","/api/password",{current:a,next:b})},"adminApi",0,{providers:()=>b("GET","/admin/providers"),budgets:()=>b("GET","/admin/budgets"),models:()=>b("GET","/admin/models"),keys:()=>b("GET","/admin/keys"),keysUsage:()=>b("GET","/admin/keys/usage"),setBudget:a=>b("PUT","/admin/budgets",a),clearBudget:a=>b("DELETE",`/admin/budgets/${encodeURIComponent(a)}`),addProvider:a=>b("POST","/admin/providers",a),editProvider:(a,c)=>b("PUT",`/admin/providers/${encodeURIComponent(a)}`,c),renameProvider:(a,c)=>b("PUT",`/admin/providers/${encodeURIComponent(a)}/rename`,{id:c}),removeProvider:a=>b("DELETE",`/admin/providers/${encodeURIComponent(a)}`),addKey:(a,c,d)=>b("POST",`/admin/providers/${encodeURIComponent(a)}/keys`,{key:c,name:d}),editKey:(a,c,d)=>b("PUT",`/admin/providers/${encodeURIComponent(a)}/keys/${c}`,d),removeKey:(a,c)=>b("DELETE",`/admin/providers/${encodeURIComponent(a)}/keys/${c}`),revealKey:(a,c)=>b("GET",`/admin/providers/${encodeURIComponent(a)}/keys/${c}/reveal`),addModel:(a,c,d)=>b("POST",`/admin/providers/${encodeURIComponent(a)}/models`,{model:c,...d}),addModels:(a,c)=>b("POST",`/admin/providers/${encodeURIComponent(a)}/models`,{models:c}),removeModel:(a,c)=>b("DELETE",`/admin/providers/${encodeURIComponent(a)}/models?model=${encodeURIComponent(c)}`),clearModels:a=>b("DELETE",`/admin/providers/${encodeURIComponent(a)}/models`),pricing:()=>b("GET","/admin/pricing"),setModelPrice:(a,c,d)=>b("PUT",`/admin/providers/${encodeURIComponent(a)}/models/price`,{model:c,...d}),testProvider:a=>b("POST",`/admin/providers/${encodeURIComponent(a)}/test`),testKey:(a,c)=>b("POST",`/admin/providers/${encodeURIComponent(a)}/keys/${c}/test`),testModel:(a,c)=>b("POST",`/admin/providers/${encodeURIComponent(a)}/models/test?model=${encodeURIComponent(c)}`),validateProvider:a=>b("POST","/admin/providers/validate",a),discoverModels:a=>b("POST",`/admin/providers/${encodeURIComponent(a)}/connect`),reorderKey:(a,c,d)=>b("PUT",`/admin/providers/${encodeURIComponent(a)}/keys/reorder`,{from:c,to:d}),toggleKey:(a,c,d)=>b("PUT",`/admin/providers/${encodeURIComponent(a)}/keys/${c}/toggle`,{enabled:d}),setProviderStrategy:(a,c,d)=>b("PUT",`/admin/providers/${encodeURIComponent(a)}/strategy`,{strategy:c,sticky:d}),setProviderDisabled:(a,c)=>b("PUT",`/admin/providers/${encodeURIComponent(a)}/disabled`,{disabled:c}),setRoute:(a,c)=>b("PUT",`/admin/routes/${encodeURIComponent(a)}`,c),removeRoute:a=>b("DELETE",`/admin/routes/${encodeURIComponent(a)}`),endpoint:()=>b("GET","/admin/endpoint"),setRtk:a=>b("PUT","/admin/endpoint/rtk",{enabled:a}),setCaveman:a=>b("PUT","/admin/endpoint/caveman",{level:a}),setPonytail:a=>b("PUT","/admin/endpoint/ponytail",{level:a}),addServerKey:(a,c)=>b("POST","/admin/endpoint/keys",{key:a,name:c}),editServerKey:(a,c)=>b("PUT",`/admin/endpoint/keys/${a}`,{name:c}),setServerKeyScope:(a,c)=>b("PUT",`/admin/endpoint/keys/${a}/scope`,c),removeServerKey:a=>b("DELETE",`/admin/endpoint/keys/${a}`),revealServerKey:a=>b("GET",`/admin/endpoint/keys/${a}/reveal`),setHeadroom:a=>b("PUT","/admin/endpoint/headroom",a),headroomStatus:()=>b("GET","/admin/headroom/status"),headroomStart:()=>b("POST","/admin/headroom/start"),headroomStop:()=>b("POST","/admin/headroom/stop"),putConfig:a=>b("PUT","/admin/config",{text:a}),version:()=>b("GET","/admin/version"),shutdown:()=>b("POST","/admin/shutdown")},"cliConfig",0,{status:a=>c("GET",`/api/cli-detect/${encodeURIComponent(a)}`),apply:(a,b)=>c("POST",`/api/cli-detect/${encodeURIComponent(a)}`,b),reset:a=>c("DELETE",`/api/cli-detect/${encodeURIComponent(a)}`)}])},73858,a=>{"use strict";var b=a.i(87924),c=a.i(7078),d=a.i(93026);a.s(["ConfirmModal",0,function({title:a,message:e,confirmLabel:f="Delete",onConfirm:g,onCancel:h,busy:i}){return(0,b.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 p-6",onClick:h,children:(0,b.jsxs)("div",{className:"w-full max-w-sm rounded-brand-lg border border-border bg-surface p-5 shadow-elevated",onClick:a=>a.stopPropagation(),children:[(0,b.jsxs)("div",{className:"mb-2 flex items-center gap-2",children:[(0,b.jsx)("span",{className:"flex h-7 w-7 items-center justify-center rounded-full bg-danger/10 text-danger",children:(0,b.jsx)(d.Icon,{name:"warning",size:16})}),(0,b.jsx)("h2",{className:"text-[15px] font-semibold text-text",children:a})]}),(0,b.jsx)("p",{className:"mb-4 text-[12.5px] text-text-muted",children:e}),(0,b.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,b.jsx)(c.Button,{variant:"ghost",onClick:h,children:"Cancel"}),(0,b.jsx)(c.Button,{variant:"danger",disabled:i,onClick:g,children:f})]})]})})}])},68862,a=>{"use strict";var b=a.i(87924),c=a.i(38246),d=a.i(50944),e=a.i(93026);let f=[{href:"/",label:"Endpoint & Key",icon:"api"},{href:"/providers",label:"Providers",icon:"dns"},{href:"/combos",label:"Combos",icon:"layers"},{href:"/usage",label:"Usage",icon:"bar_chart"},{href:"/quota",label:"Budgets",icon:"data_usage"},{href:"/tools",label:"CLI Tools",icon:"terminal"}],g=[{href:"/console",label:"Server Console",icon:"terminal"},{href:"/config",label:"Settings",icon:"settings"}];a.s(["Rail",0,function(){let a=(0,d.usePathname)(),h=(0,d.useRouter)();async function i(){await fetch("/api/logout",{method:"POST"}),h.replace("/login"),h.refresh()}let j=d=>{let f,g="/"===(f=d.href)?"/"===a||a.startsWith("/endpoint"):a===f||a.startsWith(`${f}/`);return(0,b.jsx)(c.default,{href:d.href,"data-label":d.label,className:`rail-icon${g?" rail-icon-active":""}`,"aria-label":d.label,children:(0,b.jsx)(e.Icon,{name:d.icon,size:20,fill:g})},d.href)};return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(c.default,{href:"/",className:"rail-brand","aria-label":"aigetwey",children:(0,b.jsxs)("svg",{viewBox:"0 0 512 512",width:"26",height:"26","aria-hidden":!0,children:[(0,b.jsx)("text",{x:"120",y:"338",fontFamily:"ui-sans-serif, Arial, sans-serif",fontSize:"260",fontWeight:"800",textAnchor:"middle",fill:"#14140f",children:"a"}),(0,b.jsxs)("g",{fill:"none",stroke:"#14140f",strokeWidth:"34",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,b.jsx)("polyline",{points:"276,182 352,256 276,330"}),(0,b.jsx)("polyline",{points:"346,182 422,256 346,330"})]})]})}),(0,b.jsxs)("nav",{className:"flex flex-col items-center gap-3",children:[f.map(j),(0,b.jsx)("div",{className:"rail-divider"}),g.map(j)]}),(0,b.jsx)("button",{onClick:i,"data-label":"Disconnect",className:"rail-icon","aria-label":"Disconnect",children:(0,b.jsx)(e.Icon,{name:"logout",size:19})})]})}])},8255,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(50944),e=a.i(93026),f=a.i(1221),g=a.i(73858),h=a.i(56173);let i={"":"Endpoint & Key",endpoint:"Endpoint & Key",providers:"Providers",combos:"Combos",usage:"Usage",quota:"Budgets",tools:"CLI Tools",console:"Server Console",config:"Settings"};function j({version:a}){let[d,f]=(0,c.useState)(!1),g=`npm install -g aigetwey@${a}`;return(0,b.jsx)("button",{onClick:()=>{navigator.clipboard.writeText(g).then(()=>{f(!0),setTimeout(()=>f(!1),1800)})},className:"flex h-6 w-6 items-center justify-center rounded-full text-warning/70 transition-colors hover:bg-warning/10 hover:text-warning",title:`Copy: ${g}`,children:(0,b.jsx)(e.Icon,{name:d?"check":"content_copy",size:13})})}a.s(["TopBar",0,function(){let a=(0,d.usePathname)(),{theme:k,toggle:l}=(0,f.useTheme)(),m="/"===a?"":a.split("/")[1]??"",n=i[m]??m,[o,p]=(0,c.useState)(null),[q,r]=(0,c.useState)(!1),[s,t]=(0,c.useState)(!1),[u,v]=(0,c.useState)(!1);async function w(){v(!0),await h.adminApi.shutdown(),t(!0),r(!1),v(!1)}return(0,c.useEffect)(()=>{h.adminApi.version().then(a=>{a.ok&&a.data&&p(a.data)})},[]),(0,b.jsxs)("header",{className:"console-topbar",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 text-[13px]",children:[(0,b.jsx)("span",{className:"text-text-subtle",children:"aigetwey"}),(0,b.jsx)("span",{className:"text-text-subtle",children:"/"}),(0,b.jsx)("span",{className:"font-medium text-text",children:n})]}),(0,b.jsxs)("div",{className:"ml-auto flex items-center gap-2.5",children:[o&&(o.updateAvailable?(0,b.jsxs)("div",{className:"flex items-center gap-1",children:[(0,b.jsxs)("a",{href:"https://github.com/xk1ko/aigetwey/releases",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-1.5 rounded-full border border-warning/30 bg-warning/10 px-2.5 py-1 text-[11px] font-medium text-warning transition-colors hover:bg-warning/20",title:`Update available — v${o.latest} is out (you have v${o.current})`,children:[(0,b.jsx)(e.Icon,{name:"arrow_upward",size:12}),"v",o.latest," available"]}),(0,b.jsx)(j,{version:o.latest})]}):(0,b.jsxs)("span",{className:"text-[11px] text-text-subtle",title:"You're on the latest version",children:["v",o.current]})),(0,b.jsx)("button",{onClick:l,className:"flex h-8 w-8 items-center justify-center rounded-full text-text-subtle transition-colors hover:text-text","aria-label":"Toggle theme",title:"dark"===k?"Switch to light mode":"Switch to dark mode",children:(0,b.jsx)(e.Icon,{name:"dark"===k?"light_mode":"dark_mode",size:18})}),(0,b.jsx)("button",{onClick:()=>r(!0),className:"flex h-8 w-8 items-center justify-center rounded-full text-text-subtle transition-colors hover:text-danger","aria-label":"Shut down gateway",title:"Shut down the gateway",children:(0,b.jsx)(e.Icon,{name:"power_settings_new",size:18})}),(0,b.jsxs)("div",{className:"flex items-center gap-2 rounded-full border border-border bg-surface py-1 pl-1 pr-3",children:[(0,b.jsx)("span",{className:"flex h-6 w-6 items-center justify-center rounded-full bg-accent text-[11px] font-bold text-accent-ink",children:"A"}),(0,b.jsx)("span",{className:"text-[12px] text-text-muted",children:"admin"})]})]}),q&&(0,b.jsx)(g.ConfirmModal,{title:"Shut down gateway?",message:"The gateway process will stop and all requests will fail until you restart it (run.sh). The dashboard stays up but can't reach the gateway.",confirmLabel:"Shut down",busy:u,onConfirm:w,onCancel:()=>r(!1)}),s&&(0,b.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/70 p-6",children:(0,b.jsxs)("div",{className:"w-full max-w-sm rounded-brand-lg border border-border bg-surface p-5 text-center shadow-elevated",children:[(0,b.jsx)("span",{className:"mx-auto mb-2 flex h-9 w-9 items-center justify-center rounded-full bg-danger/10 text-danger",children:(0,b.jsx)(e.Icon,{name:"power_settings_new",size:20})}),(0,b.jsx)("h2",{className:"text-[15px] font-semibold text-text",children:"Gateway stopped"}),(0,b.jsxs)("p",{className:"mt-1 text-[12.5px] text-text-muted",children:["Restart it with ",(0,b.jsx)("code",{className:"rounded bg-surface-2 px-1",children:"run.sh"}),", then reload this page."]})]})})]})}])}];
2
2
 
3
3
  //# sourceMappingURL=_1jt-_lv._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../node_modules/next/src/shared/lib/invariant-error.ts","../../../../node_modules/next/src/shared/lib/segment.ts","../../../../node_modules/next/src/shared/lib/promise-with-resolvers.ts","../../../../src/components/Button.tsx","../../../../src/lib/client.ts","../../../../src/components/ConfirmModal.tsx","../../../../src/components/Rail.tsx","../../../../src/components/TopBar.tsx"],"sourcesContent":["export class InvariantError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(\n `Invariant: ${message.endsWith('.') ? message : message + '.'} This is a bug in Next.js.`,\n options\n )\n this.name = 'InvariantError'\n }\n}\n","import type { FlightRouterState, Segment } from './app-router-types'\n\nexport function getSegmentValue(segment: Segment) {\n return Array.isArray(segment) ? segment[1] : segment\n}\n\nexport function isGroupSegment(segment: string) {\n // Use array[0] for performant purpose\n return segment[0] === '(' && segment.endsWith(')')\n}\n\nexport function isParallelRouteSegment(segment: string) {\n return segment.startsWith('@') && segment !== '@children'\n}\n\nexport function addSearchParamsIfPageSegment(\n segment: Segment,\n searchParams: Record<string, string | string[] | undefined>\n) {\n const isPageSegment = segment.includes(PAGE_SEGMENT_KEY)\n\n if (isPageSegment) {\n const stringifiedQuery = JSON.stringify(searchParams)\n return stringifiedQuery !== '{}'\n ? PAGE_SEGMENT_KEY + '?' + stringifiedQuery\n : PAGE_SEGMENT_KEY\n }\n\n return segment\n}\n\nexport function computeSelectedLayoutSegment(\n segments: string[] | null,\n parallelRouteKey: string\n): string | null {\n if (!segments || segments.length === 0) {\n return null\n }\n\n // For 'children', use first segment; for other parallel routes, use last segment\n const rawSegment =\n parallelRouteKey === 'children'\n ? segments[0]\n : segments[segments.length - 1]\n\n // If the default slot is showing, return null since it's not technically \"selected\" (it's a fallback)\n // Returning an internal value like `__DEFAULT__` would be confusing\n return rawSegment === DEFAULT_SEGMENT_KEY ? null : rawSegment\n}\n\n/** Get the canonical parameters from the current level to the leaf node. */\nexport function getSelectedLayoutSegmentPath(\n tree: FlightRouterState,\n parallelRouteKey: string,\n first = true,\n segmentPath: string[] = []\n): string[] {\n let node: FlightRouterState\n if (first) {\n // Use the provided parallel route key on the first parallel route\n node = tree[1][parallelRouteKey]\n } else {\n // After first parallel route prefer children, if there's no children pick the first parallel route.\n const parallelRoutes = tree[1]\n node = parallelRoutes.children ?? Object.values(parallelRoutes)[0]\n }\n\n if (!node) return segmentPath\n const segment = node[0]\n\n let segmentValue = getSegmentValue(segment)\n\n if (!segmentValue || segmentValue.startsWith(PAGE_SEGMENT_KEY)) {\n return segmentPath\n }\n\n segmentPath.push(segmentValue)\n\n return getSelectedLayoutSegmentPath(\n node,\n parallelRouteKey,\n false,\n segmentPath\n )\n}\n\nexport const PAGE_SEGMENT_KEY = '__PAGE__'\nexport const DEFAULT_SEGMENT_KEY = '__DEFAULT__'\nexport const NOT_FOUND_SEGMENT_KEY = '/_not-found'\n","export function createPromiseWithResolvers<T>(): PromiseWithResolvers<T> {\n // Shim of Stage 4 Promise.withResolvers proposal\n let resolve: (value: T | PromiseLike<T>) => void\n let reject: (reason: any) => void\n const promise = new Promise<T>((res, rej) => {\n resolve = res\n reject = rej\n })\n return { resolve: resolve!, reject: reject!, promise }\n}\n","import type { ButtonHTMLAttributes } from \"react\";\n\ntype Variant = \"primary\" | \"ghost\" | \"danger\";\n\nconst VARIANTS: Record<Variant, string> = {\n primary: \"bg-accent text-accent-ink shadow-warm hover:bg-accent-hover border border-transparent font-semibold\",\n ghost: \"bg-transparent text-text-muted border border-border hover:text-text hover:border-text-subtle\",\n danger: \"bg-transparent text-text-muted border border-border hover:text-danger hover:border-danger/50\",\n};\n\nexport function Button({\n variant = \"primary\",\n className,\n ...props\n}: ButtonHTMLAttributes<HTMLButtonElement> & { variant?: Variant }) {\n return (\n <button\n className={`inline-flex items-center justify-center gap-1.5 rounded-brand px-3.5 py-2 text-[13px] font-medium transition-colors duration-150 cursor-pointer disabled:opacity-45 disabled:cursor-not-allowed ${VARIANTS[variant]}${className ? ` ${className}` : \"\"}`}\n {...props}\n />\n );\n}\n\nexport function Input({ className, ...props }: React.InputHTMLAttributes<HTMLInputElement>) {\n return (\n <input\n className={`w-full rounded-brand border border-border bg-bg px-3 py-2 text-[13px] text-text placeholder:text-text-subtle focus:border-accent focus:outline-none transition-colors${className ? ` ${className}` : \"\"}`}\n {...props}\n />\n );\n}\n\nexport function Select({ className, ...props }: React.SelectHTMLAttributes<HTMLSelectElement>) {\n return (\n <select\n className={`w-full rounded-brand border border-border bg-bg px-3 py-2 text-[13px] text-text focus:border-accent focus:outline-none transition-colors${className ? ` ${className}` : \"\"}`}\n {...props}\n />\n );\n}\n\nexport function Field({\n label,\n hint,\n children,\n}: {\n label: string;\n hint?: string;\n children: React.ReactNode;\n}) {\n return (\n <label className=\"flex flex-col gap-1.5\">\n <span className=\"text-[11px] font-medium uppercase tracking-wider text-text-subtle\">\n {label}\n {hint && <span className=\"ml-1.5 lowercase tracking-normal text-text-subtle/70\">· {hint}</span>}\n </span>\n {children}\n </label>\n );\n}\n","\"use client\";\n\n/**\n * Browser-side admin client. Talks to the gateway THROUGH the same-origin proxy\n * (`/api/gw/admin/...`), which injects the admin Bearer server-side — so the\n * password never reaches the browser. Server components read initial data via\n * lib/gateway.ts directly; client components mutate through here.\n */\nimport type {\n BudgetStatus,\n ConfigReply,\n EndpointPayload,\n HeadroomStatusReply,\n InjectLevel,\n KeyUsageRow,\n ModelsPayload,\n PingResult,\n PricingPayload,\n ProviderSnapshot,\n WireFormat,\n} from \"./gateway\";\n\nexport interface ApiResult<T> {\n ok: boolean;\n status: number;\n data: T | null;\n error?: string;\n}\n\nasync function api<T>(method: string, path: string, body?: unknown): Promise<ApiResult<T>> {\n let res: Response;\n try {\n res = await fetch(`/api/gw${path}`, {\n method,\n headers: body !== undefined ? { \"content-type\": \"application/json\" } : {},\n body: body !== undefined ? JSON.stringify(body) : undefined,\n });\n } catch (e) {\n return { ok: false, status: 0, data: null, error: (e as Error).message };\n }\n const text = await res.text();\n let data: T | null = null;\n try {\n data = text ? (JSON.parse(text) as T) : null;\n } catch {\n data = null;\n }\n if (!res.ok) {\n const err = (data as { error?: string } | null)?.error ?? `request failed (${res.status})`;\n return { ok: false, status: res.status, data, error: err };\n }\n return { ok: true, status: res.status, data };\n}\n\nexport const adminApi = {\n providers: () => api<{ providers: ProviderSnapshot[] }>(\"GET\", \"/admin/providers\"),\n budgets: () => api<{ budgets: BudgetStatus[] }>(\"GET\", \"/admin/budgets\"),\n models: () => api<ModelsPayload>(\"GET\", \"/admin/models\"),\n keys: () => api<Array<{ fingerprint: string; name: string; masked: string }>>(\"GET\", \"/admin/keys\"),\n keysUsage: () => api<{ keys: KeyUsageRow[] }>(\"GET\", \"/admin/keys/usage\"),\n\n setBudget: (body: {\n scope: { type: \"global\" } | { type: \"provider\"; id: string } | { type: \"model\"; id: string } | { type: \"key\"; id: string };\n unit: \"usd\" | \"tokens\";\n limit: number;\n window: \"5h\" | \"24h\" | \"7day\" | \"30day\";\n alert_at?: number;\n note?: string;\n }) => api<ConfigReply>(\"PUT\", \"/admin/budgets\", body),\n clearBudget: (key: string) => api<ConfigReply>(\"DELETE\", `/admin/budgets/${encodeURIComponent(key)}`),\n\n addProvider: (p: {\n id: string;\n format: WireFormat;\n base_url: string;\n api_key?: string;\n free?: boolean;\n auto_models?: boolean;\n service_account?: string;\n }) => api<ConfigReply>(\"POST\", \"/admin/providers\", p),\n editProvider: (id: string, patch: { base_url?: string; format?: WireFormat; name?: string }) =>\n api<ConfigReply>(\"PUT\", `/admin/providers/${encodeURIComponent(id)}`, patch),\n renameProvider: (id: string, newId: string) =>\n api<ConfigReply>(\"PUT\", `/admin/providers/${encodeURIComponent(id)}/rename`, { id: newId }),\n removeProvider: (id: string) => api<ConfigReply>(\"DELETE\", `/admin/providers/${encodeURIComponent(id)}`),\n addKey: (id: string, key: string, name?: string) =>\n api<ConfigReply>(\"POST\", `/admin/providers/${encodeURIComponent(id)}/keys`, { key, name }),\n editKey: (id: string, index: number, patch: { key?: string; name?: string }) =>\n api<ConfigReply>(\"PUT\", `/admin/providers/${encodeURIComponent(id)}/keys/${index}`, patch),\n removeKey: (id: string, index: number) =>\n api<ConfigReply>(\"DELETE\", `/admin/providers/${encodeURIComponent(id)}/keys/${index}`),\n revealKey: (id: string, index: number) =>\n api<{ key: string }>(\"GET\", `/admin/providers/${encodeURIComponent(id)}/keys/${index}/reveal`),\n addModel: (id: string, model: string, price?: { price_in?: number; price_out?: number }) =>\n api<ConfigReply>(\"POST\", `/admin/providers/${encodeURIComponent(id)}/models`, { model, ...price }),\n addModels: (id: string, models: string[]) =>\n api<ConfigReply>(\"POST\", `/admin/providers/${encodeURIComponent(id)}/models`, { models }),\n // model id can hold a slash (provider/model); send it as a query param so the\n // proxy's path split doesn't mangle it.\n removeModel: (id: string, model: string) =>\n api<ConfigReply>(\"DELETE\", `/admin/providers/${encodeURIComponent(id)}/models?model=${encodeURIComponent(model)}`),\n clearModels: (id: string) => api<ConfigReply>(\"DELETE\", `/admin/providers/${encodeURIComponent(id)}/models`),\n pricing: () => api<PricingPayload>(\"GET\", \"/admin/pricing\"),\n setModelPrice: (id: string, model: string, price: { price_in?: number | null; price_out?: number | null }) =>\n api<ConfigReply>(\"PUT\", `/admin/providers/${encodeURIComponent(id)}/models/price`, { model, ...price }),\n testProvider: (id: string) => api<PingResult>(\"POST\", `/admin/providers/${encodeURIComponent(id)}/test`),\n testKey: (id: string, index: number) =>\n api<PingResult>(\"POST\", `/admin/providers/${encodeURIComponent(id)}/keys/${index}/test`),\n testModel: (id: string, model: string) =>\n api<{ ok: boolean; status?: number; error?: string }>(\n \"POST\",\n `/admin/providers/${encodeURIComponent(id)}/models/test?model=${encodeURIComponent(model)}`,\n ),\n validateProvider: (b: { format: WireFormat; base_url: string; api_key?: string }) =>\n api<PingResult>(\"POST\", \"/admin/providers/validate\", b),\n // discover: returns the upstream catalog flagged with which ids are in config.\n discoverModels: (id: string) =>\n api<{ ok: boolean; models: Array<{ id: string; added: boolean }> }>(\n \"POST\",\n `/admin/providers/${encodeURIComponent(id)}/connect`,\n ),\n\n reorderKey: (id: string, from: number, to: number) =>\n api<ConfigReply>(\"PUT\", `/admin/providers/${encodeURIComponent(id)}/keys/reorder`, { from, to }),\n toggleKey: (id: string, index: number, enabled: boolean) =>\n api<ConfigReply>(\"PUT\", `/admin/providers/${encodeURIComponent(id)}/keys/${index}/toggle`, { enabled }),\n setProviderStrategy: (id: string, strategy: \"fallback\" | \"round-robin\" | null, sticky?: number) =>\n api<ConfigReply>(\"PUT\", `/admin/providers/${encodeURIComponent(id)}/strategy`, { strategy, sticky }),\n setProviderDisabled: (id: string, disabled: boolean) =>\n api<ConfigReply>(\"PUT\", `/admin/providers/${encodeURIComponent(id)}/disabled`, { disabled }),\n\n setRoute: (\n alias: string,\n body: { target: string[]; model?: string | string[]; strategy?: \"fallback\" | \"round-robin\"; price_in?: number; price_out?: number },\n ) => api<ConfigReply>(\"PUT\", `/admin/routes/${encodeURIComponent(alias)}`, body),\n removeRoute: (alias: string) => api<ConfigReply>(\"DELETE\", `/admin/routes/${encodeURIComponent(alias)}`),\n\n endpoint: () => api<EndpointPayload>(\"GET\", \"/admin/endpoint\"),\n setRtk: (enabled: boolean) => api<ConfigReply>(\"PUT\", \"/admin/endpoint/rtk\", { enabled }),\n setCaveman: (level: InjectLevel) => api<ConfigReply>(\"PUT\", \"/admin/endpoint/caveman\", { level }),\n setPonytail: (level: InjectLevel) => api<ConfigReply>(\"PUT\", \"/admin/endpoint/ponytail\", { level }),\n addServerKey: (key: string, name?: string) => api<ConfigReply>(\"POST\", \"/admin/endpoint/keys\", { key, name }),\n editServerKey: (index: number, name: string) => api<ConfigReply>(\"PUT\", `/admin/endpoint/keys/${index}`, { name }),\n setServerKeyScope: (index: number, body: { models?: string[]; rpm?: number | null; expires?: number | null }) =>\n api<ConfigReply>(\"PUT\", `/admin/endpoint/keys/${index}/scope`, body),\n removeServerKey: (index: number) => api<ConfigReply>(\"DELETE\", `/admin/endpoint/keys/${index}`),\n revealServerKey: (index: number) => api<{ key: string }>(\"GET\", `/admin/endpoint/keys/${index}/reveal`),\n\n setHeadroom: (patch: { enabled?: boolean; url?: string; compress_user_messages?: boolean }) =>\n api<ConfigReply>(\"PUT\", \"/admin/endpoint/headroom\", patch),\n headroomStatus: () => api<HeadroomStatusReply>(\"GET\", \"/admin/headroom/status\"),\n headroomStart: () => api<{ success?: boolean; pid?: number; alreadyRunning?: boolean }>(\"POST\", \"/admin/headroom/start\"),\n headroomStop: () => api<{ stopped: boolean; reason?: string; pid?: number }>(\"POST\", \"/admin/headroom/stop\"),\n\n putConfig: (text: string) => api<{ ok: boolean }>(\"PUT\", \"/admin/config\", { text }),\n\n version: () => api<{ current: string; latest: string | null; updateAvailable: boolean }>(\"GET\", \"/admin/version\"),\n shutdown: () => api<{ ok: boolean; message: string }>(\"POST\", \"/admin/shutdown\"),\n};\n\n// Local CLI-tool detection/auto-config. These hit the dashboard's OWN server\n// routes (/api/cli-detect/*), not the gateway proxy — they read/write the tool's\n// config file on this machine. Session-gated by middleware like everything else.\nexport interface CliStatus {\n auto: boolean;\n installed: boolean;\n configured?: boolean;\n path?: string;\n baseUrl?: string | null;\n models?: string[];\n activeModel?: string | null;\n // claude returns its three slot defaults instead of a flat list\n modelSlots?: { opus?: string | null; sonnet?: string | null; haiku?: string | null };\n}\n\nasync function appApi<T>(method: string, url: string, body?: unknown): Promise<ApiResult<T>> {\n let res: Response;\n try {\n res = await fetch(url, {\n method,\n headers: body !== undefined ? { \"content-type\": \"application/json\" } : {},\n body: body !== undefined ? JSON.stringify(body) : undefined,\n });\n } catch (e) {\n return { ok: false, status: 0, data: null, error: (e as Error).message };\n }\n const text = await res.text();\n const data = text ? (JSON.parse(text) as T) : null;\n if (!res.ok) {\n const err = (data as { error?: string } | null)?.error ?? `request failed (${res.status})`;\n return { ok: false, status: res.status, data, error: err };\n }\n return { ok: true, status: res.status, data };\n}\n\n/** Admin account actions that hit the dashboard's OWN routes (not the gw proxy). */\nexport const account = {\n changePassword: (current: string, next: string) =>\n appApi<{ ok: boolean }>(\"POST\", \"/api/password\", { current, next }),\n};\n\nexport const cliConfig = {\n status: (tool: string) => appApi<CliStatus>(\"GET\", `/api/cli-detect/${encodeURIComponent(tool)}`),\n apply: (tool: string, body: { base: string; key?: string; models?: string[] | Record<string, string>; active?: string }) =>\n appApi<{ success?: boolean; path?: string }>(\"POST\", `/api/cli-detect/${encodeURIComponent(tool)}`, body),\n reset: (tool: string) => appApi<{ success?: boolean }>(\"DELETE\", `/api/cli-detect/${encodeURIComponent(tool)}`),\n};\n","\"use client\";\n\nimport { Button } from \"@/components/Button\";\nimport { Icon } from \"@/components/Icon\";\n\ninterface ConfirmModalProps {\n title: string;\n message: string;\n confirmLabel?: string;\n onConfirm: () => void;\n onCancel: () => void;\n busy?: boolean;\n}\n\nexport function ConfirmModal({ title, message, confirmLabel = \"Delete\", onConfirm, onCancel, busy }: ConfirmModalProps) {\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/60 p-6\" onClick={onCancel}>\n <div\n className=\"w-full max-w-sm rounded-brand-lg border border-border bg-surface p-5 shadow-elevated\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"mb-2 flex items-center gap-2\">\n <span className=\"flex h-7 w-7 items-center justify-center rounded-full bg-danger/10 text-danger\">\n <Icon name=\"warning\" size={16} />\n </span>\n <h2 className=\"text-[15px] font-semibold text-text\">{title}</h2>\n </div>\n <p className=\"mb-4 text-[12.5px] text-text-muted\">{message}</p>\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"ghost\" onClick={onCancel}>Cancel</Button>\n <Button variant=\"danger\" disabled={busy} onClick={onConfirm}>{confirmLabel}</Button>\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport Link from \"next/link\";\nimport { usePathname, useRouter } from \"next/navigation\";\nimport { Icon } from \"./Icon\";\n\n// Floating icon-rail (user's preferred chrome), carrying aigetwey's IA: Endpoint\n// is the landing, routing lives in Combos, and operational pages sit below a\n// divider. Labels surface as hover tooltips (data-label).\ntype NavItem = { href: string; label: string; icon: string };\n\nconst MAIN: NavItem[] = [\n { href: \"/\", label: \"Endpoint & Key\", icon: \"api\" },\n { href: \"/providers\", label: \"Providers\", icon: \"dns\" },\n { href: \"/combos\", label: \"Combos\", icon: \"layers\" },\n { href: \"/usage\", label: \"Usage\", icon: \"bar_chart\" },\n { href: \"/quota\", label: \"Budgets\", icon: \"data_usage\" },\n { href: \"/tools\", label: \"CLI Tools\", icon: \"terminal\" },\n];\n\nconst SYSTEM: NavItem[] = [\n { href: \"/console\", label: \"Server Console\", icon: \"terminal\" },\n { href: \"/config\", label: \"Settings\", icon: \"settings\" },\n];\n\nexport function Rail() {\n const path = usePathname();\n const router = useRouter();\n\n async function logout() {\n await fetch(\"/api/logout\", { method: \"POST\" });\n router.replace(\"/login\");\n router.refresh();\n }\n\n // Endpoint owns both \"/\" (landing) and \"/endpoint\"; others match the segment\n // and its sub-routes (e.g. /providers/[id]).\n const isActive = (href: string) =>\n href === \"/\"\n ? path === \"/\" || path.startsWith(\"/endpoint\")\n : path === href || path.startsWith(`${href}/`);\n\n const link = (item: NavItem) => {\n const active = isActive(item.href);\n return (\n <Link\n key={item.href}\n href={item.href}\n data-label={item.label}\n className={`rail-icon${active ? \" rail-icon-active\" : \"\"}`}\n aria-label={item.label}\n >\n <Icon name={item.icon} size={20} fill={active} />\n </Link>\n );\n };\n\n return (\n <>\n <Link href=\"/\" className=\"rail-brand\" aria-label=\"aigetwey\">\n {/* \"a»\" mark — ink on the lime tile (CSS provides the tile) */}\n <svg viewBox=\"0 0 512 512\" width=\"26\" height=\"26\" aria-hidden>\n <text x=\"120\" y=\"338\" fontFamily=\"ui-sans-serif, Arial, sans-serif\" fontSize=\"260\" fontWeight=\"800\" textAnchor=\"middle\" fill=\"#14140f\">a</text>\n <g fill=\"none\" stroke=\"#14140f\" strokeWidth=\"34\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"276,182 352,256 276,330\" />\n <polyline points=\"346,182 422,256 346,330\" />\n </g>\n </svg>\n </Link>\n\n <nav className=\"flex flex-col items-center gap-3\">\n {MAIN.map(link)}\n <div className=\"rail-divider\" />\n {SYSTEM.map(link)}\n </nav>\n\n <button onClick={logout} data-label=\"Disconnect\" className=\"rail-icon\" aria-label=\"Disconnect\">\n <Icon name=\"logout\" size={19} />\n </button>\n </>\n );\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { usePathname } from \"next/navigation\";\nimport { Icon } from \"./Icon\";\nimport { useTheme } from \"./ThemeProvider\";\nimport { ConfirmModal } from \"./ConfirmModal\";\nimport { adminApi } from \"@/lib/client\";\n\nconst LABELS: Record<string, string> = {\n \"\": \"Endpoint & Key\",\n endpoint: \"Endpoint & Key\",\n providers: \"Providers\",\n combos: \"Combos\",\n usage: \"Usage\",\n quota: \"Budgets\",\n tools: \"CLI Tools\",\n console: \"Server Console\",\n config: \"Settings\",\n};\n\nexport function TopBar() {\n const path = usePathname();\n const { theme, toggle } = useTheme();\n const seg = path === \"/\" ? \"\" : (path.split(\"/\")[1] ?? \"\");\n const current = LABELS[seg] ?? seg;\n\n const [version, setVersion] = useState<{ current: string; latest: string | null; updateAvailable: boolean } | null>(null);\n const [confirmShutdown, setConfirmShutdown] = useState(false);\n const [stopped, setStopped] = useState(false);\n const [busy, setBusy] = useState(false);\n\n // version + update check on mount, via aigetwey's sidebar npm poll.\n useEffect(() => {\n void adminApi.version().then((r) => {\n if (r.ok && r.data) setVersion(r.data);\n });\n }, []);\n\n async function doShutdown() {\n setBusy(true);\n await adminApi.shutdown();\n // the gateway exits ~300ms after replying; reflect it in the UI.\n setStopped(true);\n setConfirmShutdown(false);\n setBusy(false);\n }\n\n return (\n <header className=\"console-topbar\">\n <div className=\"flex items-center gap-2 text-[13px]\">\n <span className=\"text-text-subtle\">aigetwey</span>\n <span className=\"text-text-subtle\">/</span>\n <span className=\"font-medium text-text\">{current}</span>\n </div>\n\n <div className=\"ml-auto flex items-center gap-2.5\">\n {version && (\n <span\n className=\"flex items-center gap-1 text-[11px] text-text-subtle\"\n title={\n version.updateAvailable\n ? `Update available: v${version.latest}`\n : \"You're on the latest version\"\n }\n >\n v{version.current}\n {version.updateAvailable && (\n <span className=\"flex items-center gap-1 rounded-full bg-warning/12 px-1.5 py-0.5 text-warning\">\n <Icon name=\"arrow_upward\" size={11} />v{version.latest}\n </span>\n )}\n </span>\n )}\n\n <button\n onClick={toggle}\n className=\"flex h-8 w-8 items-center justify-center rounded-full text-text-subtle transition-colors hover:text-text\"\n aria-label=\"Toggle theme\"\n title={theme === \"dark\" ? \"Switch to light mode\" : \"Switch to dark mode\"}\n >\n <Icon name={theme === \"dark\" ? \"light_mode\" : \"dark_mode\"} size={18} />\n </button>\n\n <button\n onClick={() => setConfirmShutdown(true)}\n className=\"flex h-8 w-8 items-center justify-center rounded-full text-text-subtle transition-colors hover:text-danger\"\n aria-label=\"Shut down gateway\"\n title=\"Shut down the gateway\"\n >\n <Icon name=\"power_settings_new\" size={18} />\n </button>\n\n <div className=\"flex items-center gap-2 rounded-full border border-border bg-surface py-1 pl-1 pr-3\">\n <span className=\"flex h-6 w-6 items-center justify-center rounded-full bg-accent text-[11px] font-bold text-accent-ink\">\n A\n </span>\n <span className=\"text-[12px] text-text-muted\">admin</span>\n </div>\n </div>\n\n {confirmShutdown && (\n <ConfirmModal\n title=\"Shut down gateway?\"\n message=\"The gateway process will stop and all requests will fail until you restart it (run.sh). The dashboard stays up but can't reach the gateway.\"\n confirmLabel=\"Shut down\"\n busy={busy}\n onConfirm={doShutdown}\n onCancel={() => setConfirmShutdown(false)}\n />\n )}\n\n {stopped && (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/70 p-6\">\n <div className=\"w-full max-w-sm rounded-brand-lg border border-border bg-surface p-5 text-center shadow-elevated\">\n <span className=\"mx-auto mb-2 flex h-9 w-9 items-center justify-center rounded-full bg-danger/10 text-danger\">\n <Icon name=\"power_settings_new\" size={20} />\n </span>\n <h2 className=\"text-[15px] font-semibold text-text\">Gateway stopped</h2>\n <p className=\"mt-1 text-[12.5px] text-text-muted\">\n Restart it with <code className=\"rounded bg-surface-2 px-1\">run.sh</code>, then reload this page.\n </p>\n </div>\n </div>\n )}\n </header>\n );\n}\n"],"names":["InvariantError","Error","constructor","message","options","endsWith","name","DEFAULT_SEGMENT_KEY","NOT_FOUND_SEGMENT_KEY","PAGE_SEGMENT_KEY","addSearchParamsIfPageSegment","computeSelectedLayoutSegment","getSegmentValue","getSelectedLayoutSegmentPath","isGroupSegment","isParallelRouteSegment","segment","Array","isArray","startsWith","searchParams","isPageSegment","includes","stringifiedQuery","JSON","stringify","segments","parallelRouteKey","length","rawSegment","tree","first","segmentPath","node","parallelRoutes","children","Object","values","segmentValue","push","createPromiseWithResolvers","resolve","reject","promise","Promise","res","rej","VARIANTS","primary","ghost","danger","Button","variant","className","props","Input","Select","Field","label","hint","api","method","path","body","fetch","headers","undefined","e","ok","status","data","error","text","parse","err","adminApi","providers","budgets","models","keys","keysUsage","setBudget","clearBudget","key","encodeURIComponent","addProvider","p","editProvider","id","patch","renameProvider","newId","removeProvider","addKey","editKey","index","removeKey","revealKey","addModel","model","price","addModels","removeModel","clearModels","pricing","setModelPrice","testProvider","testKey","testModel","validateProvider","b","discoverModels","reorderKey","from","to","toggleKey","enabled","setProviderStrategy","strategy","sticky","setProviderDisabled","disabled","setRoute","alias","removeRoute","endpoint","setRtk","setCaveman","level","setPonytail","addServerKey","editServerKey","setServerKeyScope","removeServerKey","revealServerKey","setHeadroom","headroomStatus","headroomStart","headroomStop","putConfig","version","shutdown","appApi","url","account","changePassword","current","next","cliConfig","tool","apply","reset","ConfirmModal","title","confirmLabel","onConfirm","onCancel","busy","onClick","stopPropagation","size","MAIN","href","icon","SYSTEM","Rail","router","logout","replace","refresh","isActive","link","item","active","fill","viewBox","width","height","x","y","fontFamily","fontSize","fontWeight","textAnchor","stroke","strokeWidth","strokeLinecap","strokeLinejoin","points","map","LABELS","combos","usage","quota","tools","console","config","TopBar","theme","toggle","seg","split","setVersion","confirmShutdown","setConfirmShutdown","stopped","setStopped","setBusy","then","r","doShutdown","updateAvailable","latest"],"mappings":"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","ignoreList":[0,1,2]}
1
+ {"version":3,"sources":["../../../../node_modules/next/src/shared/lib/invariant-error.ts","../../../../node_modules/next/src/shared/lib/segment.ts","../../../../node_modules/next/src/shared/lib/promise-with-resolvers.ts","../../../../src/components/Button.tsx","../../../../src/lib/client.ts","../../../../src/components/ConfirmModal.tsx","../../../../src/components/Rail.tsx","../../../../src/components/TopBar.tsx"],"sourcesContent":["export class InvariantError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(\n `Invariant: ${message.endsWith('.') ? message : message + '.'} This is a bug in Next.js.`,\n options\n )\n this.name = 'InvariantError'\n }\n}\n","import type { FlightRouterState, Segment } from './app-router-types'\n\nexport function getSegmentValue(segment: Segment) {\n return Array.isArray(segment) ? segment[1] : segment\n}\n\nexport function isGroupSegment(segment: string) {\n // Use array[0] for performant purpose\n return segment[0] === '(' && segment.endsWith(')')\n}\n\nexport function isParallelRouteSegment(segment: string) {\n return segment.startsWith('@') && segment !== '@children'\n}\n\nexport function addSearchParamsIfPageSegment(\n segment: Segment,\n searchParams: Record<string, string | string[] | undefined>\n) {\n const isPageSegment = segment.includes(PAGE_SEGMENT_KEY)\n\n if (isPageSegment) {\n const stringifiedQuery = JSON.stringify(searchParams)\n return stringifiedQuery !== '{}'\n ? PAGE_SEGMENT_KEY + '?' + stringifiedQuery\n : PAGE_SEGMENT_KEY\n }\n\n return segment\n}\n\nexport function computeSelectedLayoutSegment(\n segments: string[] | null,\n parallelRouteKey: string\n): string | null {\n if (!segments || segments.length === 0) {\n return null\n }\n\n // For 'children', use first segment; for other parallel routes, use last segment\n const rawSegment =\n parallelRouteKey === 'children'\n ? segments[0]\n : segments[segments.length - 1]\n\n // If the default slot is showing, return null since it's not technically \"selected\" (it's a fallback)\n // Returning an internal value like `__DEFAULT__` would be confusing\n return rawSegment === DEFAULT_SEGMENT_KEY ? null : rawSegment\n}\n\n/** Get the canonical parameters from the current level to the leaf node. */\nexport function getSelectedLayoutSegmentPath(\n tree: FlightRouterState,\n parallelRouteKey: string,\n first = true,\n segmentPath: string[] = []\n): string[] {\n let node: FlightRouterState\n if (first) {\n // Use the provided parallel route key on the first parallel route\n node = tree[1][parallelRouteKey]\n } else {\n // After first parallel route prefer children, if there's no children pick the first parallel route.\n const parallelRoutes = tree[1]\n node = parallelRoutes.children ?? Object.values(parallelRoutes)[0]\n }\n\n if (!node) return segmentPath\n const segment = node[0]\n\n let segmentValue = getSegmentValue(segment)\n\n if (!segmentValue || segmentValue.startsWith(PAGE_SEGMENT_KEY)) {\n return segmentPath\n }\n\n segmentPath.push(segmentValue)\n\n return getSelectedLayoutSegmentPath(\n node,\n parallelRouteKey,\n false,\n segmentPath\n )\n}\n\nexport const PAGE_SEGMENT_KEY = '__PAGE__'\nexport const DEFAULT_SEGMENT_KEY = '__DEFAULT__'\nexport const NOT_FOUND_SEGMENT_KEY = '/_not-found'\n","export function createPromiseWithResolvers<T>(): PromiseWithResolvers<T> {\n // Shim of Stage 4 Promise.withResolvers proposal\n let resolve: (value: T | PromiseLike<T>) => void\n let reject: (reason: any) => void\n const promise = new Promise<T>((res, rej) => {\n resolve = res\n reject = rej\n })\n return { resolve: resolve!, reject: reject!, promise }\n}\n","import type { ButtonHTMLAttributes } from \"react\";\n\ntype Variant = \"primary\" | \"ghost\" | \"danger\";\n\nconst VARIANTS: Record<Variant, string> = {\n primary: \"bg-accent text-accent-ink shadow-warm hover:bg-accent-hover border border-transparent font-semibold\",\n ghost: \"bg-transparent text-text-muted border border-border hover:text-text hover:border-text-subtle\",\n danger: \"bg-transparent text-text-muted border border-border hover:text-danger hover:border-danger/50\",\n};\n\nexport function Button({\n variant = \"primary\",\n className,\n ...props\n}: ButtonHTMLAttributes<HTMLButtonElement> & { variant?: Variant }) {\n return (\n <button\n className={`inline-flex items-center justify-center gap-1.5 rounded-brand px-3.5 py-2 text-[13px] font-medium transition-colors duration-150 cursor-pointer disabled:opacity-45 disabled:cursor-not-allowed ${VARIANTS[variant]}${className ? ` ${className}` : \"\"}`}\n {...props}\n />\n );\n}\n\nexport function Input({ className, ...props }: React.InputHTMLAttributes<HTMLInputElement>) {\n return (\n <input\n className={`w-full rounded-brand border border-border bg-bg px-3 py-2 text-[13px] text-text placeholder:text-text-subtle focus:border-accent focus:outline-none transition-colors${className ? ` ${className}` : \"\"}`}\n {...props}\n />\n );\n}\n\nexport function Select({ className, ...props }: React.SelectHTMLAttributes<HTMLSelectElement>) {\n return (\n <select\n className={`w-full rounded-brand border border-border bg-bg px-3 py-2 text-[13px] text-text focus:border-accent focus:outline-none transition-colors${className ? ` ${className}` : \"\"}`}\n {...props}\n />\n );\n}\n\nexport function Field({\n label,\n hint,\n children,\n}: {\n label: string;\n hint?: string;\n children: React.ReactNode;\n}) {\n return (\n <label className=\"flex flex-col gap-1.5\">\n <span className=\"text-[11px] font-medium uppercase tracking-wider text-text-subtle\">\n {label}\n {hint && <span className=\"ml-1.5 lowercase tracking-normal text-text-subtle/70\">· {hint}</span>}\n </span>\n {children}\n </label>\n );\n}\n","\"use client\";\n\n/**\n * Browser-side admin client. Talks to the gateway THROUGH the same-origin proxy\n * (`/api/gw/admin/...`), which injects the admin Bearer server-side — so the\n * password never reaches the browser. Server components read initial data via\n * lib/gateway.ts directly; client components mutate through here.\n */\nimport type {\n BudgetStatus,\n ConfigReply,\n EndpointPayload,\n HeadroomStatusReply,\n InjectLevel,\n KeyUsageRow,\n ModelsPayload,\n PingResult,\n PricingPayload,\n ProviderSnapshot,\n WireFormat,\n} from \"./gateway\";\n\nexport interface ApiResult<T> {\n ok: boolean;\n status: number;\n data: T | null;\n error?: string;\n}\n\nasync function api<T>(method: string, path: string, body?: unknown): Promise<ApiResult<T>> {\n let res: Response;\n try {\n res = await fetch(`/api/gw${path}`, {\n method,\n headers: body !== undefined ? { \"content-type\": \"application/json\" } : {},\n body: body !== undefined ? JSON.stringify(body) : undefined,\n });\n } catch (e) {\n return { ok: false, status: 0, data: null, error: (e as Error).message };\n }\n const text = await res.text();\n let data: T | null = null;\n try {\n data = text ? (JSON.parse(text) as T) : null;\n } catch {\n data = null;\n }\n if (!res.ok) {\n const err = (data as { error?: string } | null)?.error ?? `request failed (${res.status})`;\n return { ok: false, status: res.status, data, error: err };\n }\n return { ok: true, status: res.status, data };\n}\n\nexport const adminApi = {\n providers: () => api<{ providers: ProviderSnapshot[] }>(\"GET\", \"/admin/providers\"),\n budgets: () => api<{ budgets: BudgetStatus[] }>(\"GET\", \"/admin/budgets\"),\n models: () => api<ModelsPayload>(\"GET\", \"/admin/models\"),\n keys: () => api<Array<{ fingerprint: string; name: string; masked: string }>>(\"GET\", \"/admin/keys\"),\n keysUsage: () => api<{ keys: KeyUsageRow[] }>(\"GET\", \"/admin/keys/usage\"),\n\n setBudget: (body: {\n scope: { type: \"global\" } | { type: \"provider\"; id: string } | { type: \"model\"; id: string } | { type: \"key\"; id: string };\n unit: \"usd\" | \"tokens\";\n limit: number;\n window: \"5h\" | \"24h\" | \"7day\" | \"30day\";\n alert_at?: number;\n note?: string;\n }) => api<ConfigReply>(\"PUT\", \"/admin/budgets\", body),\n clearBudget: (key: string) => api<ConfigReply>(\"DELETE\", `/admin/budgets/${encodeURIComponent(key)}`),\n\n addProvider: (p: {\n id: string;\n format: WireFormat;\n base_url: string;\n api_key?: string;\n free?: boolean;\n auto_models?: boolean;\n service_account?: string;\n }) => api<ConfigReply>(\"POST\", \"/admin/providers\", p),\n editProvider: (id: string, patch: { base_url?: string; format?: WireFormat; name?: string }) =>\n api<ConfigReply>(\"PUT\", `/admin/providers/${encodeURIComponent(id)}`, patch),\n renameProvider: (id: string, newId: string) =>\n api<ConfigReply>(\"PUT\", `/admin/providers/${encodeURIComponent(id)}/rename`, { id: newId }),\n removeProvider: (id: string) => api<ConfigReply>(\"DELETE\", `/admin/providers/${encodeURIComponent(id)}`),\n addKey: (id: string, key: string, name?: string) =>\n api<ConfigReply>(\"POST\", `/admin/providers/${encodeURIComponent(id)}/keys`, { key, name }),\n editKey: (id: string, index: number, patch: { key?: string; name?: string }) =>\n api<ConfigReply>(\"PUT\", `/admin/providers/${encodeURIComponent(id)}/keys/${index}`, patch),\n removeKey: (id: string, index: number) =>\n api<ConfigReply>(\"DELETE\", `/admin/providers/${encodeURIComponent(id)}/keys/${index}`),\n revealKey: (id: string, index: number) =>\n api<{ key: string }>(\"GET\", `/admin/providers/${encodeURIComponent(id)}/keys/${index}/reveal`),\n addModel: (id: string, model: string, price?: { price_in?: number; price_out?: number }) =>\n api<ConfigReply>(\"POST\", `/admin/providers/${encodeURIComponent(id)}/models`, { model, ...price }),\n addModels: (id: string, models: string[]) =>\n api<ConfigReply>(\"POST\", `/admin/providers/${encodeURIComponent(id)}/models`, { models }),\n // model id can hold a slash (provider/model); send it as a query param so the\n // proxy's path split doesn't mangle it.\n removeModel: (id: string, model: string) =>\n api<ConfigReply>(\"DELETE\", `/admin/providers/${encodeURIComponent(id)}/models?model=${encodeURIComponent(model)}`),\n clearModels: (id: string) => api<ConfigReply>(\"DELETE\", `/admin/providers/${encodeURIComponent(id)}/models`),\n pricing: () => api<PricingPayload>(\"GET\", \"/admin/pricing\"),\n setModelPrice: (id: string, model: string, price: { price_in?: number | null; price_out?: number | null }) =>\n api<ConfigReply>(\"PUT\", `/admin/providers/${encodeURIComponent(id)}/models/price`, { model, ...price }),\n testProvider: (id: string) => api<PingResult>(\"POST\", `/admin/providers/${encodeURIComponent(id)}/test`),\n testKey: (id: string, index: number) =>\n api<PingResult>(\"POST\", `/admin/providers/${encodeURIComponent(id)}/keys/${index}/test`),\n testModel: (id: string, model: string) =>\n api<{ ok: boolean; status?: number; error?: string }>(\n \"POST\",\n `/admin/providers/${encodeURIComponent(id)}/models/test?model=${encodeURIComponent(model)}`,\n ),\n validateProvider: (b: { format: WireFormat; base_url: string; api_key?: string }) =>\n api<PingResult>(\"POST\", \"/admin/providers/validate\", b),\n // discover: returns the upstream catalog flagged with which ids are in config.\n discoverModels: (id: string) =>\n api<{ ok: boolean; models: Array<{ id: string; added: boolean }> }>(\n \"POST\",\n `/admin/providers/${encodeURIComponent(id)}/connect`,\n ),\n\n reorderKey: (id: string, from: number, to: number) =>\n api<ConfigReply>(\"PUT\", `/admin/providers/${encodeURIComponent(id)}/keys/reorder`, { from, to }),\n toggleKey: (id: string, index: number, enabled: boolean) =>\n api<ConfigReply>(\"PUT\", `/admin/providers/${encodeURIComponent(id)}/keys/${index}/toggle`, { enabled }),\n setProviderStrategy: (id: string, strategy: \"fallback\" | \"round-robin\" | null, sticky?: number) =>\n api<ConfigReply>(\"PUT\", `/admin/providers/${encodeURIComponent(id)}/strategy`, { strategy, sticky }),\n setProviderDisabled: (id: string, disabled: boolean) =>\n api<ConfigReply>(\"PUT\", `/admin/providers/${encodeURIComponent(id)}/disabled`, { disabled }),\n\n setRoute: (\n alias: string,\n body: { target: string[]; model?: string | string[]; strategy?: \"fallback\" | \"round-robin\"; price_in?: number; price_out?: number },\n ) => api<ConfigReply>(\"PUT\", `/admin/routes/${encodeURIComponent(alias)}`, body),\n removeRoute: (alias: string) => api<ConfigReply>(\"DELETE\", `/admin/routes/${encodeURIComponent(alias)}`),\n\n endpoint: () => api<EndpointPayload>(\"GET\", \"/admin/endpoint\"),\n setRtk: (enabled: boolean) => api<ConfigReply>(\"PUT\", \"/admin/endpoint/rtk\", { enabled }),\n setCaveman: (level: InjectLevel) => api<ConfigReply>(\"PUT\", \"/admin/endpoint/caveman\", { level }),\n setPonytail: (level: InjectLevel) => api<ConfigReply>(\"PUT\", \"/admin/endpoint/ponytail\", { level }),\n addServerKey: (key: string, name?: string) => api<ConfigReply>(\"POST\", \"/admin/endpoint/keys\", { key, name }),\n editServerKey: (index: number, name: string) => api<ConfigReply>(\"PUT\", `/admin/endpoint/keys/${index}`, { name }),\n setServerKeyScope: (index: number, body: { models?: string[]; rpm?: number | null; expires?: number | null }) =>\n api<ConfigReply>(\"PUT\", `/admin/endpoint/keys/${index}/scope`, body),\n removeServerKey: (index: number) => api<ConfigReply>(\"DELETE\", `/admin/endpoint/keys/${index}`),\n revealServerKey: (index: number) => api<{ key: string }>(\"GET\", `/admin/endpoint/keys/${index}/reveal`),\n\n setHeadroom: (patch: { enabled?: boolean; url?: string; compress_user_messages?: boolean }) =>\n api<ConfigReply>(\"PUT\", \"/admin/endpoint/headroom\", patch),\n headroomStatus: () => api<HeadroomStatusReply>(\"GET\", \"/admin/headroom/status\"),\n headroomStart: () => api<{ success?: boolean; pid?: number; alreadyRunning?: boolean }>(\"POST\", \"/admin/headroom/start\"),\n headroomStop: () => api<{ stopped: boolean; reason?: string; pid?: number }>(\"POST\", \"/admin/headroom/stop\"),\n\n putConfig: (text: string) => api<{ ok: boolean }>(\"PUT\", \"/admin/config\", { text }),\n\n version: () => api<{ current: string; latest: string | null; updateAvailable: boolean }>(\"GET\", \"/admin/version\"),\n shutdown: () => api<{ ok: boolean; message: string }>(\"POST\", \"/admin/shutdown\"),\n};\n\n// Local CLI-tool detection/auto-config. These hit the dashboard's OWN server\n// routes (/api/cli-detect/*), not the gateway proxy — they read/write the tool's\n// config file on this machine. Session-gated by middleware like everything else.\nexport interface CliStatus {\n auto: boolean;\n installed: boolean;\n configured?: boolean;\n path?: string;\n baseUrl?: string | null;\n models?: string[];\n activeModel?: string | null;\n // claude returns its three slot defaults instead of a flat list\n modelSlots?: { opus?: string | null; sonnet?: string | null; haiku?: string | null };\n}\n\nasync function appApi<T>(method: string, url: string, body?: unknown): Promise<ApiResult<T>> {\n let res: Response;\n try {\n res = await fetch(url, {\n method,\n headers: body !== undefined ? { \"content-type\": \"application/json\" } : {},\n body: body !== undefined ? JSON.stringify(body) : undefined,\n });\n } catch (e) {\n return { ok: false, status: 0, data: null, error: (e as Error).message };\n }\n const text = await res.text();\n const data = text ? (JSON.parse(text) as T) : null;\n if (!res.ok) {\n const err = (data as { error?: string } | null)?.error ?? `request failed (${res.status})`;\n return { ok: false, status: res.status, data, error: err };\n }\n return { ok: true, status: res.status, data };\n}\n\n/** Admin account actions that hit the dashboard's OWN routes (not the gw proxy). */\nexport const account = {\n changePassword: (current: string, next: string) =>\n appApi<{ ok: boolean }>(\"POST\", \"/api/password\", { current, next }),\n};\n\nexport const cliConfig = {\n status: (tool: string) => appApi<CliStatus>(\"GET\", `/api/cli-detect/${encodeURIComponent(tool)}`),\n apply: (tool: string, body: { base: string; key?: string; models?: string[] | Record<string, string>; active?: string }) =>\n appApi<{ success?: boolean; path?: string }>(\"POST\", `/api/cli-detect/${encodeURIComponent(tool)}`, body),\n reset: (tool: string) => appApi<{ success?: boolean }>(\"DELETE\", `/api/cli-detect/${encodeURIComponent(tool)}`),\n};\n","\"use client\";\n\nimport { Button } from \"@/components/Button\";\nimport { Icon } from \"@/components/Icon\";\n\ninterface ConfirmModalProps {\n title: string;\n message: string;\n confirmLabel?: string;\n onConfirm: () => void;\n onCancel: () => void;\n busy?: boolean;\n}\n\nexport function ConfirmModal({ title, message, confirmLabel = \"Delete\", onConfirm, onCancel, busy }: ConfirmModalProps) {\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/60 p-6\" onClick={onCancel}>\n <div\n className=\"w-full max-w-sm rounded-brand-lg border border-border bg-surface p-5 shadow-elevated\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"mb-2 flex items-center gap-2\">\n <span className=\"flex h-7 w-7 items-center justify-center rounded-full bg-danger/10 text-danger\">\n <Icon name=\"warning\" size={16} />\n </span>\n <h2 className=\"text-[15px] font-semibold text-text\">{title}</h2>\n </div>\n <p className=\"mb-4 text-[12.5px] text-text-muted\">{message}</p>\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"ghost\" onClick={onCancel}>Cancel</Button>\n <Button variant=\"danger\" disabled={busy} onClick={onConfirm}>{confirmLabel}</Button>\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport Link from \"next/link\";\nimport { usePathname, useRouter } from \"next/navigation\";\nimport { Icon } from \"./Icon\";\n\n// Floating icon-rail (user's preferred chrome), carrying aigetwey's IA: Endpoint\n// is the landing, routing lives in Combos, and operational pages sit below a\n// divider. Labels surface as hover tooltips (data-label).\ntype NavItem = { href: string; label: string; icon: string };\n\nconst MAIN: NavItem[] = [\n { href: \"/\", label: \"Endpoint & Key\", icon: \"api\" },\n { href: \"/providers\", label: \"Providers\", icon: \"dns\" },\n { href: \"/combos\", label: \"Combos\", icon: \"layers\" },\n { href: \"/usage\", label: \"Usage\", icon: \"bar_chart\" },\n { href: \"/quota\", label: \"Budgets\", icon: \"data_usage\" },\n { href: \"/tools\", label: \"CLI Tools\", icon: \"terminal\" },\n];\n\nconst SYSTEM: NavItem[] = [\n { href: \"/console\", label: \"Server Console\", icon: \"terminal\" },\n { href: \"/config\", label: \"Settings\", icon: \"settings\" },\n];\n\nexport function Rail() {\n const path = usePathname();\n const router = useRouter();\n\n async function logout() {\n await fetch(\"/api/logout\", { method: \"POST\" });\n router.replace(\"/login\");\n router.refresh();\n }\n\n // Endpoint owns both \"/\" (landing) and \"/endpoint\"; others match the segment\n // and its sub-routes (e.g. /providers/[id]).\n const isActive = (href: string) =>\n href === \"/\"\n ? path === \"/\" || path.startsWith(\"/endpoint\")\n : path === href || path.startsWith(`${href}/`);\n\n const link = (item: NavItem) => {\n const active = isActive(item.href);\n return (\n <Link\n key={item.href}\n href={item.href}\n data-label={item.label}\n className={`rail-icon${active ? \" rail-icon-active\" : \"\"}`}\n aria-label={item.label}\n >\n <Icon name={item.icon} size={20} fill={active} />\n </Link>\n );\n };\n\n return (\n <>\n <Link href=\"/\" className=\"rail-brand\" aria-label=\"aigetwey\">\n {/* \"a»\" mark — ink on the lime tile (CSS provides the tile) */}\n <svg viewBox=\"0 0 512 512\" width=\"26\" height=\"26\" aria-hidden>\n <text x=\"120\" y=\"338\" fontFamily=\"ui-sans-serif, Arial, sans-serif\" fontSize=\"260\" fontWeight=\"800\" textAnchor=\"middle\" fill=\"#14140f\">a</text>\n <g fill=\"none\" stroke=\"#14140f\" strokeWidth=\"34\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"276,182 352,256 276,330\" />\n <polyline points=\"346,182 422,256 346,330\" />\n </g>\n </svg>\n </Link>\n\n <nav className=\"flex flex-col items-center gap-3\">\n {MAIN.map(link)}\n <div className=\"rail-divider\" />\n {SYSTEM.map(link)}\n </nav>\n\n <button onClick={logout} data-label=\"Disconnect\" className=\"rail-icon\" aria-label=\"Disconnect\">\n <Icon name=\"logout\" size={19} />\n </button>\n </>\n );\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { usePathname } from \"next/navigation\";\nimport { Icon } from \"./Icon\";\nimport { useTheme } from \"./ThemeProvider\";\nimport { ConfirmModal } from \"./ConfirmModal\";\nimport { adminApi } from \"@/lib/client\";\n\nconst LABELS: Record<string, string> = {\n \"\": \"Endpoint & Key\",\n endpoint: \"Endpoint & Key\",\n providers: \"Providers\",\n combos: \"Combos\",\n usage: \"Usage\",\n quota: \"Budgets\",\n tools: \"CLI Tools\",\n console: \"Server Console\",\n config: \"Settings\",\n};\n\nfunction CopyUpdateCmd({ version }: { version: string }) {\n const [copied, setCopied] = useState(false);\n const cmd = `npm install -g aigetwey@${version}`;\n return (\n <button\n onClick={() => { void navigator.clipboard.writeText(cmd).then(() => { setCopied(true); setTimeout(() => setCopied(false), 1800); }); }}\n className=\"flex h-6 w-6 items-center justify-center rounded-full text-warning/70 transition-colors hover:bg-warning/10 hover:text-warning\"\n title={`Copy: ${cmd}`}\n >\n <Icon name={copied ? \"check\" : \"content_copy\"} size={13} />\n </button>\n );\n}\n\nexport function TopBar() {\n const path = usePathname();\n const { theme, toggle } = useTheme();\n const seg = path === \"/\" ? \"\" : (path.split(\"/\")[1] ?? \"\");\n const current = LABELS[seg] ?? seg;\n\n const [version, setVersion] = useState<{ current: string; latest: string | null; updateAvailable: boolean } | null>(null);\n const [confirmShutdown, setConfirmShutdown] = useState(false);\n const [stopped, setStopped] = useState(false);\n const [busy, setBusy] = useState(false);\n\n // version + update check on mount, via aigetwey's sidebar npm poll.\n useEffect(() => {\n void adminApi.version().then((r) => {\n if (r.ok && r.data) setVersion(r.data);\n });\n }, []);\n\n async function doShutdown() {\n setBusy(true);\n await adminApi.shutdown();\n // the gateway exits ~300ms after replying; reflect it in the UI.\n setStopped(true);\n setConfirmShutdown(false);\n setBusy(false);\n }\n\n return (\n <header className=\"console-topbar\">\n <div className=\"flex items-center gap-2 text-[13px]\">\n <span className=\"text-text-subtle\">aigetwey</span>\n <span className=\"text-text-subtle\">/</span>\n <span className=\"font-medium text-text\">{current}</span>\n </div>\n\n <div className=\"ml-auto flex items-center gap-2.5\">\n {version && (\n version.updateAvailable ? (\n <div className=\"flex items-center gap-1\">\n <a\n href=\"https://github.com/xk1ko/aigetwey/releases\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex items-center gap-1.5 rounded-full border border-warning/30 bg-warning/10 px-2.5 py-1 text-[11px] font-medium text-warning transition-colors hover:bg-warning/20\"\n title={`Update available — v${version.latest} is out (you have v${version.current})`}\n >\n <Icon name=\"arrow_upward\" size={12} />\n v{version.latest} available\n </a>\n <CopyUpdateCmd version={version.latest!} />\n </div>\n ) : (\n <span className=\"text-[11px] text-text-subtle\" title=\"You're on the latest version\">\n v{version.current}\n </span>\n )\n )}\n\n <button\n onClick={toggle}\n className=\"flex h-8 w-8 items-center justify-center rounded-full text-text-subtle transition-colors hover:text-text\"\n aria-label=\"Toggle theme\"\n title={theme === \"dark\" ? \"Switch to light mode\" : \"Switch to dark mode\"}\n >\n <Icon name={theme === \"dark\" ? \"light_mode\" : \"dark_mode\"} size={18} />\n </button>\n\n <button\n onClick={() => setConfirmShutdown(true)}\n className=\"flex h-8 w-8 items-center justify-center rounded-full text-text-subtle transition-colors hover:text-danger\"\n aria-label=\"Shut down gateway\"\n title=\"Shut down the gateway\"\n >\n <Icon name=\"power_settings_new\" size={18} />\n </button>\n\n <div className=\"flex items-center gap-2 rounded-full border border-border bg-surface py-1 pl-1 pr-3\">\n <span className=\"flex h-6 w-6 items-center justify-center rounded-full bg-accent text-[11px] font-bold text-accent-ink\">\n A\n </span>\n <span className=\"text-[12px] text-text-muted\">admin</span>\n </div>\n </div>\n\n {confirmShutdown && (\n <ConfirmModal\n title=\"Shut down gateway?\"\n message=\"The gateway process will stop and all requests will fail until you restart it (run.sh). The dashboard stays up but can't reach the gateway.\"\n confirmLabel=\"Shut down\"\n busy={busy}\n onConfirm={doShutdown}\n onCancel={() => setConfirmShutdown(false)}\n />\n )}\n\n {stopped && (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/70 p-6\">\n <div className=\"w-full max-w-sm rounded-brand-lg border border-border bg-surface p-5 text-center shadow-elevated\">\n <span className=\"mx-auto mb-2 flex h-9 w-9 items-center justify-center rounded-full bg-danger/10 text-danger\">\n <Icon name=\"power_settings_new\" size={20} />\n </span>\n <h2 className=\"text-[15px] font-semibold text-text\">Gateway stopped</h2>\n <p className=\"mt-1 text-[12.5px] text-text-muted\">\n Restart it with <code className=\"rounded bg-surface-2 px-1\">run.sh</code>, then reload this page.\n </p>\n </div>\n </div>\n )}\n </header>\n );\n}\n"],"names":["InvariantError","Error","constructor","message","options","endsWith","name","DEFAULT_SEGMENT_KEY","NOT_FOUND_SEGMENT_KEY","PAGE_SEGMENT_KEY","addSearchParamsIfPageSegment","computeSelectedLayoutSegment","getSegmentValue","getSelectedLayoutSegmentPath","isGroupSegment","isParallelRouteSegment","segment","Array","isArray","startsWith","searchParams","isPageSegment","includes","stringifiedQuery","JSON","stringify","segments","parallelRouteKey","length","rawSegment","tree","first","segmentPath","node","parallelRoutes","children","Object","values","segmentValue","push","createPromiseWithResolvers","resolve","reject","promise","Promise","res","rej","VARIANTS","primary","ghost","danger","Button","variant","className","props","Input","Select","Field","label","hint","api","method","path","body","fetch","headers","undefined","e","ok","status","data","error","text","parse","err","adminApi","providers","budgets","models","keys","keysUsage","setBudget","clearBudget","key","encodeURIComponent","addProvider","p","editProvider","id","patch","renameProvider","newId","removeProvider","addKey","editKey","index","removeKey","revealKey","addModel","model","price","addModels","removeModel","clearModels","pricing","setModelPrice","testProvider","testKey","testModel","validateProvider","b","discoverModels","reorderKey","from","to","toggleKey","enabled","setProviderStrategy","strategy","sticky","setProviderDisabled","disabled","setRoute","alias","removeRoute","endpoint","setRtk","setCaveman","level","setPonytail","addServerKey","editServerKey","setServerKeyScope","removeServerKey","revealServerKey","setHeadroom","headroomStatus","headroomStart","headroomStop","putConfig","version","shutdown","appApi","url","account","changePassword","current","next","cliConfig","tool","apply","reset","ConfirmModal","title","confirmLabel","onConfirm","onCancel","busy","onClick","stopPropagation","size","MAIN","href","icon","SYSTEM","Rail","router","logout","replace","refresh","isActive","link","item","active","fill","viewBox","width","height","x","y","fontFamily","fontSize","fontWeight","textAnchor","stroke","strokeWidth","strokeLinecap","strokeLinejoin","points","map","LABELS","combos","usage","quota","tools","console","config","CopyUpdateCmd","copied","setCopied","cmd","navigator","clipboard","writeText","then","setTimeout","TopBar","theme","toggle","seg","split","setVersion","confirmShutdown","setConfirmShutdown","stopped","setStopped","setBusy","r","doShutdown","updateAvailable","target","rel","latest"],"mappings":"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","ignoreList":[0,1,2]}
@@ -1,6 +1,6 @@
1
1
  module.exports=[63681,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={RequestCookies:function(){return f.RequestCookies},ResponseCookies:function(){return f.ResponseCookies},stringifyCookie:function(){return f.stringifyCookie}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(36226)},51409,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ReflectAdapter",{enumerable:!0,get:function(){return d}});class d{static get(a,b,c){let d=Reflect.get(a,b,c);return"function"==typeof d?d.bind(a):d}static set(a,b,c,d){return Reflect.set(a,b,c,d)}static has(a,b){return Reflect.has(a,b)}static deleteProperty(a,b){return Reflect.deleteProperty(a,b)}}},4712,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={ActionDidNotRevalidate:function(){return f},ActionDidRevalidateDynamicOnly:function(){return h},ActionDidRevalidateStaticAndDynamic:function(){return g}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=0,g=1,h=2},14896,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={MutableRequestCookiesAdapter:function(){return o},ReadonlyRequestCookiesError:function(){return j},RequestCookiesAdapter:function(){return k},appendMutableCookies:function(){return n},areCookiesMutableInCurrentPhase:function(){return q},createCookiesWithMutableAccessCheck:function(){return p},getModifiedCookieValues:function(){return m},responseCookiesToRequestCookies:function(){return s}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(63681),g=a.r(51409),h=a.r(56704),i=a.r(4712);class j extends Error{constructor(){super("Cookies can only be modified in a Server Action or Route Handler. Read more: https://nextjs.org/docs/app/api-reference/functions/cookies#options")}static callable(){throw new j}}class k{static seal(a){return new Proxy(a,{get(a,b,c){switch(b){case"clear":case"delete":case"set":return j.callable;default:return g.ReflectAdapter.get(a,b,c)}}})}}let l=Symbol.for("next.mutated.cookies");function m(a){let b=a[l];return b&&Array.isArray(b)&&0!==b.length?b:[]}function n(a,b){let c=m(b);if(0===c.length)return!1;let d=new f.ResponseCookies(a),e=d.getAll();for(let a of c)d.set(a);for(let a of e)d.set(a);return!0}class o{static wrap(a,b){let c=new f.ResponseCookies(new Headers);for(let b of a.getAll())c.set(b);let d=[],e=new Set,j=()=>{let a=h.workAsyncStorage.getStore();if(a&&(a.pathWasRevalidated=i.ActionDidRevalidateStaticAndDynamic),d=c.getAll().filter(a=>e.has(a.name)),b){let a=[];for(let b of d){let c=new f.ResponseCookies(new Headers);c.set(b),a.push(c.toString())}b(a)}},k=new Proxy(c,{get(a,b,c){switch(b){case l:return d;case"delete":return function(...b){e.add("string"==typeof b[0]?b[0]:b[0].name);try{return a.delete(...b),k}finally{j()}};case"set":return function(...b){e.add("string"==typeof b[0]?b[0]:b[0].name);try{return a.set(...b),k}finally{j()}};default:return g.ReflectAdapter.get(a,b,c)}}});return k}}function p(a){let b=new Proxy(a.mutableCookies,{get(c,d,e){switch(d){case"delete":return function(...d){return r(a,"cookies().delete"),c.delete(...d),b};case"set":return function(...d){return r(a,"cookies().set"),c.set(...d),b};default:return g.ReflectAdapter.get(c,d,e)}}});return b}function q(a){return"action"===a.phase}function r(a,b){if(!q(a))throw new j}function s(a){let b=new f.RequestCookies(new Headers);for(let c of a.getAll())b.set(c);return b}},96556,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={DynamicServerError:function(){return g},isDynamicServerError:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f="DYNAMIC_SERVER_USAGE";class g extends Error{constructor(a){super(`Dynamic server usage: ${a}`),this.description=a,this.digest=f}}function h(a){return"object"==typeof a&&null!==a&&"digest"in a&&"string"==typeof a.digest&&a.digest===f}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},60312,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={StaticGenBailoutError:function(){return g},isStaticGenBailoutError:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f="NEXT_STATIC_GEN_BAILOUT";class g extends Error{constructor(...a){super(...a),this.code=f}}function h(a){return"object"==typeof a&&null!==a&&"code"in a&&a.code===f}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},28340,(a,b,c)=>{"use strict";function d(){let a,b,c=new Promise((c,d)=>{a=c,b=d});return{resolve:a,reject:b,promise:c}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"createPromiseWithResolvers",{enumerable:!0,get:function(){return d}})},31382,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d,e={RenderStage:function(){return i},StagedRenderingController:function(){return j}};for(var f in e)Object.defineProperty(c,f,{enumerable:!0,get:e[f]});let g=a.r(50640),h=a.r(28340);var i=((d={})[d.Before=1]="Before",d[d.EarlyStatic=2]="EarlyStatic",d[d.Static=3]="Static",d[d.EarlyRuntime=4]="EarlyRuntime",d[d.Runtime=5]="Runtime",d[d.Dynamic=6]="Dynamic",d[d.Abandoned=7]="Abandoned",d);class j{constructor(a,b,c){this.abortSignal=a,this.abandonController=b,this.shouldTrackSyncIO=c,this.currentStage=1,this.syncInterruptReason=null,this.staticStageEndTime=1/0,this.runtimeStageEndTime=1/0,this.staticStageListeners=[],this.earlyRuntimeStageListeners=[],this.runtimeStageListeners=[],this.dynamicStageListeners=[],this.staticStagePromise=(0,h.createPromiseWithResolvers)(),this.earlyRuntimeStagePromise=(0,h.createPromiseWithResolvers)(),this.runtimeStagePromise=(0,h.createPromiseWithResolvers)(),this.dynamicStagePromise=(0,h.createPromiseWithResolvers)(),a&&a.addEventListener("abort",()=>{let{reason:b}=a;this.staticStagePromise.promise.catch(k),this.staticStagePromise.reject(b),this.earlyRuntimeStagePromise.promise.catch(k),this.earlyRuntimeStagePromise.reject(b),this.runtimeStagePromise.promise.catch(k),this.runtimeStagePromise.reject(b),this.dynamicStagePromise.promise.catch(k),this.dynamicStagePromise.reject(b)},{once:!0}),b&&b.signal.addEventListener("abort",()=>{this.abandonRender()},{once:!0})}onStage(a,b){if(this.currentStage>=a)b();else if(3===a)this.staticStageListeners.push(b);else if(4===a)this.earlyRuntimeStageListeners.push(b);else if(5===a)this.runtimeStageListeners.push(b);else if(6===a)this.dynamicStageListeners.push(b);else throw Object.defineProperty(new g.InvariantError(`Invalid render stage: ${a}`),"__NEXT_ERROR_CODE",{value:"E881",enumerable:!1,configurable:!0})}shouldTrackSyncInterrupt(){if(!this.shouldTrackSyncIO)return!1;switch(this.currentStage){case 1:case 5:case 6:case 7:default:return!1;case 2:case 3:case 4:return!0}}syncInterruptCurrentStageWithReason(a){if(1!==this.currentStage&&7!==this.currentStage){if(this.abandonController)return void this.abandonController.abort();if(this.abortSignal){this.syncInterruptReason=a,this.currentStage=7;return}switch(this.currentStage){case 2:case 3:case 4:this.syncInterruptReason=a,this.advanceStage(6);return;case 5:return}}}getSyncInterruptReason(){return this.syncInterruptReason}getStaticStageEndTime(){return this.staticStageEndTime}getRuntimeStageEndTime(){return this.runtimeStageEndTime}abandonRender(){let{currentStage:a}=this;switch(a){case 2:this.resolveStaticStage();case 3:this.resolveEarlyRuntimeStage();case 4:this.resolveRuntimeStage();case 5:this.currentStage=7;return}}advanceStage(a){if(a<=this.currentStage)return;let b=this.currentStage;if(this.currentStage=a,b<3&&a>=3&&this.resolveStaticStage(),b<4&&a>=4&&this.resolveEarlyRuntimeStage(),b<5&&a>=5&&(this.staticStageEndTime=performance.now()+performance.timeOrigin,this.resolveRuntimeStage()),b<6&&a>=6){this.runtimeStageEndTime=performance.now()+performance.timeOrigin,this.resolveDynamicStage();return}}resolveStaticStage(){let a=this.staticStageListeners;for(let b=0;b<a.length;b++)a[b]();a.length=0,this.staticStagePromise.resolve()}resolveEarlyRuntimeStage(){let a=this.earlyRuntimeStageListeners;for(let b=0;b<a.length;b++)a[b]();a.length=0,this.earlyRuntimeStagePromise.resolve()}resolveRuntimeStage(){let a=this.runtimeStageListeners;for(let b=0;b<a.length;b++)a[b]();a.length=0,this.runtimeStagePromise.resolve()}resolveDynamicStage(){let a=this.dynamicStageListeners;for(let b=0;b<a.length;b++)a[b]();a.length=0,this.dynamicStagePromise.resolve()}getStagePromise(a){switch(a){case 3:return this.staticStagePromise.promise;case 4:return this.earlyRuntimeStagePromise.promise;case 5:return this.runtimeStagePromise.promise;case 6:return this.dynamicStagePromise.promise;default:throw Object.defineProperty(new g.InvariantError(`Invalid render stage: ${a}`),"__NEXT_ERROR_CODE",{value:"E881",enumerable:!1,configurable:!0})}}waitForStage(a){return this.getStagePromise(a)}delayUntilStage(a,b,c){var d,e,f;let g,h=(d=this.getStagePromise(a),e=b,f=c,g=new Promise((a,b)=>{d.then(a.bind(null,f),b)}),void 0!==e&&(g.displayName=e),g);return this.abortSignal&&h.catch(k),h}}function k(){}},13091,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={delayUntilRuntimeStage:function(){return o},getRuntimeStage:function(){return n},isHangingPromiseRejectionError:function(){return g},makeDevtoolsIOAwarePromise:function(){return m},makeHangingPromise:function(){return k}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(31382);function g(a){return"object"==typeof a&&null!==a&&"digest"in a&&a.digest===h}let h="HANGING_PROMISE_REJECTION";class i extends Error{constructor(a,b){super(`During prerendering, ${b} rejects when the prerender is complete. Typically these errors are handled by React but if you move ${b} to a different context by using \`setTimeout\`, \`after\`, or similar functions you may observe this error and you should handle it in that context. This occurred at route "${a}".`),this.route=a,this.expression=b,this.digest=h}}let j=new WeakMap;function k(a,b,c){if(a.aborted)return Promise.reject(new i(b,c));{let d=new Promise((d,e)=>{let f=e.bind(null,new i(b,c)),g=j.get(a);if(g)g.push(f);else{let b=[f];j.set(a,b),a.addEventListener("abort",()=>{for(let a=0;a<b.length;a++)b[a]()},{once:!0})}});return d.catch(l),d}}function l(){}function m(a,b,c){return b.stagedRendering?b.stagedRendering.delayUntilStage(c,void 0,a):new Promise(b=>{setTimeout(()=>{b(a)},0)})}function n(a){return a.currentStage===f.RenderStage.EarlyStatic||a.currentStage===f.RenderStage.EarlyRuntime?f.RenderStage.EarlyRuntime:f.RenderStage.Runtime}function o(a,b){let{stagedRendering:c}=a;return c?c.waitForStage(n(c)).then(()=>b):b}},17491,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={METADATA_BOUNDARY_NAME:function(){return f},OUTLET_BOUNDARY_NAME:function(){return h},ROOT_LAYOUT_BOUNDARY_NAME:function(){return i},VIEWPORT_BOUNDARY_NAME:function(){return g}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f="__next_metadata_boundary__",g="__next_viewport_boundary__",h="__next_outlet_boundary__",i="__next_root_layout_boundary__"},61933,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={atLeastOneTask:function(){return h},scheduleImmediate:function(){return g},scheduleOnNextTick:function(){return f},waitAtLeastOneReactRenderTask:function(){return i}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a=>{Promise.resolve().then(()=>{process.nextTick(a)})},g=a=>{setImmediate(a)};function h(){return new Promise(a=>g(a))}function i(){return new Promise(a=>setImmediate(a))}},49640,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={BailoutToCSRError:function(){return g},isBailoutToCSRError:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f="BAILOUT_TO_CLIENT_SIDE_RENDERING";class g extends Error{constructor(a){super(`Bail out to client-side rendering: ${a}`),this.reason=a,this.digest=f}}function h(a){return"object"==typeof a&&null!==a&&"digest"in a&&a.digest===f}},99195,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"INSTANT_VALIDATION_BOUNDARY_NAME",{enumerable:!0,get:function(){return d}});let d="__next_instant_validation_boundary__"},60384,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d,e,f,g={DynamicHoleKind:function(){return $},Postpone:function(){return D},PreludeState:function(){return af},abortAndThrowOnSynchronousRequestDataAccess:function(){return C},abortOnSynchronousPlatformIOAccess:function(){return B},accessedDynamicData:function(){return L},annotateDynamicAccess:function(){return Q},consumeDynamicAccess:function(){return M},createDynamicTrackingState:function(){return u},createDynamicValidationState:function(){return v},createHangingInputAbortSignal:function(){return P},createInstantValidationState:function(){return _},createRenderInBrowserAbortSignal:function(){return O},formatDynamicAPIAccesses:function(){return N},getFirstDynamicReason:function(){return w},getNavigationDisallowedDynamicReasons:function(){return aj},getStaticShellDisallowedDynamicReasons:function(){return ai},isDynamicPostpone:function(){return G},isPrerenderInterruptedError:function(){return K},logDisallowedDynamicError:function(){return ag},markCurrentScopeAsDynamic:function(){return x},postponeWithTracking:function(){return E},throwIfDisallowedDynamic:function(){return ah},throwToInterruptStaticGeneration:function(){return y},trackAllowedDynamicAccess:function(){return Z},trackDynamicDataInDynamicRender:function(){return z},trackDynamicHoleInNavigation:function(){return aa},trackDynamicHoleInRuntimeShell:function(){return ac},trackDynamicHoleInStaticShell:function(){return ad},trackThrownErrorInNavigation:function(){return ab},useDynamicRouteParams:function(){return R},useDynamicSearchParams:function(){return S}};for(var h in g)Object.defineProperty(c,h,{enumerable:!0,get:g[h]});let i=(d=a.r(717))&&d.__esModule?d:{default:d},j=a.r(96556),k=a.r(60312),l=a.r(32319),m=a.r(56704),n=a.r(13091),o=a.r(17491),p=a.r(61933),q=a.r(49640),r=a.r(50640),s=a.r(99195),t="function"==typeof i.default.unstable_postpone;function u(a){return{isDebugDynamicAccesses:a,dynamicAccesses:[],syncDynamicErrorWithStack:null}}function v(){return{hasSuspenseAboveBody:!1,hasDynamicMetadata:!1,dynamicMetadata:null,hasDynamicViewport:!1,hasAllowedDynamic:!1,dynamicErrors:[]}}function w(a){var b;return null==(b=a.dynamicAccesses[0])?void 0:b.expression}function x(a,b,c){if(b)switch(b.type){case"cache":case"unstable-cache":case"private-cache":return}if(!a.forceDynamic&&!a.forceStatic){if(a.dynamicShouldError)throw Object.defineProperty(new k.StaticGenBailoutError(`Route ${a.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`${c}\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E553",enumerable:!1,configurable:!0});if(b)switch(b.type){case"prerender-ppr":return E(a.route,c,b.dynamicTracking);case"prerender-legacy":b.revalidate=0;let d=Object.defineProperty(new j.DynamicServerError(`Route ${a.route} couldn't be rendered statically because it used ${c}. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`),"__NEXT_ERROR_CODE",{value:"E550",enumerable:!1,configurable:!0});throw a.dynamicUsageDescription=c,a.dynamicUsageStack=d.stack,d}}}function y(a,b,c){let d=Object.defineProperty(new j.DynamicServerError(`Route ${b.route} couldn't be rendered statically because it used \`${a}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`),"__NEXT_ERROR_CODE",{value:"E558",enumerable:!1,configurable:!0});throw c.revalidate=0,b.dynamicUsageDescription=a,b.dynamicUsageStack=d.stack,d}function z(a){switch(a.type){case"cache":case"unstable-cache":case"private-cache":return}}function A(a,b,c){let d=J(`Route ${a} needs to bail out of prerendering at this point because it used ${b}.`);c.controller.abort(d);let e=c.dynamicTracking;e&&e.dynamicAccesses.push({stack:e.isDebugDynamicAccesses?Error().stack:void 0,expression:b})}function B(a,b,c,d){let e=d.dynamicTracking;A(a,b,d),e&&null===e.syncDynamicErrorWithStack&&(e.syncDynamicErrorWithStack=c)}function C(a,b,c,d){if(!1===d.controller.signal.aborted){A(a,b,d);let e=d.dynamicTracking;e&&null===e.syncDynamicErrorWithStack&&(e.syncDynamicErrorWithStack=c)}throw J(`Route ${a} needs to bail out of prerendering at this point because it used ${b}.`)}function D({reason:a,route:b}){let c=l.workUnitAsyncStorage.getStore();E(b,a,c&&"prerender-ppr"===c.type?c.dynamicTracking:null)}function E(a,b,c){(function(){if(!t)throw Object.defineProperty(Error("Invariant: React.unstable_postpone is not defined. This suggests the wrong version of React was loaded. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E224",enumerable:!1,configurable:!0})})(),c&&c.dynamicAccesses.push({stack:c.isDebugDynamicAccesses?Error().stack:void 0,expression:b}),i.default.unstable_postpone(F(a,b))}function F(a,b){return`Route ${a} needs to bail out of prerendering at this point because it used ${b}. React throws this special object to indicate where. It should not be caught by your own try/catch. Learn more: https://nextjs.org/docs/messages/ppr-caught-error`}function G(a){return"object"==typeof a&&null!==a&&"string"==typeof a.message&&H(a.message)}function H(a){return a.includes("needs to bail out of prerendering at this point because it used")&&a.includes("Learn more: https://nextjs.org/docs/messages/ppr-caught-error")}if(!1===H(F("%%%","^^^")))throw Object.defineProperty(Error("Invariant: isDynamicPostpone misidentified a postpone reason. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E296",enumerable:!1,configurable:!0});let I="NEXT_PRERENDER_INTERRUPTED";function J(a){let b=Object.defineProperty(Error(a),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return b.digest=I,b}function K(a){return"object"==typeof a&&null!==a&&a.digest===I&&"name"in a&&"message"in a&&a instanceof Error}function L(a){return a.length>0}function M(a,b){return a.dynamicAccesses.push(...b.dynamicAccesses),a.dynamicAccesses}function N(a){return a.filter(a=>"string"==typeof a.stack&&a.stack.length>0).map(({expression:a,stack:b})=>(b=b.split("\n").slice(4).filter(a=>!(a.includes("node_modules/next/")||a.includes(" (<anonymous>)")||a.includes(" (node:"))).join("\n"),`Dynamic API Usage Debug - ${a}:
2
2
  ${b}`))}function O(){let a=new AbortController;return a.abort(Object.defineProperty(new q.BailoutToCSRError("Render in Browser"),"__NEXT_ERROR_CODE",{value:"E721",enumerable:!1,configurable:!0})),a.signal}function P(a){switch(a.type){case"prerender":case"prerender-runtime":let b=new AbortController;if(a.cacheSignal)a.cacheSignal.inputReady().then(()=>{b.abort()});else if("prerender-runtime"===a.type&&a.stagedRendering){let{stagedRendering:c}=a;c.waitForStage((0,n.getRuntimeStage)(c)).then(()=>(0,p.scheduleOnNextTick)(()=>b.abort()))}else(0,p.scheduleOnNextTick)(()=>b.abort());return b.signal;case"prerender-client":case"validation-client":case"prerender-ppr":case"prerender-legacy":case"request":case"cache":case"private-cache":case"unstable-cache":case"generate-static-params":return}}function Q(a,b){let c=b.dynamicTracking;c&&c.dynamicAccesses.push({stack:c.isDebugDynamicAccesses?Error().stack:void 0,expression:a})}function R(a){let b=m.workAsyncStorage.getStore(),c=l.workUnitAsyncStorage.getStore();if(b&&c)switch(c.type){case"prerender-client":case"prerender":{let d=c.fallbackRouteParams;d&&d.size>0&&i.default.use((0,n.makeHangingPromise)(c.renderSignal,b.route,a));break}case"prerender-ppr":{let d=c.fallbackRouteParams;if(d&&d.size>0)return E(b.route,a,c.dynamicTracking);break}case"validation-client":case"prerender-legacy":case"request":case"unstable-cache":break;case"prerender-runtime":throw Object.defineProperty(new r.InvariantError(`\`${a}\` was called during a runtime prerender. Next.js should be preventing ${a} from being included in server components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E771",enumerable:!1,configurable:!0});case"cache":case"private-cache":throw Object.defineProperty(new r.InvariantError(`\`${a}\` was called inside a cache scope. Next.js should be preventing ${a} from being included in server components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E745",enumerable:!1,configurable:!0});case"generate-static-params":throw Object.defineProperty(new r.InvariantError(`\`${a}\` was called in \`generateStaticParams\`. Next.js should be preventing ${a} from being included in server component files statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1130",enumerable:!1,configurable:!0})}}function S(a){let b=m.workAsyncStorage.getStore(),c=l.workUnitAsyncStorage.getStore();if(b)switch(!c&&(0,l.throwForMissingRequestStore)(a),c.type){case"validation-client":case"request":return;case"prerender-client":i.default.use((0,n.makeHangingPromise)(c.renderSignal,b.route,a));break;case"prerender-legacy":case"prerender-ppr":if(b.forceStatic)return;throw Object.defineProperty(new q.BailoutToCSRError(a),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});case"prerender":case"prerender-runtime":throw Object.defineProperty(new r.InvariantError(`\`${a}\` was called from a Server Component. Next.js should be preventing ${a} from being included in server components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E795",enumerable:!1,configurable:!0});case"cache":case"unstable-cache":case"private-cache":throw Object.defineProperty(new r.InvariantError(`\`${a}\` was called inside a cache scope. Next.js should be preventing ${a} from being included in server components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E745",enumerable:!1,configurable:!0});case"generate-static-params":throw Object.defineProperty(new r.InvariantError(`\`${a}\` was called in \`generateStaticParams\`. Next.js should be preventing ${a} from being included in server component files statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1130",enumerable:!1,configurable:!0})}}let T=/\n\s+at Suspense \(<anonymous>\)/,U=RegExp(`\\n\\s+at Suspense \\(<anonymous>\\)(?:(?!\\n\\s+at (?:body|div|main|section|article|aside|header|footer|nav|form|p|span|h1|h2|h3|h4|h5|h6) \\(<anonymous>\\))[\\s\\S])*?\\n\\s+at ${o.ROOT_LAYOUT_BOUNDARY_NAME} \\([^\\n]*\\)`),V=RegExp(`\\n\\s+at ${o.METADATA_BOUNDARY_NAME}[\\n\\s]`),W=RegExp(`\\n\\s+at ${o.VIEWPORT_BOUNDARY_NAME}[\\n\\s]`),X=RegExp(`\\n\\s+at ${o.OUTLET_BOUNDARY_NAME}[\\n\\s]`),Y=RegExp(`\\n\\s+at ${s.INSTANT_VALIDATION_BOUNDARY_NAME}[\\n\\s]`);function Z(a,b,c,d){if(!X.test(b)){if(V.test(b)){c.hasDynamicMetadata=!0;return}if(W.test(b)){c.hasDynamicViewport=!0;return}if(U.test(b)){c.hasAllowedDynamic=!0,c.hasSuspenseAboveBody=!0;return}else if(T.test(b)){c.hasAllowedDynamic=!0;return}else{if(d.syncDynamicErrorWithStack)return void c.dynamicErrors.push(d.syncDynamicErrorWithStack);let e=ae(Object.defineProperty(Error(`Route "${a.route}": Uncached data was accessed outside of <Suspense>. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/blocking-route`),"__NEXT_ERROR_CODE",{value:"E1079",enumerable:!1,configurable:!0}),b,null);return void c.dynamicErrors.push(e)}}}var $=((e={})[e.Runtime=1]="Runtime",e[e.Dynamic=2]="Dynamic",e);function _(a){return{hasDynamicMetadata:!1,hasAllowedClientDynamicAboveBoundary:!1,dynamicMetadata:null,hasDynamicViewport:!1,hasAllowedDynamic:!1,dynamicErrors:[],validationPreventingErrors:[],thrownErrorsOutsideBoundary:[],createInstantStack:a}}function aa(a,b,c,d,e,f){if(X.test(b))return;if(V.test(b)){let d=ae(Object.defineProperty(Error(`Route "${a.route}": ${1===e?"Runtime data such as `cookies()`, `headers()`, `params`, or `searchParams` was accessed inside `generateMetadata` or you have file-based metadata such as icons that depend on dynamic params segments.":"Uncached data or `connection()` was accessed inside `generateMetadata`."} Except for this instance, the page would have been entirely prerenderable which may have been the intended behavior. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`),"__NEXT_ERROR_CODE",{value:"E1076",enumerable:!1,configurable:!0}),b,c.createInstantStack);c.dynamicMetadata=d;return}if(W.test(b)){let d=ae(Object.defineProperty(Error(`Route "${a.route}": ${1===e?"Runtime data such as `cookies()`, `headers()`, `params`, or `searchParams` was accessed inside `generateViewport`.":"Uncached data or `connection()` was accessed inside `generateViewport`."} This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`),"__NEXT_ERROR_CODE",{value:"E1086",enumerable:!1,configurable:!0}),b,c.createInstantStack);c.dynamicErrors.push(d);return}let g=Y.exec(b);if(g){let a=T.exec(b);if(a&&a.index<g.index){c.hasAllowedDynamic=!0;return}}else if(f.expectedIds.size===f.renderedIds.size){c.hasAllowedClientDynamicAboveBoundary=!0,c.hasAllowedDynamic=!0;return}else{let d=ae(Object.defineProperty(Error(`Route "${a.route}": Could not validate \`unstable_instant\` because a Client Component in a parent segment prevented the page from rendering.`),"__NEXT_ERROR_CODE",{value:"E1082",enumerable:!1,configurable:!0}),b,c.createInstantStack);c.validationPreventingErrors.push(d);return}if(d.syncDynamicErrorWithStack){let a=d.syncDynamicErrorWithStack;null!==c.createInstantStack&&void 0===a.cause&&(a.cause=c.createInstantStack()),c.dynamicErrors.push(a);return}let h=ae(Object.defineProperty(Error(`Route "${a.route}": ${1===e?"Runtime data such as `cookies()`, `headers()`, `params`, or `searchParams` was accessed outside of `<Suspense>`.":"Uncached data or `connection()` was accessed outside of `<Suspense>`."} This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/blocking-route`),"__NEXT_ERROR_CODE",{value:"E1078",enumerable:!1,configurable:!0}),b,c.createInstantStack);c.dynamicErrors.push(h)}function ab(a,b,c,d){let e=Y.exec(d);if(e){let f=T.exec(d);if(f&&f.index<e.index)return;let g=ae(Object.defineProperty(Error(`Route "${a.route}": Could not validate \`unstable_instant\` because an error prevented the target segment from rendering.`,{cause:c}),"__NEXT_ERROR_CODE",{value:"E1112",enumerable:!1,configurable:!0}),d,null);b.validationPreventingErrors.push(g)}else{let a=ae(Object.defineProperty(Error("An error occurred while attempting to validate instant UI. This error may be preventing the validation from completing.",{cause:c}),"__NEXT_ERROR_CODE",{value:"E1118",enumerable:!1,configurable:!0}),d,null);b.thrownErrorsOutsideBoundary.push(a)}}function ac(a,b,c,d){if(X.test(b))return;if(V.test(b)){c.dynamicMetadata=ae(Object.defineProperty(Error(`Route "${a.route}": Uncached data or \`connection()\` was accessed inside \`generateMetadata\`. Except for this instance, the page would have been entirely prerenderable which may have been the intended behavior. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`),"__NEXT_ERROR_CODE",{value:"E1080",enumerable:!1,configurable:!0}),b,null);return}if(W.test(b)){let d=ae(Object.defineProperty(Error(`Route "${a.route}": Uncached data or \`connection()\` was accessed inside \`generateViewport\`. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`),"__NEXT_ERROR_CODE",{value:"E1077",enumerable:!1,configurable:!0}),b,null);c.dynamicErrors.push(d);return}if(U.test(b)){c.hasAllowedDynamic=!0,c.hasSuspenseAboveBody=!0;return}if(T.test(b)){c.hasAllowedDynamic=!0;return}else if(d.syncDynamicErrorWithStack)return void c.dynamicErrors.push(d.syncDynamicErrorWithStack);let e=ae(Object.defineProperty(Error(`Route "${a.route}": Uncached data or \`connection()\` was accessed outside of \`<Suspense>\`. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/blocking-route`),"__NEXT_ERROR_CODE",{value:"E1084",enumerable:!1,configurable:!0}),b,null);c.dynamicErrors.push(e)}function ad(a,b,c,d){if(!X.test(b)){if(V.test(b)){c.dynamicMetadata=ae(Object.defineProperty(Error(`Route "${a.route}": Runtime data such as \`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` was accessed inside \`generateMetadata\` or you have file-based metadata such as icons that depend on dynamic params segments. Except for this instance, the page would have been entirely prerenderable which may have been the intended behavior. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`),"__NEXT_ERROR_CODE",{value:"E1085",enumerable:!1,configurable:!0}),b,null);return}if(W.test(b)){let d=ae(Object.defineProperty(Error(`Route "${a.route}": Runtime data such as \`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` was accessed inside \`generateViewport\`. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`),"__NEXT_ERROR_CODE",{value:"E1081",enumerable:!1,configurable:!0}),b,null);c.dynamicErrors.push(d);return}if(U.test(b)){c.hasAllowedDynamic=!0,c.hasSuspenseAboveBody=!0;return}else if(T.test(b)){c.hasAllowedDynamic=!0;return}else{if(d.syncDynamicErrorWithStack)return void c.dynamicErrors.push(d.syncDynamicErrorWithStack);let e=ae(Object.defineProperty(Error(`Route "${a.route}": Runtime data such as \`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` was accessed outside of \`<Suspense>\`. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/blocking-route`),"__NEXT_ERROR_CODE",{value:"E1083",enumerable:!1,configurable:!0}),b,null);return void c.dynamicErrors.push(e)}}}function ae(a,b,c){return null!==c&&(a.cause=c()),a.stack=a.name+": "+a.message+b,a}var af=((f={})[f.Full=0]="Full",f[f.Empty=1]="Empty",f[f.Errored=2]="Errored",f);function ag(a,b){console.error(b),console.error(`To get a more detailed stack trace and pinpoint the issue, try one of the following:
3
3
  - Start the app in development mode by running \`next dev\`, then open "${a.route}" in your browser to investigate the error.
4
- - Rerun the production build with \`next build --debug-prerender\` to generate better stack traces.`)}function ah(a,b,c,d){if(d.syncDynamicErrorWithStack)throw ag(a,d.syncDynamicErrorWithStack),new k.StaticGenBailoutError;if(0!==b){if(c.hasSuspenseAboveBody)return;let d=c.dynamicErrors;if(d.length>0){for(let b=0;b<d.length;b++)ag(a,d[b]);throw new k.StaticGenBailoutError}if(c.hasDynamicViewport)throw console.error(`Route "${a.route}" has a \`generateViewport\` that depends on Request data (\`cookies()\`, etc...) or uncached external data (\`fetch(...)\`, etc...) without explicitly allowing fully dynamic rendering. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`),new k.StaticGenBailoutError;if(1===b)throw console.error(`Route "${a.route}" did not produce a static shell and Next.js was unable to determine a reason. This is a bug in Next.js.`),new k.StaticGenBailoutError}else if(!1===c.hasAllowedDynamic&&c.hasDynamicMetadata)throw console.error(`Route "${a.route}" has a \`generateMetadata\` that depends on Request data (\`cookies()\`, etc...) or uncached external data (\`fetch(...)\`, etc...) when the rest of the route does not. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`),new k.StaticGenBailoutError}function ai(a,b,c,d){if(d||c.hasSuspenseAboveBody)return[];if(0!==b){let d=c.dynamicErrors;if(d.length>0)return d;if(1===b)return[Object.defineProperty(new r.InvariantError(`Route "${a.route}" did not produce a static shell and Next.js was unable to determine a reason.`),"__NEXT_ERROR_CODE",{value:"E936",enumerable:!1,configurable:!0})]}else if(!1===c.hasAllowedDynamic&&0===c.dynamicErrors.length&&c.dynamicMetadata)return[c.dynamicMetadata];return[]}function aj(a,b,c,d,e){if(d){let{missingSampleErrors:a}=d;if(a.length>0)return a}let{validationPreventingErrors:f}=c;if(f.length>0)return f;if(e.renderedIds.size<e.expectedIds.size){let{thrownErrorsOutsideBoundary:b,createInstantStack:d}=c;if(0===b.length){let b=`Route "${a.route}": Could not validate \`unstable_instant\` because the target segment was prevented from rendering for an unknown reason.`,c=null!==d?d():Error();return c.name="Error",c.message=b,[c]}if(1===b.length){let c=`Route "${a.route}": Could not validate \`unstable_instant\` because the target segment was prevented from rendering, likely due to the following error.`,e=null!==d?d():Error();return e.name="Error",e.message=c,[e,b[0]]}{let c=`Route "${a.route}": Could not validate \`unstable_instant\` because the target segment was prevented from rendering, likely due to one of the following errors.`,e=null!==d?d():Error();return e.name="Error",e.message=c,[e,...b]}}if(0!==b){let d=c.dynamicErrors;if(d.length>0)return d;if(1===b)return c.hasAllowedClientDynamicAboveBoundary?[]:[Object.defineProperty(new r.InvariantError(`Route "${a.route}" failed to render during instant validation and Next.js was unable to determine a reason.`),"__NEXT_ERROR_CODE",{value:"E1055",enumerable:!1,configurable:!0})]}else{let a=c.dynamicErrors;if(a.length>0)return a;if(!1===c.hasAllowedDynamic&&c.dynamicMetadata)return[c.dynamicMetadata]}return[]}},8018,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"createDedupedByCallsiteServerErrorLoggerDev",{enumerable:!0,get:function(){return i}});let d=function(a){if(a&&a.__esModule)return a;if(null===a||"object"!=typeof a&&"function"!=typeof a)return{default:a};var b=e(void 0);if(b&&b.has(a))return b.get(a);var c={__proto__:null},d=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in a)if("default"!==f&&Object.prototype.hasOwnProperty.call(a,f)){var g=d?Object.getOwnPropertyDescriptor(a,f):null;g&&(g.get||g.set)?Object.defineProperty(c,f,g):c[f]=a[f]}return c.default=a,b&&b.set(a,c),c}(a.r(717));function e(a){if("function"!=typeof WeakMap)return null;var b=new WeakMap,c=new WeakMap;return(e=function(a){return a?c:b})(a)}let f={current:null},g="function"==typeof d.cache?d.cache:a=>a,h=console.warn;function i(a){return function(...b){h(a(...b))}}g(a=>{try{h(f.current)}finally{f.current=null}})},86309,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={isRequestAPICallableInsideAfter:function(){return j},throwForSearchParamsAccessInUseCache:function(){return i},throwWithStaticGenerationBailoutErrorWithDynamicError:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(60312),g=a.r(24725);function h(a,b){throw Object.defineProperty(new f.StaticGenBailoutError(`Route ${a} with \`dynamic = "error"\` couldn't be rendered statically because it used ${b}. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E543",enumerable:!1,configurable:!0})}function i(a,b){let c=Object.defineProperty(Error(`Route ${a.route} used \`searchParams\` inside "use cache". Accessing dynamic request data inside a cache scope is not supported. If you need some search params inside a cached function await \`searchParams\` outside of the cached function and pass only the required search params as arguments to the cached function. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E842",enumerable:!1,configurable:!0});throw Error.captureStackTrace(c,b),a.invalidDynamicUsageError??=c,c}function j(){let a=g.afterTaskAsyncStorage.getStore();return(null==a?void 0:a.rootTaskSpawnPhase)==="action"}},81740,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"cookies",{enumerable:!0,get:function(){return n}});let d=a.r(14896),e=a.r(63681),f=a.r(56704),g=a.r(32319),h=a.r(60384),i=a.r(60312),j=a.r(13091),k=a.r(8018),l=a.r(86309),m=a.r(50640);function n(){let a="cookies",b=f.workAsyncStorage.getStore(),c=g.workUnitAsyncStorage.getStore();if(b){if(c&&"after"===c.phase&&!(0,l.isRequestAPICallableInsideAfter)())throw Object.defineProperty(Error(`Route ${b.route} used \`cookies()\` inside \`after()\`. This is not supported. If you need this data inside an \`after()\` callback, use \`cookies()\` outside of the callback. See more info here: https://nextjs.org/docs/canary/app/api-reference/functions/after`),"__NEXT_ERROR_CODE",{value:"E843",enumerable:!1,configurable:!0});if(b.forceStatic)return p(d.RequestCookiesAdapter.seal(new e.RequestCookies(new Headers({}))));if(b.dynamicShouldError)throw Object.defineProperty(new i.StaticGenBailoutError(`Route ${b.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`cookies()\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E849",enumerable:!1,configurable:!0});if(c)switch(c.type){case"cache":let f=Object.defineProperty(Error(`Route ${b.route} used \`cookies()\` inside "use cache". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`cookies()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E831",enumerable:!1,configurable:!0});throw Error.captureStackTrace(f,n),b.invalidDynamicUsageError??=f,f;case"unstable-cache":throw Object.defineProperty(Error(`Route ${b.route} used \`cookies()\` inside a function cached with \`unstable_cache()\`. Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`cookies()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`),"__NEXT_ERROR_CODE",{value:"E846",enumerable:!1,configurable:!0});case"generate-static-params":throw Object.defineProperty(Error(`Route ${b.route} used \`cookies()\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`),"__NEXT_ERROR_CODE",{value:"E1123",enumerable:!1,configurable:!0});case"prerender":var k=b,q=c;let r=o.get(q);if(r)return r;let s=(0,j.makeHangingPromise)(q.renderSignal,k.route,"`cookies()`");return o.set(q,s),s;case"prerender-client":case"validation-client":let t="`cookies`";throw Object.defineProperty(new m.InvariantError(`${t} must not be used within a Client Component. Next.js should be preventing ${t} from being included in Client Components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1037",enumerable:!1,configurable:!0});case"prerender-ppr":return(0,h.postponeWithTracking)(b.route,a,c.dynamicTracking);case"prerender-legacy":return(0,h.throwToInterruptStaticGeneration)(a,b,c);case"prerender-runtime":return(0,j.delayUntilRuntimeStage)(c,p(c.cookies));case"private-cache":return p(c.cookies);case"request":let u;if((0,h.trackDynamicDataInDynamicRender)(c),u=(0,d.areCookiesMutableInCurrentPhase)(c)?c.userspaceMutableCookies:c.cookies,!c.asyncApiPromises)return p(u);{let a=(0,g.isInEarlyRenderStage)(c);if(u===c.mutableCookies)return a?c.asyncApiPromises.earlyMutableCookies:c.asyncApiPromises.mutableCookies;return a?c.asyncApiPromises.earlyCookies:c.asyncApiPromises.cookies}}}(0,g.throwForMissingRequestStore)(a)}a.r(31382);let o=new WeakMap;function p(a){let b=o.get(a);if(b)return b;let c=Promise.resolve(a);return o.set(a,c),c}(0,k.createDedupedByCallsiteServerErrorLoggerDev)(function(a,b){let c=a?`Route "${a}" `:"This route ";return Object.defineProperty(Error(`${c}used ${b}. \`cookies()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`),"__NEXT_ERROR_CODE",{value:"E830",enumerable:!1,configurable:!0})})},29927,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={HeadersAdapter:function(){return h},ReadonlyHeadersError:function(){return g}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(51409);class g extends Error{constructor(){super("Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers")}static callable(){throw new g}}class h extends Headers{constructor(a){super(),this.headers=new Proxy(a,{get(b,c,d){if("symbol"==typeof c)return f.ReflectAdapter.get(b,c,d);let e=c.toLowerCase(),g=Object.keys(a).find(a=>a.toLowerCase()===e);if(void 0!==g)return f.ReflectAdapter.get(b,g,d)},set(b,c,d,e){if("symbol"==typeof c)return f.ReflectAdapter.set(b,c,d,e);let g=c.toLowerCase(),h=Object.keys(a).find(a=>a.toLowerCase()===g);return f.ReflectAdapter.set(b,h??c,d,e)},has(b,c){if("symbol"==typeof c)return f.ReflectAdapter.has(b,c);let d=c.toLowerCase(),e=Object.keys(a).find(a=>a.toLowerCase()===d);return void 0!==e&&f.ReflectAdapter.has(b,e)},deleteProperty(b,c){if("symbol"==typeof c)return f.ReflectAdapter.deleteProperty(b,c);let d=c.toLowerCase(),e=Object.keys(a).find(a=>a.toLowerCase()===d);return void 0===e||f.ReflectAdapter.deleteProperty(b,e)}})}static seal(a){return new Proxy(a,{get(a,b,c){switch(b){case"append":case"delete":case"set":return g.callable;default:return f.ReflectAdapter.get(a,b,c)}}})}merge(a){return Array.isArray(a)?a.join(", "):a}static from(a){return a instanceof Headers?a:new h(a)}append(a,b){let c=this.headers[a];"string"==typeof c?this.headers[a]=[c,b]:Array.isArray(c)?c.push(b):this.headers[a]=b}delete(a){delete this.headers[a]}get(a){let b=this.headers[a];return void 0!==b?this.merge(b):null}has(a){return void 0!==this.headers[a]}set(a,b){this.headers[a]=b}forEach(a,b){for(let[c,d]of this.entries())a.call(b,d,c,this)}*entries(){for(let a of Object.keys(this.headers)){let b=a.toLowerCase(),c=this.get(b);yield[b,c]}}*keys(){for(let a of Object.keys(this.headers)){let b=a.toLowerCase();yield b}}*values(){for(let a of Object.keys(this.headers)){let b=this.get(a);yield b}}[Symbol.iterator](){return this.entries()}}},35754,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"headers",{enumerable:!0,get:function(){return m}});let d=a.r(29927),e=a.r(56704),f=a.r(32319),g=a.r(60384),h=a.r(60312),i=a.r(13091),j=a.r(8018),k=a.r(86309),l=a.r(50640);function m(){let a="headers",b=e.workAsyncStorage.getStore(),c=f.workUnitAsyncStorage.getStore();if(b){if(c&&"after"===c.phase&&!(0,k.isRequestAPICallableInsideAfter)())throw Object.defineProperty(Error(`Route ${b.route} used \`headers()\` inside \`after()\`. This is not supported. If you need this data inside an \`after()\` callback, use \`headers()\` outside of the callback. See more info here: https://nextjs.org/docs/canary/app/api-reference/functions/after`),"__NEXT_ERROR_CODE",{value:"E839",enumerable:!1,configurable:!0});if(b.forceStatic)return o(d.HeadersAdapter.seal(new Headers({})));if(c)switch(c.type){case"cache":{let a=Object.defineProperty(Error(`Route ${b.route} used \`headers()\` inside "use cache". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`headers()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E833",enumerable:!1,configurable:!0});throw Error.captureStackTrace(a,m),b.invalidDynamicUsageError??=a,a}case"unstable-cache":throw Object.defineProperty(Error(`Route ${b.route} used \`headers()\` inside a function cached with \`unstable_cache()\`. Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`headers()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`),"__NEXT_ERROR_CODE",{value:"E838",enumerable:!1,configurable:!0});case"generate-static-params":throw Object.defineProperty(Error(`Route ${b.route} used \`headers()\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`),"__NEXT_ERROR_CODE",{value:"E1134",enumerable:!1,configurable:!0})}if(b.dynamicShouldError)throw Object.defineProperty(new h.StaticGenBailoutError(`Route ${b.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`headers()\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E828",enumerable:!1,configurable:!0});if(c)switch(c.type){case"prerender":var j=b,p=c;let e=n.get(p);if(e)return e;let q=(0,i.makeHangingPromise)(p.renderSignal,j.route,"`headers()`");return n.set(p,q),q;case"prerender-client":case"validation-client":let r="`headers`";throw Object.defineProperty(new l.InvariantError(`${r} must not be used within a client component. Next.js should be preventing ${r} from being included in client components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1017",enumerable:!1,configurable:!0});case"prerender-ppr":return(0,g.postponeWithTracking)(b.route,a,c.dynamicTracking);case"prerender-legacy":return(0,g.throwToInterruptStaticGeneration)(a,b,c);case"prerender-runtime":return(0,i.delayUntilRuntimeStage)(c,o(c.headers));case"private-cache":return o(c.headers);case"request":if((0,g.trackDynamicDataInDynamicRender)(c),c.asyncApiPromises)return(0,f.isInEarlyRenderStage)(c)?c.asyncApiPromises.earlyHeaders:c.asyncApiPromises.headers;return o(c.headers)}}(0,f.throwForMissingRequestStore)(a)}a.r(31382);let n=new WeakMap;function o(a){let b=n.get(a);if(b)return b;let c=Promise.resolve(a);return n.set(a,c),c}(0,j.createDedupedByCallsiteServerErrorLoggerDev)(function(a,b){let c=a?`Route "${a}" `:"This route ";return Object.defineProperty(Error(`${c}used ${b}. \`headers()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`),"__NEXT_ERROR_CODE",{value:"E836",enumerable:!1,configurable:!0})})},51125,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"draftMode",{enumerable:!0,get:function(){return l}});let d=a.r(32319),e=a.r(56704),f=a.r(60384),g=a.r(8018),h=a.r(60312),i=a.r(96556),j=a.r(50640),k=a.r(13091);function l(){let a="draftMode",b=e.workAsyncStorage.getStore(),c=d.workUnitAsyncStorage.getStore();switch((!b||!c)&&(0,d.throwForMissingRequestStore)(a),c.type){case"prerender-runtime":return(0,k.delayUntilRuntimeStage)(c,m(c.draftMode,b));case"request":return m(c.draftMode,b);case"cache":case"private-cache":case"unstable-cache":let f=(0,d.getDraftModeProviderForCacheScope)(b,c);if(f)return m(f,b);case"prerender":case"prerender-ppr":case"prerender-legacy":return m(null,b);case"prerender-client":case"validation-client":{let a="`draftMode`";throw Object.defineProperty(new j.InvariantError(`${a} must not be used within a Client Component. Next.js should be preventing ${a} from being included in Client Components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1046",enumerable:!1,configurable:!0})}case"generate-static-params":throw Object.defineProperty(Error(`Route ${b.route} used \`${a}()\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`),"__NEXT_ERROR_CODE",{value:"E1132",enumerable:!1,configurable:!0});default:return c}}function m(a,b){let c=o.get(a??n);return c||Promise.resolve(new p(a))}a.r(51409);let n={},o=new WeakMap;class p{constructor(a){this._provider=a}get isEnabled(){return null!==this._provider&&this._provider.isEnabled}enable(){q("draftMode().enable()",this.enable),null!==this._provider&&this._provider.enable()}disable(){q("draftMode().disable()",this.disable),null!==this._provider&&this._provider.disable()}}function q(a,b){let c=e.workAsyncStorage.getStore(),g=d.workUnitAsyncStorage.getStore();if(c){if((null==g?void 0:g.phase)==="after")throw Object.defineProperty(Error(`Route ${c.route} used "${a}" inside \`after()\`. The enabled status of \`draftMode()\` can be read inside \`after()\` but you cannot enable or disable \`draftMode()\`. See more info here: https://nextjs.org/docs/app/api-reference/functions/after`),"__NEXT_ERROR_CODE",{value:"E845",enumerable:!1,configurable:!0});if(c.dynamicShouldError)throw Object.defineProperty(new h.StaticGenBailoutError(`Route ${c.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`${a}\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E553",enumerable:!1,configurable:!0});if(g)switch(g.type){case"cache":case"private-cache":{let d=Object.defineProperty(Error(`Route ${c.route} used "${a}" inside "use cache". The enabled status of \`draftMode()\` can be read in caches but you must not enable or disable \`draftMode()\` inside a cache. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E829",enumerable:!1,configurable:!0});throw Error.captureStackTrace(d,b),c.invalidDynamicUsageError??=d,d}case"unstable-cache":throw Object.defineProperty(Error(`Route ${c.route} used "${a}" inside a function cached with \`unstable_cache()\`. The enabled status of \`draftMode()\` can be read in caches but you must not enable or disable \`draftMode()\` inside a cache. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`),"__NEXT_ERROR_CODE",{value:"E844",enumerable:!1,configurable:!0});case"prerender":case"prerender-runtime":{let b=Object.defineProperty(Error(`Route ${c.route} used ${a} without first calling \`await connection()\`. See more info here: https://nextjs.org/docs/messages/next-prerender-sync-headers`),"__NEXT_ERROR_CODE",{value:"E126",enumerable:!1,configurable:!0});return(0,f.abortAndThrowOnSynchronousRequestDataAccess)(c.route,a,b,g)}case"prerender-client":case"validation-client":let d="`draftMode`";throw Object.defineProperty(new j.InvariantError(`${d} must not be used within a Client Component. Next.js should be preventing ${d} from being included in Client Components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1046",enumerable:!1,configurable:!0});case"prerender-ppr":return(0,f.postponeWithTracking)(c.route,a,g.dynamicTracking);case"prerender-legacy":g.revalidate=0;let e=Object.defineProperty(new i.DynamicServerError(`Route ${c.route} couldn't be rendered statically because it used \`${a}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`),"__NEXT_ERROR_CODE",{value:"E558",enumerable:!1,configurable:!0});throw c.dynamicUsageDescription=a,c.dynamicUsageStack=e.stack,e;case"request":(0,f.trackDynamicDataInDynamicRender)(g);break;case"generate-static-params":throw Object.defineProperty(Error(`Route ${c.route} used \`${a}\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`),"__NEXT_ERROR_CODE",{value:"E1121",enumerable:!1,configurable:!0})}}}(0,g.createDedupedByCallsiteServerErrorLoggerDev)(function(a,b){let c=a?`Route "${a}" `:"This route ";return Object.defineProperty(Error(`${c}used ${b}. \`draftMode()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`),"__NEXT_ERROR_CODE",{value:"E835",enumerable:!1,configurable:!0})})},5246,(a,b,c)=>{b.exports.cookies=a.r(81740).cookies,b.exports.headers=a.r(35754).headers,b.exports.draftMode=a.r(51125).draftMode},29165,a=>{"use strict";a.s(["UsageView",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call UsageView() from the server but UsageView is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/components/UsageView.tsx <module evaluation>","UsageView")},59111,a=>{"use strict";a.s(["UsageView",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call UsageView() from the server but UsageView is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/components/UsageView.tsx","UsageView")},92230,a=>{"use strict";a.i(29165);var b=a.i(59111);a.n(b)},98160,a=>{"use strict";a.s(["LogTable",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call LogTable() from the server but LogTable is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/components/LogTable.tsx <module evaluation>","LogTable")},8004,a=>{"use strict";a.s(["LogTable",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call LogTable() from the server but LogTable is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/components/LogTable.tsx","LogTable")},49716,a=>{"use strict";a.i(98160);var b=a.i(8004);a.n(b)},83172,a=>{"use strict";var b=a.i(7997),c=a.i(66680),d=a.i(5246);function e(){return process.env.SESSION_SECRET??""}async function f(){return function(a){if(!function(a){if(!a||!e())return!1;let[b,d]=a.split(".");if(!b||!d)return!1;let f=(0,c.createHmac)("sha256",e()).update(b).digest("hex"),g=Buffer.from(d),h=Buffer.from(f);return g.length===h.length&&(0,c.timingSafeEqual)(g,h)}(a)||!a)return null;try{let b=Buffer.from(a.split(".")[0],"base64url"),d=b.subarray(0,12),f=b.subarray(12,28),g=b.subarray(28),h=(0,c.createDecipheriv)("aes-256-gcm",(0,c.scryptSync)(e(),"aigetwey-session-aes",32),d);return h.setAuthTag(f),Buffer.concat([h.update(g),h.final()]).toString("utf8")}catch{return null}}((await (0,d.cookies)()).get("aigetwey_session")?.value)??""}async function g(a,b,c){let d;try{d=await fetch((process.env.GATEWAY_URL??"http://127.0.0.1:18080").replace(/\/$/,"")+b,{method:a,headers:{authorization:`Bearer ${await f()}`,...void 0!==c?{"content-type":"application/json"}:{}},body:void 0!==c?JSON.stringify(c):void 0,cache:"no-store"})}catch(a){return{ok:!1,status:0,data:null,error:`gateway unreachable: ${a.message}`}}let e=await d.text(),g=null;try{g=e?JSON.parse(e):null}catch{g=null}if(!d.ok){let a=g?.error??`gateway returned ${d.status}`;return{ok:!1,status:d.status,data:g,error:a}}return{ok:!0,status:d.status,data:g}}var h=a.i(92230),i=a.i(49716);function j({children:a}){return(0,b.jsx)("div",{className:"px-1 py-8 text-center text-[13px] text-text-muted",children:a})}async function k(){let a=await ((a=100)=>g("GET",`/admin/logs?limit=${a}`))(200),c=a.data?.logs??[];return(0,b.jsxs)("div",{className:"space-y-7",children:[(0,b.jsx)(h.UsageView,{}),(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"mb-3 text-[15px] font-semibold text-text",children:"Requests"}),a.ok?(0,b.jsx)(i.LogTable,{logs:c}):(0,b.jsxs)(j,{children:["Could not reach the gateway: ",a.error]})]})]})}a.s(["default",0,k,"dynamic",0,"force-dynamic"],83172)},95134,a=>{a.n(a.i(83172))}];
4
+ - Rerun the production build with \`next build --debug-prerender\` to generate better stack traces.`)}function ah(a,b,c,d){if(d.syncDynamicErrorWithStack)throw ag(a,d.syncDynamicErrorWithStack),new k.StaticGenBailoutError;if(0!==b){if(c.hasSuspenseAboveBody)return;let d=c.dynamicErrors;if(d.length>0){for(let b=0;b<d.length;b++)ag(a,d[b]);throw new k.StaticGenBailoutError}if(c.hasDynamicViewport)throw console.error(`Route "${a.route}" has a \`generateViewport\` that depends on Request data (\`cookies()\`, etc...) or uncached external data (\`fetch(...)\`, etc...) without explicitly allowing fully dynamic rendering. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`),new k.StaticGenBailoutError;if(1===b)throw console.error(`Route "${a.route}" did not produce a static shell and Next.js was unable to determine a reason. This is a bug in Next.js.`),new k.StaticGenBailoutError}else if(!1===c.hasAllowedDynamic&&c.hasDynamicMetadata)throw console.error(`Route "${a.route}" has a \`generateMetadata\` that depends on Request data (\`cookies()\`, etc...) or uncached external data (\`fetch(...)\`, etc...) when the rest of the route does not. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`),new k.StaticGenBailoutError}function ai(a,b,c,d){if(d||c.hasSuspenseAboveBody)return[];if(0!==b){let d=c.dynamicErrors;if(d.length>0)return d;if(1===b)return[Object.defineProperty(new r.InvariantError(`Route "${a.route}" did not produce a static shell and Next.js was unable to determine a reason.`),"__NEXT_ERROR_CODE",{value:"E936",enumerable:!1,configurable:!0})]}else if(!1===c.hasAllowedDynamic&&0===c.dynamicErrors.length&&c.dynamicMetadata)return[c.dynamicMetadata];return[]}function aj(a,b,c,d,e){if(d){let{missingSampleErrors:a}=d;if(a.length>0)return a}let{validationPreventingErrors:f}=c;if(f.length>0)return f;if(e.renderedIds.size<e.expectedIds.size){let{thrownErrorsOutsideBoundary:b,createInstantStack:d}=c;if(0===b.length){let b=`Route "${a.route}": Could not validate \`unstable_instant\` because the target segment was prevented from rendering for an unknown reason.`,c=null!==d?d():Error();return c.name="Error",c.message=b,[c]}if(1===b.length){let c=`Route "${a.route}": Could not validate \`unstable_instant\` because the target segment was prevented from rendering, likely due to the following error.`,e=null!==d?d():Error();return e.name="Error",e.message=c,[e,b[0]]}{let c=`Route "${a.route}": Could not validate \`unstable_instant\` because the target segment was prevented from rendering, likely due to one of the following errors.`,e=null!==d?d():Error();return e.name="Error",e.message=c,[e,...b]}}if(0!==b){let d=c.dynamicErrors;if(d.length>0)return d;if(1===b)return c.hasAllowedClientDynamicAboveBoundary?[]:[Object.defineProperty(new r.InvariantError(`Route "${a.route}" failed to render during instant validation and Next.js was unable to determine a reason.`),"__NEXT_ERROR_CODE",{value:"E1055",enumerable:!1,configurable:!0})]}else{let a=c.dynamicErrors;if(a.length>0)return a;if(!1===c.hasAllowedDynamic&&c.dynamicMetadata)return[c.dynamicMetadata]}return[]}},8018,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"createDedupedByCallsiteServerErrorLoggerDev",{enumerable:!0,get:function(){return i}});let d=function(a){if(a&&a.__esModule)return a;if(null===a||"object"!=typeof a&&"function"!=typeof a)return{default:a};var b=e(void 0);if(b&&b.has(a))return b.get(a);var c={__proto__:null},d=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in a)if("default"!==f&&Object.prototype.hasOwnProperty.call(a,f)){var g=d?Object.getOwnPropertyDescriptor(a,f):null;g&&(g.get||g.set)?Object.defineProperty(c,f,g):c[f]=a[f]}return c.default=a,b&&b.set(a,c),c}(a.r(717));function e(a){if("function"!=typeof WeakMap)return null;var b=new WeakMap,c=new WeakMap;return(e=function(a){return a?c:b})(a)}let f={current:null},g="function"==typeof d.cache?d.cache:a=>a,h=console.warn;function i(a){return function(...b){h(a(...b))}}g(a=>{try{h(f.current)}finally{f.current=null}})},86309,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={isRequestAPICallableInsideAfter:function(){return j},throwForSearchParamsAccessInUseCache:function(){return i},throwWithStaticGenerationBailoutErrorWithDynamicError:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(60312),g=a.r(24725);function h(a,b){throw Object.defineProperty(new f.StaticGenBailoutError(`Route ${a} with \`dynamic = "error"\` couldn't be rendered statically because it used ${b}. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E543",enumerable:!1,configurable:!0})}function i(a,b){let c=Object.defineProperty(Error(`Route ${a.route} used \`searchParams\` inside "use cache". Accessing dynamic request data inside a cache scope is not supported. If you need some search params inside a cached function await \`searchParams\` outside of the cached function and pass only the required search params as arguments to the cached function. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E842",enumerable:!1,configurable:!0});throw Error.captureStackTrace(c,b),a.invalidDynamicUsageError??=c,c}function j(){let a=g.afterTaskAsyncStorage.getStore();return(null==a?void 0:a.rootTaskSpawnPhase)==="action"}},81740,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"cookies",{enumerable:!0,get:function(){return n}});let d=a.r(14896),e=a.r(63681),f=a.r(56704),g=a.r(32319),h=a.r(60384),i=a.r(60312),j=a.r(13091),k=a.r(8018),l=a.r(86309),m=a.r(50640);function n(){let a="cookies",b=f.workAsyncStorage.getStore(),c=g.workUnitAsyncStorage.getStore();if(b){if(c&&"after"===c.phase&&!(0,l.isRequestAPICallableInsideAfter)())throw Object.defineProperty(Error(`Route ${b.route} used \`cookies()\` inside \`after()\`. This is not supported. If you need this data inside an \`after()\` callback, use \`cookies()\` outside of the callback. See more info here: https://nextjs.org/docs/canary/app/api-reference/functions/after`),"__NEXT_ERROR_CODE",{value:"E843",enumerable:!1,configurable:!0});if(b.forceStatic)return p(d.RequestCookiesAdapter.seal(new e.RequestCookies(new Headers({}))));if(b.dynamicShouldError)throw Object.defineProperty(new i.StaticGenBailoutError(`Route ${b.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`cookies()\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E849",enumerable:!1,configurable:!0});if(c)switch(c.type){case"cache":let f=Object.defineProperty(Error(`Route ${b.route} used \`cookies()\` inside "use cache". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`cookies()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E831",enumerable:!1,configurable:!0});throw Error.captureStackTrace(f,n),b.invalidDynamicUsageError??=f,f;case"unstable-cache":throw Object.defineProperty(Error(`Route ${b.route} used \`cookies()\` inside a function cached with \`unstable_cache()\`. Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`cookies()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`),"__NEXT_ERROR_CODE",{value:"E846",enumerable:!1,configurable:!0});case"generate-static-params":throw Object.defineProperty(Error(`Route ${b.route} used \`cookies()\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`),"__NEXT_ERROR_CODE",{value:"E1123",enumerable:!1,configurable:!0});case"prerender":var k=b,q=c;let r=o.get(q);if(r)return r;let s=(0,j.makeHangingPromise)(q.renderSignal,k.route,"`cookies()`");return o.set(q,s),s;case"prerender-client":case"validation-client":let t="`cookies`";throw Object.defineProperty(new m.InvariantError(`${t} must not be used within a Client Component. Next.js should be preventing ${t} from being included in Client Components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1037",enumerable:!1,configurable:!0});case"prerender-ppr":return(0,h.postponeWithTracking)(b.route,a,c.dynamicTracking);case"prerender-legacy":return(0,h.throwToInterruptStaticGeneration)(a,b,c);case"prerender-runtime":return(0,j.delayUntilRuntimeStage)(c,p(c.cookies));case"private-cache":return p(c.cookies);case"request":let u;if((0,h.trackDynamicDataInDynamicRender)(c),u=(0,d.areCookiesMutableInCurrentPhase)(c)?c.userspaceMutableCookies:c.cookies,!c.asyncApiPromises)return p(u);{let a=(0,g.isInEarlyRenderStage)(c);if(u===c.mutableCookies)return a?c.asyncApiPromises.earlyMutableCookies:c.asyncApiPromises.mutableCookies;return a?c.asyncApiPromises.earlyCookies:c.asyncApiPromises.cookies}}}(0,g.throwForMissingRequestStore)(a)}a.r(31382);let o=new WeakMap;function p(a){let b=o.get(a);if(b)return b;let c=Promise.resolve(a);return o.set(a,c),c}(0,k.createDedupedByCallsiteServerErrorLoggerDev)(function(a,b){let c=a?`Route "${a}" `:"This route ";return Object.defineProperty(Error(`${c}used ${b}. \`cookies()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`),"__NEXT_ERROR_CODE",{value:"E830",enumerable:!1,configurable:!0})})},29927,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={HeadersAdapter:function(){return h},ReadonlyHeadersError:function(){return g}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(51409);class g extends Error{constructor(){super("Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers")}static callable(){throw new g}}class h extends Headers{constructor(a){super(),this.headers=new Proxy(a,{get(b,c,d){if("symbol"==typeof c)return f.ReflectAdapter.get(b,c,d);let e=c.toLowerCase(),g=Object.keys(a).find(a=>a.toLowerCase()===e);if(void 0!==g)return f.ReflectAdapter.get(b,g,d)},set(b,c,d,e){if("symbol"==typeof c)return f.ReflectAdapter.set(b,c,d,e);let g=c.toLowerCase(),h=Object.keys(a).find(a=>a.toLowerCase()===g);return f.ReflectAdapter.set(b,h??c,d,e)},has(b,c){if("symbol"==typeof c)return f.ReflectAdapter.has(b,c);let d=c.toLowerCase(),e=Object.keys(a).find(a=>a.toLowerCase()===d);return void 0!==e&&f.ReflectAdapter.has(b,e)},deleteProperty(b,c){if("symbol"==typeof c)return f.ReflectAdapter.deleteProperty(b,c);let d=c.toLowerCase(),e=Object.keys(a).find(a=>a.toLowerCase()===d);return void 0===e||f.ReflectAdapter.deleteProperty(b,e)}})}static seal(a){return new Proxy(a,{get(a,b,c){switch(b){case"append":case"delete":case"set":return g.callable;default:return f.ReflectAdapter.get(a,b,c)}}})}merge(a){return Array.isArray(a)?a.join(", "):a}static from(a){return a instanceof Headers?a:new h(a)}append(a,b){let c=this.headers[a];"string"==typeof c?this.headers[a]=[c,b]:Array.isArray(c)?c.push(b):this.headers[a]=b}delete(a){delete this.headers[a]}get(a){let b=this.headers[a];return void 0!==b?this.merge(b):null}has(a){return void 0!==this.headers[a]}set(a,b){this.headers[a]=b}forEach(a,b){for(let[c,d]of this.entries())a.call(b,d,c,this)}*entries(){for(let a of Object.keys(this.headers)){let b=a.toLowerCase(),c=this.get(b);yield[b,c]}}*keys(){for(let a of Object.keys(this.headers)){let b=a.toLowerCase();yield b}}*values(){for(let a of Object.keys(this.headers)){let b=this.get(a);yield b}}[Symbol.iterator](){return this.entries()}}},35754,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"headers",{enumerable:!0,get:function(){return m}});let d=a.r(29927),e=a.r(56704),f=a.r(32319),g=a.r(60384),h=a.r(60312),i=a.r(13091),j=a.r(8018),k=a.r(86309),l=a.r(50640);function m(){let a="headers",b=e.workAsyncStorage.getStore(),c=f.workUnitAsyncStorage.getStore();if(b){if(c&&"after"===c.phase&&!(0,k.isRequestAPICallableInsideAfter)())throw Object.defineProperty(Error(`Route ${b.route} used \`headers()\` inside \`after()\`. This is not supported. If you need this data inside an \`after()\` callback, use \`headers()\` outside of the callback. See more info here: https://nextjs.org/docs/canary/app/api-reference/functions/after`),"__NEXT_ERROR_CODE",{value:"E839",enumerable:!1,configurable:!0});if(b.forceStatic)return o(d.HeadersAdapter.seal(new Headers({})));if(c)switch(c.type){case"cache":{let a=Object.defineProperty(Error(`Route ${b.route} used \`headers()\` inside "use cache". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`headers()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E833",enumerable:!1,configurable:!0});throw Error.captureStackTrace(a,m),b.invalidDynamicUsageError??=a,a}case"unstable-cache":throw Object.defineProperty(Error(`Route ${b.route} used \`headers()\` inside a function cached with \`unstable_cache()\`. Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`headers()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`),"__NEXT_ERROR_CODE",{value:"E838",enumerable:!1,configurable:!0});case"generate-static-params":throw Object.defineProperty(Error(`Route ${b.route} used \`headers()\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`),"__NEXT_ERROR_CODE",{value:"E1134",enumerable:!1,configurable:!0})}if(b.dynamicShouldError)throw Object.defineProperty(new h.StaticGenBailoutError(`Route ${b.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`headers()\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E828",enumerable:!1,configurable:!0});if(c)switch(c.type){case"prerender":var j=b,p=c;let e=n.get(p);if(e)return e;let q=(0,i.makeHangingPromise)(p.renderSignal,j.route,"`headers()`");return n.set(p,q),q;case"prerender-client":case"validation-client":let r="`headers`";throw Object.defineProperty(new l.InvariantError(`${r} must not be used within a client component. Next.js should be preventing ${r} from being included in client components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1017",enumerable:!1,configurable:!0});case"prerender-ppr":return(0,g.postponeWithTracking)(b.route,a,c.dynamicTracking);case"prerender-legacy":return(0,g.throwToInterruptStaticGeneration)(a,b,c);case"prerender-runtime":return(0,i.delayUntilRuntimeStage)(c,o(c.headers));case"private-cache":return o(c.headers);case"request":if((0,g.trackDynamicDataInDynamicRender)(c),c.asyncApiPromises)return(0,f.isInEarlyRenderStage)(c)?c.asyncApiPromises.earlyHeaders:c.asyncApiPromises.headers;return o(c.headers)}}(0,f.throwForMissingRequestStore)(a)}a.r(31382);let n=new WeakMap;function o(a){let b=n.get(a);if(b)return b;let c=Promise.resolve(a);return n.set(a,c),c}(0,j.createDedupedByCallsiteServerErrorLoggerDev)(function(a,b){let c=a?`Route "${a}" `:"This route ";return Object.defineProperty(Error(`${c}used ${b}. \`headers()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`),"__NEXT_ERROR_CODE",{value:"E836",enumerable:!1,configurable:!0})})},51125,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"draftMode",{enumerable:!0,get:function(){return l}});let d=a.r(32319),e=a.r(56704),f=a.r(60384),g=a.r(8018),h=a.r(60312),i=a.r(96556),j=a.r(50640),k=a.r(13091);function l(){let a="draftMode",b=e.workAsyncStorage.getStore(),c=d.workUnitAsyncStorage.getStore();switch((!b||!c)&&(0,d.throwForMissingRequestStore)(a),c.type){case"prerender-runtime":return(0,k.delayUntilRuntimeStage)(c,m(c.draftMode,b));case"request":return m(c.draftMode,b);case"cache":case"private-cache":case"unstable-cache":let f=(0,d.getDraftModeProviderForCacheScope)(b,c);if(f)return m(f,b);case"prerender":case"prerender-ppr":case"prerender-legacy":return m(null,b);case"prerender-client":case"validation-client":{let a="`draftMode`";throw Object.defineProperty(new j.InvariantError(`${a} must not be used within a Client Component. Next.js should be preventing ${a} from being included in Client Components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1046",enumerable:!1,configurable:!0})}case"generate-static-params":throw Object.defineProperty(Error(`Route ${b.route} used \`${a}()\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`),"__NEXT_ERROR_CODE",{value:"E1132",enumerable:!1,configurable:!0});default:return c}}function m(a,b){let c=o.get(a??n);return c||Promise.resolve(new p(a))}a.r(51409);let n={},o=new WeakMap;class p{constructor(a){this._provider=a}get isEnabled(){return null!==this._provider&&this._provider.isEnabled}enable(){q("draftMode().enable()",this.enable),null!==this._provider&&this._provider.enable()}disable(){q("draftMode().disable()",this.disable),null!==this._provider&&this._provider.disable()}}function q(a,b){let c=e.workAsyncStorage.getStore(),g=d.workUnitAsyncStorage.getStore();if(c){if((null==g?void 0:g.phase)==="after")throw Object.defineProperty(Error(`Route ${c.route} used "${a}" inside \`after()\`. The enabled status of \`draftMode()\` can be read inside \`after()\` but you cannot enable or disable \`draftMode()\`. See more info here: https://nextjs.org/docs/app/api-reference/functions/after`),"__NEXT_ERROR_CODE",{value:"E845",enumerable:!1,configurable:!0});if(c.dynamicShouldError)throw Object.defineProperty(new h.StaticGenBailoutError(`Route ${c.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`${a}\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E553",enumerable:!1,configurable:!0});if(g)switch(g.type){case"cache":case"private-cache":{let d=Object.defineProperty(Error(`Route ${c.route} used "${a}" inside "use cache". The enabled status of \`draftMode()\` can be read in caches but you must not enable or disable \`draftMode()\` inside a cache. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E829",enumerable:!1,configurable:!0});throw Error.captureStackTrace(d,b),c.invalidDynamicUsageError??=d,d}case"unstable-cache":throw Object.defineProperty(Error(`Route ${c.route} used "${a}" inside a function cached with \`unstable_cache()\`. The enabled status of \`draftMode()\` can be read in caches but you must not enable or disable \`draftMode()\` inside a cache. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`),"__NEXT_ERROR_CODE",{value:"E844",enumerable:!1,configurable:!0});case"prerender":case"prerender-runtime":{let b=Object.defineProperty(Error(`Route ${c.route} used ${a} without first calling \`await connection()\`. See more info here: https://nextjs.org/docs/messages/next-prerender-sync-headers`),"__NEXT_ERROR_CODE",{value:"E126",enumerable:!1,configurable:!0});return(0,f.abortAndThrowOnSynchronousRequestDataAccess)(c.route,a,b,g)}case"prerender-client":case"validation-client":let d="`draftMode`";throw Object.defineProperty(new j.InvariantError(`${d} must not be used within a Client Component. Next.js should be preventing ${d} from being included in Client Components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1046",enumerable:!1,configurable:!0});case"prerender-ppr":return(0,f.postponeWithTracking)(c.route,a,g.dynamicTracking);case"prerender-legacy":g.revalidate=0;let e=Object.defineProperty(new i.DynamicServerError(`Route ${c.route} couldn't be rendered statically because it used \`${a}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`),"__NEXT_ERROR_CODE",{value:"E558",enumerable:!1,configurable:!0});throw c.dynamicUsageDescription=a,c.dynamicUsageStack=e.stack,e;case"request":(0,f.trackDynamicDataInDynamicRender)(g);break;case"generate-static-params":throw Object.defineProperty(Error(`Route ${c.route} used \`${a}\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`),"__NEXT_ERROR_CODE",{value:"E1121",enumerable:!1,configurable:!0})}}}(0,g.createDedupedByCallsiteServerErrorLoggerDev)(function(a,b){let c=a?`Route "${a}" `:"This route ";return Object.defineProperty(Error(`${c}used ${b}. \`draftMode()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`),"__NEXT_ERROR_CODE",{value:"E835",enumerable:!1,configurable:!0})})},5246,(a,b,c)=>{b.exports.cookies=a.r(81740).cookies,b.exports.headers=a.r(35754).headers,b.exports.draftMode=a.r(51125).draftMode},29165,a=>{"use strict";a.s(["UsageView",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call UsageView() from the server but UsageView is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/components/UsageView.tsx <module evaluation>","UsageView")},59111,a=>{"use strict";a.s(["UsageView",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call UsageView() from the server but UsageView is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/components/UsageView.tsx","UsageView")},92230,a=>{"use strict";a.i(29165);var b=a.i(59111);a.n(b)},98160,a=>{"use strict";a.s(["LogTable",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call LogTable() from the server but LogTable is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/components/LogTable.tsx <module evaluation>","LogTable")},8004,a=>{"use strict";a.s(["LogTable",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call LogTable() from the server but LogTable is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/components/LogTable.tsx","LogTable")},49716,a=>{"use strict";a.i(98160);var b=a.i(8004);a.n(b)},83172,a=>{"use strict";var b=a.i(7997),c=a.i(66680),d=a.i(5246);let e=(()=>{try{return new URL(process.env.GATEWAY_URL??"").port||"18080"}catch{return"18080"}})(),f=`aigetwey_session_${e}`;function g(){return process.env.SESSION_SECRET??""}async function h(){return function(a){if(!function(a){if(!a||!g())return!1;let[b,d]=a.split(".");if(!b||!d)return!1;let e=(0,c.createHmac)("sha256",g()).update(b).digest("hex"),f=Buffer.from(d),h=Buffer.from(e);return f.length===h.length&&(0,c.timingSafeEqual)(f,h)}(a)||!a)return null;try{let b=Buffer.from(a.split(".")[0],"base64url"),d=b.subarray(0,12),e=b.subarray(12,28),f=b.subarray(28),h=(0,c.createDecipheriv)("aes-256-gcm",(0,c.scryptSync)(g(),"aigetwey-session-aes",32),d);return h.setAuthTag(e),Buffer.concat([h.update(f),h.final()]).toString("utf8")}catch{return null}}((await (0,d.cookies)()).get(f)?.value)??""}async function i(a,b,c){let d;try{d=await fetch((process.env.GATEWAY_URL??"http://127.0.0.1:18080").replace(/\/$/,"")+b,{method:a,headers:{authorization:`Bearer ${await h()}`,...void 0!==c?{"content-type":"application/json"}:{}},body:void 0!==c?JSON.stringify(c):void 0,cache:"no-store"})}catch(a){return{ok:!1,status:0,data:null,error:`gateway unreachable: ${a.message}`}}let e=await d.text(),f=null;try{f=e?JSON.parse(e):null}catch{f=null}if(!d.ok){let a=f?.error??`gateway returned ${d.status}`;return{ok:!1,status:d.status,data:f,error:a}}return{ok:!0,status:d.status,data:f}}var j=a.i(92230),k=a.i(49716);function l({children:a}){return(0,b.jsx)("div",{className:"px-1 py-8 text-center text-[13px] text-text-muted",children:a})}async function m(){let a=await ((a=100)=>i("GET",`/admin/logs?limit=${a}`))(200),c=a.data?.logs??[];return(0,b.jsxs)("div",{className:"space-y-7",children:[(0,b.jsx)(j.UsageView,{}),(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"mb-3 text-[15px] font-semibold text-text",children:"Requests"}),a.ok?(0,b.jsx)(k.LogTable,{logs:c}):(0,b.jsxs)(l,{children:["Could not reach the gateway: ",a.error]})]})]})}a.s(["default",0,m,"dynamic",0,"force-dynamic"],83172)},95134,a=>{a.n(a.i(83172))}];
5
5
 
6
6
  //# sourceMappingURL=_1mumvwn._.js.map