omnigateway 0.12.13 → 0.13.0

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.
package/bin/omni.js CHANGED
@@ -32803,6 +32803,24 @@ function createConnectFlows(deps) {
32803
32803
  if (provider === undefined)
32804
32804
  throw new GatewayError("BAD_REQUEST", "provider does not support OAuth");
32805
32805
  const result = await provider.exchange({ code, pending: flow.pending }, { http: deps.http, now: deps.now });
32806
+ if (flow.credentialId !== undefined) {
32807
+ const existing = await deps.store.credentials.get(flow.credentialId);
32808
+ if (existing === null)
32809
+ throw new GatewayError("BAD_REQUEST", "credential not found");
32810
+ await deps.store.credentials.updateSecrets(flow.credentialId, result.secrets, result.expiresAt);
32811
+ await deps.store.credentials.update(flow.credentialId, {
32812
+ enabled: true,
32813
+ disabledReason: null,
32814
+ disabledAt: null,
32815
+ accountEmail: result.accountEmail,
32816
+ providerData: result.providerData
32817
+ });
32818
+ logger2.info("oauth reconnect completed", {
32819
+ provider: flow.provider,
32820
+ credentialId: flow.credentialId
32821
+ });
32822
+ return { id: flow.credentialId };
32823
+ }
32806
32824
  const id = crypto.randomUUID();
32807
32825
  await deps.store.credentials.create({
32808
32826
  id,
@@ -32839,13 +32857,25 @@ function createConnectFlows(deps) {
32839
32857
  }
32840
32858
  return {
32841
32859
  connectableIds,
32842
- async start(providerInput, labelInput) {
32860
+ async start(providerInput, labelInput, credentialIdInput) {
32843
32861
  const unconnectable = () => new GatewayError("BAD_REQUEST", `provider must be one of ${connectableIds().join(", ")}`);
32844
32862
  if (!exists(providerInput))
32845
32863
  throw unconnectable();
32846
32864
  const provider = deps.providers[providerInput];
32847
32865
  if (provider === undefined)
32848
32866
  throw unconnectable();
32867
+ let credentialId;
32868
+ if (credentialIdInput !== undefined) {
32869
+ if (typeof credentialIdInput !== "string" || credentialIdInput.trim().length === 0) {
32870
+ throw new GatewayError("BAD_REQUEST", "invalid credential for reconnect");
32871
+ }
32872
+ const id = credentialIdInput.trim();
32873
+ const existing = await deps.store.credentials.get(id);
32874
+ if (existing === null || existing.provider !== providerInput || existing.authType !== "oauth") {
32875
+ throw new GatewayError("BAD_REQUEST", "invalid credential for reconnect");
32876
+ }
32877
+ credentialId = id;
32878
+ }
32849
32879
  const label3 = typeof labelInput === "string" && labelInput.trim().length > 0 ? labelInput.trim() : providerInput;
32850
32880
  const redirectUri = callbackUri(providerInput);
32851
32881
  const oauthDeps = { http: deps.http, now: deps.now };
@@ -32855,6 +32885,7 @@ function createConnectFlows(deps) {
32855
32885
  provider: providerInput,
32856
32886
  label: label3,
32857
32887
  pending: start.pending,
32888
+ ...credentialId === undefined ? {} : { credentialId },
32858
32889
  ...start.userCode === undefined ? {} : { userCode: start.userCode }
32859
32890
  });
32860
32891
  return {
@@ -36852,9 +36883,9 @@ var bodies = {
36852
36883
  // apps/cli/src/commands/connect.ts
36853
36884
  var DEVICE_TIMEOUT_MS = 600000;
36854
36885
  var connect = {
36855
- usage: "connect <provider> [--label L]",
36886
+ usage: "connect <provider> [--label L] [--credential ID]",
36856
36887
  summary: "Authorize a provider account from the terminal",
36857
- options: { label: { type: "string" } },
36888
+ options: { label: { type: "string" }, credential: { type: "string" } },
36858
36889
  async run(args, { ctx, writer, prompt, connect: connectFlows, connectable }) {
36859
36890
  const providerId = requirePositional(args, 0, "provider");
36860
36891
  const { ids, failures } = await connectable();
@@ -36863,7 +36894,8 @@ var connect = {
36863
36894
  throw new UsageError(broken === undefined ? `provider must be one of ${ids.join(", ")}` : `provider ${providerId} comes from a plugin that failed to load: ${broken.reason}`);
36864
36895
  }
36865
36896
  const flows = await connectFlows(await ctx.store());
36866
- const start = await flows.start(providerId, stringFlag(args.values, "label"));
36897
+ const credentialId = stringFlag(args.values, "credential");
36898
+ const start = await flows.start(providerId, stringFlag(args.values, "label"), credentialId);
36867
36899
  writer.err("");
36868
36900
  writer.err(`Open this URL to authorize ${providerId}:`);
36869
36901
  writer.err(` ${start.authorizeUrl}`);
@@ -38510,7 +38542,7 @@ function createServiceDeps(input2) {
38510
38542
  }
38511
38543
 
38512
38544
  // apps/cli/src/version.ts
38513
- var VERSION = "0.12.13";
38545
+ var VERSION = "0.13.0";
38514
38546
 
38515
38547
  // apps/cli/src/commands/service.ts
38516
38548
  function gatewayArgv(root) {
package/gateway.js CHANGED
@@ -38372,6 +38372,24 @@ function createConnectFlows(deps) {
38372
38372
  if (provider === undefined)
38373
38373
  throw new GatewayError("BAD_REQUEST", "provider does not support OAuth");
38374
38374
  const result = await provider.exchange({ code, pending: flow.pending }, { http: deps.http, now: deps.now });
38375
+ if (flow.credentialId !== undefined) {
38376
+ const existing = await deps.store.credentials.get(flow.credentialId);
38377
+ if (existing === null)
38378
+ throw new GatewayError("BAD_REQUEST", "credential not found");
38379
+ await deps.store.credentials.updateSecrets(flow.credentialId, result.secrets, result.expiresAt);
38380
+ await deps.store.credentials.update(flow.credentialId, {
38381
+ enabled: true,
38382
+ disabledReason: null,
38383
+ disabledAt: null,
38384
+ accountEmail: result.accountEmail,
38385
+ providerData: result.providerData
38386
+ });
38387
+ logger2.info("oauth reconnect completed", {
38388
+ provider: flow.provider,
38389
+ credentialId: flow.credentialId
38390
+ });
38391
+ return { id: flow.credentialId };
38392
+ }
38375
38393
  const id = crypto.randomUUID();
38376
38394
  await deps.store.credentials.create({
38377
38395
  id,
@@ -38408,13 +38426,25 @@ function createConnectFlows(deps) {
38408
38426
  }
38409
38427
  return {
38410
38428
  connectableIds,
38411
- async start(providerInput, labelInput) {
38429
+ async start(providerInput, labelInput, credentialIdInput) {
38412
38430
  const unconnectable = () => new GatewayError("BAD_REQUEST", `provider must be one of ${connectableIds().join(", ")}`);
38413
38431
  if (!exists(providerInput))
38414
38432
  throw unconnectable();
38415
38433
  const provider = deps.providers[providerInput];
38416
38434
  if (provider === undefined)
38417
38435
  throw unconnectable();
38436
+ let credentialId;
38437
+ if (credentialIdInput !== undefined) {
38438
+ if (typeof credentialIdInput !== "string" || credentialIdInput.trim().length === 0) {
38439
+ throw new GatewayError("BAD_REQUEST", "invalid credential for reconnect");
38440
+ }
38441
+ const id = credentialIdInput.trim();
38442
+ const existing = await deps.store.credentials.get(id);
38443
+ if (existing === null || existing.provider !== providerInput || existing.authType !== "oauth") {
38444
+ throw new GatewayError("BAD_REQUEST", "invalid credential for reconnect");
38445
+ }
38446
+ credentialId = id;
38447
+ }
38418
38448
  const label3 = typeof labelInput === "string" && labelInput.trim().length > 0 ? labelInput.trim() : providerInput;
38419
38449
  const redirectUri = callbackUri(providerInput);
38420
38450
  const oauthDeps = { http: deps.http, now: deps.now };
@@ -38424,6 +38454,7 @@ function createConnectFlows(deps) {
38424
38454
  provider: providerInput,
38425
38455
  label: label3,
38426
38456
  pending: start.pending,
38457
+ ...credentialId === undefined ? {} : { credentialId },
38427
38458
  ...start.userCode === undefined ? {} : { userCode: start.userCode }
38428
38459
  });
38429
38460
  return {
@@ -57798,7 +57829,7 @@ function connectRoutes(deps) {
57798
57829
  return new Elysia().onError(apiErrorHandler).post("/api/connect/start", async ({ request: request2 }) => {
57799
57830
  await requireAdmin(request2, deps.admin);
57800
57831
  const body2 = await readJsonRecord(request2);
57801
- return flows.start(body2?.provider, body2?.label);
57832
+ return flows.start(body2?.provider, body2?.label, body2?.credentialId);
57802
57833
  }).post("/api/connect/finish", async ({ request: request2 }) => {
57803
57834
  await requireAdmin(request2, deps.admin);
57804
57835
  const body2 = await readJsonRecord(request2);
@@ -63457,7 +63488,7 @@ function createRing(limits = DEFAULT_RING_LIMITS) {
63457
63488
  }
63458
63489
 
63459
63490
  // apps/gateway/src/version.ts
63460
- var VERSION = "0.12.13";
63491
+ var VERSION = "0.13.0";
63461
63492
 
63462
63493
  // apps/gateway/src/app.ts
63463
63494
  var ADMIN_SESSION_TTL_MS = 12 * 60 * 60 * 1000;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omnigateway",
3
- "version": "0.12.13",
3
+ "version": "0.13.0",
4
4
  "description": "Self-hosted AI gateway with Anthropic- and OpenAI-compatible APIs, an admin console, and a CLI",
5
5
  "license": "MIT",
6
6
  "author": "Harismawan <mail@harismawan.com>",
@@ -0,0 +1,70 @@
1
+ import{F as e,Ft as t,G as n,I as r,Jt as i,Lt as a,Mt as o,Nt as s,Pt as c,St as l,T as u,U as d,_t as f,b as p,c as m,ct as ee,d as h,en as g,h as _,j as v,kt as te,mt as ne,n as y,o as b,pt as x,s as re,st as ie,t as S,ut as ae,v as oe,y as C}from"./Lamp-Dk9XrTCg.js";import{A as w,C as T,S as E,T as D,a as se,b as O,c as k,k as A,o as j,r as M,s as N,y as P}from"./Panel-CsovmtxF.js";import{A as F,D as I,i as ce,r as L,t as R,w as z}from"./Rack-CDUOJkS2.js";import{t as le}from"./CopyValue-DAlmkISB.js";import{t as ue}from"./chevron-down-Bb5ZGvwk.js";import{t as de}from"./chevron-right-hwF5mD6-.js";import{t as fe}from"./plus-BgcHxxIr.js";import{t as pe}from"./rotate-ccw-Do43Argv.js";import{t as me}from"./trash-00950_yY.js";import{t as he}from"./Toggle-CdMD58sy.js";import{t as ge}from"./Chip-D0XSbQUr.js";import{i as B,n as V,r as _e,t as H}from"./Field-DG1317zr.js";import{t as ve}from"./Meter-stpt3vQu.js";import{i as ye,n as U,r as W,t as be}from"./Table-CVDZ69Zx.js";import{n as xe,r as Se,t as Ce}from"./WindowChart-Bqbl-KFO.js";import{Fragment as we,useCallback as G,useEffect as K,useState as q}from"react";import{Fragment as Te,jsx as J,jsxs as Y}from"react/jsx-runtime";import X from"styled-components";var Ee={name:`external-link`,size:24,node:[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`M10 14 21 3`,key:`gplh6r`}],[`path`,{d:`M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6`,key:`a6xqqp`}]]};Ee.node;var De=F(Ee),Z={name:`link-2`,size:24,node:[[`path`,{d:`M9 17H7A5 5 0 0 1 7 7h2`,key:`8i5ue5`}],[`path`,{d:`M15 7h2a5 5 0 1 1 0 10h-2`,key:`1b9ql8`}],[`line`,{x1:`8`,x2:`16`,y1:`12`,y2:`12`,key:`1jonct`}]]};Z.node;var Oe=F(Z),Q={name:`refresh-cw`,size:24,node:[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]};Q.node;var ke=F(Q);function Ae(e){return e?.authTypes??[]}function je(e){return Ae(e).includes(`oauth`)?`oauth`:`apiKey`}function Me(e){return e[0]?.id??`anthropic`}var $={oauth:`Authorize in the browser`,apiKey:`Paste an API key`};function Ne(e){let t=e?.callback;return t===void 0?`code#state`:`${t.uri}?code=…`}var Pe=X.ol`
2
+ display: flex;
3
+ flex-direction: column;
4
+ gap: ${({theme:e})=>e.space(3)};
5
+ `,Fe=X.div`
6
+ font-family: ${({theme:e})=>e.font.mono};
7
+ font-size: 26px;
8
+ letter-spacing: 0.22em;
9
+ text-align: center;
10
+ padding: ${({theme:e})=>e.space(3)};
11
+ background: ${({theme:e})=>e.color.panelSunk};
12
+ border: 1px solid ${({theme:e})=>e.color.ruleStrong};
13
+ border-radius: ${({theme:e})=>e.radius.control};
14
+ `,Ie=X.p`
15
+ font-size: 12px;
16
+ color: ${({theme:e})=>e.color.down};
17
+ `,Le=X.p`
18
+ font-size: 12px;
19
+ color: ${({theme:e})=>e.color.inkDim};
20
+ `;function Re({open:e,credentials:t,credential:r,onOpenChange:i,onConnected:a}){let s=o().data??[],[c,l]=q(()=>r?.provider??Me(s)),u=d(s,c),[f,p]=q(()=>r?.authType??je(d(s,r?.provider??Me(s)))),[m,h]=q(()=>r?.label??``);K(()=>{r&&(l(r.provider),p(r.authType),h(r.label))},[r]);let g=u?.label??c,[_,v]=q(null),[te,ne]=q(``),[y,b]=q(``),x=(t??[]).filter((e,t,n)=>e.provider===`custom`&&n.findIndex(t=>t.provider===`custom`&&t.providerData.endpointId===e.providerData.endpointId)===t),[re,S]=q(``),[oe,C]=q(``),[w,T]=q(`chat_completions`),[se,O]=q(``),[j,M]=q(null),N=ee(),F=ie(),I=ae(),L=G(()=>{v(null),ne(``),b(``),S(``),C(``),T(`chat_completions`),O(``),M(null),h(``),N.reset(),F.reset(),I.reset()},[N,F,I]),R=G(e=>{e||L(),i(e)},[i,L]);return K(()=>{if(_===null||_.kind!==`device`)return;let e=!1,t=async()=>{try{let t=await n(_.flowId);if(e)return;if(t.status===`complete`){L(),i(!1),a();return}}catch(t){if(e)return;M(k(t)),v(null);return}e||(r=setTimeout(()=>void t(),_.pollIntervalMs))},r=setTimeout(()=>void t(),_.pollIntervalMs);return()=>{e=!0,clearTimeout(r)}},[_,a,i,L]),J(ce,{open:e,onOpenChange:R,title:r?`Reconnect ${r.label}`:`Connect an account`,description:`The gateway stores the resulting token encrypted. It is never shown again after this dialog.`,footer:_===null?Y(Te,{children:[J(A,{type:`button`,onClick:()=>R(!1),children:`Cancel`}),J(A,{type:`button`,$variant:`primary`,disabled:N.isPending||I.isPending,onClick:()=>{if(M(null),f===`apiKey`){I.mutate({provider:c,apiKey:se,label:m.trim()||void 0,...c===`custom`?{endpointId:y,endpointLabel:re,origin:oe,protocol:w}:{}},{onSuccess:()=>{L(),i(!1),a()},onError:e=>M(k(e))});return}N.mutate({provider:c,label:m.trim().length===0?g:m.trim(),...r?{credentialId:r.id}:{}},{onSuccess:e=>v(e),onError:e=>M(k(e))})},children:f===`apiKey`?I.isPending?`Adding…`:`Add API key`:N.isPending?`Starting…`:`Start authorization`})]}):_.kind===`device`?J(A,{type:`button`,onClick:()=>R(!1),children:`Cancel`}):Y(Te,{children:[J(A,{type:`button`,onClick:()=>R(!1),children:`Cancel`}),J(A,{type:`button`,$variant:`primary`,disabled:F.isPending||te.trim().length===0,onClick:()=>{_!==null&&(M(null),F.mutate({flowId:_.flowId,code:te.trim()},{onSuccess:()=>{L(),i(!1),a()},onError:e=>M(k(e))}))},children:F.isPending?`Finishing…`:`Finish connecting`})]}),children:Y(Pe,{children:[_===null?Y(D,{$gap:3,children:[r?null:J(H,{label:`Provider`,children:e=>J(B,{...e,value:c,onChange:e=>{let t=e.target.value;l(t),p(je(d(s,t)))},children:s.map(e=>J(`option`,{value:e.id,children:e.label},e.id))})}),r?null:Ae(u).length>1?J(H,{label:`How to connect`,children:e=>J(B,{...e,value:f,onChange:e=>p(e.target.value),children:Ae(u).map(e=>J(`option`,{value:e,children:$[e]},e))})}):null,c===`custom`?Y(Te,{children:[x.length===0?null:J(H,{label:`Existing endpoint`,children:e=>Y(B,{...e,value:y,onChange:e=>{let t=x.find(t=>t.providerData.endpointId===e.target.value);if(t===void 0){b(``),S(``),C(``),T(`chat_completions`);return}b(String(t.providerData.endpointId)),S(String(t.providerData.endpointLabel)),C(String(t.providerData.origin)+String(t.providerData.basePath??``)),T(t.providerData.protocol===`responses`?`responses`:`chat_completions`)},children:[J(`option`,{value:``,children:`Create new endpoint`}),x.map(e=>J(`option`,{value:String(e.providerData.endpointId),children:String(e.providerData.endpointLabel)},String(e.providerData.endpointId)))]})}),J(H,{label:`Endpoint ID`,children:e=>J(V,{...e,value:y,onChange:e=>b(e.target.value)})}),J(H,{label:`Endpoint label`,children:e=>J(V,{...e,value:re,onChange:e=>S(e.target.value)})}),J(H,{label:`Server URL`,children:e=>J(V,{...e,value:oe,placeholder:`https://server.example/api`,onChange:e=>C(e.target.value)})}),oe.trim().toLowerCase().startsWith(`http://`)?J(Ie,{children:`Plaintext transport sends prompts and API keys without TLS.`}):null,J(H,{label:`Protocol`,children:e=>Y(B,{...e,value:w,onChange:e=>T(e.target.value),children:[J(`option`,{value:`chat_completions`,children:`Chat Completions (/v1/chat/completions)`}),J(`option`,{value:`responses`,children:`Responses (/v1/responses)`})]})})]}):null,f===`apiKey`?J(H,{label:`API key`,children:e=>J(V,{...e,type:`password`,value:se,autoComplete:`off`,onChange:e=>O(e.target.value)})}):null,J(H,{label:`Label`,hint:`How this account is named in the rack. Defaults to the provider.`,children:e=>J(V,{...e,value:m,placeholder:g,onChange:e=>h(e.target.value)})})]}):Y(D,{$gap:3,children:[Y(D,{$gap:1,children:[J(P,{children:`Step 1 — authorize`}),J(E,{$gap:2,children:Y(A,{as:`a`,href:_.authorizeUrl,target:`_blank`,rel:`noreferrer noopener`,$variant:`primary`,$size:`sm`,children:[J(De,{}),`Open `,g]})}),J(le,{value:_.authorizeUrl,label:`Copy authorization link`})]}),_.userCode===null?null:Y(D,{$gap:1,children:[J(P,{children:`Step 2 — enter this code`}),J(Fe,{children:_.userCode})]}),_.kind===`device`?Y(Le,{children:[u?.pasteHint??``,` Waiting for authorization…`]}):J(H,{label:`Authorization code`,hint:u?.pasteHint??``,...j===null?{}:{problem:j},children:e=>J(V,{...e,value:te,autoFocus:!0,placeholder:Ne(u),onChange:e=>ne(e.target.value)})})]}),j===null||_?.kind===`pkce`?null:J(Ie,{children:j})]})})}function ze({credentialId:e,windows:t,burn:n,pollIntervalMs:r,now:i}){let a=t.map(e=>({window:e,estimate:b(n,e.windowType),since:Se(p(e))})),o=a.map(e=>e.since).filter(e=>e!==null),c=o.length===0?0:Math.min(...o),l=s({credentialId:e,since:c},o.length>0),u=l.data?.samples??[],d=l.data?.gatewayRates??[],f=l.data?.truncated===!0;return J(D,{$gap:4,children:a.map(e=>J(Be,{window:e.window,estimate:e.estimate,since:e.since,samples:u.filter(t=>t.windowType===e.window.windowType&&t.observedAt>=(e.since??0)),gatewayRate:d.find(t=>t.windowType===e.window.windowType),truncated:f,pollIntervalMs:r,now:i},e.window.windowType))})}function Be({window:e,estimate:t,since:n,samples:r,gatewayRate:i,truncated:a,pollIntervalMs:o,now:s}){let c=e.limit===null?`${v(e.used)} used`:`${v(e.used)} of ${v(e.limit)} used`,l=u(e,s),d=t===void 0||h(e,s,o)||t.stale&&!l;return J(xe,{live:p(e),samples:r.map(p),since:n,now:s,truncated:a&&n!==null&&r.length>0&&(r[0]?.observedAt??0)>n,ratePerHourRatio:C(e,t),exhaustsAt:t?.exhaustsAt??null,survives:t?.survives??null,stale:d,rolledOver:l,spent:c,rateText:t?.ratePerHour===void 0||t.ratePerHour===null?`unknown`:`${v(t.ratePerHour)}/h`,extraFact:J(Ce,{legend:`This gateway accounts for`,value:i?.gatewayRatePerHour===void 0||i.gatewayRatePerHour===null?`unknown`:`${v(i.gatewayRatePerHour)} tokens/h`})})}function Ve({credential:e,busy:t,onOpenChange:n,onConfirm:i}){let o=a(e?.id??null),s=Date.now(),c=(o.data?.credits??[]).filter(e=>e.status===`available`).sort((e,t)=>(e.expiresAt??1/0)-(t.expiresAt??1/0))[0],l=o.isError||o.isFetching?0:o.data?.available??0,u=e===null?``:o.isFetching?`Reading the reset credits this account holds…`:o.isError?`Could not read reset credits for "${e.label}".`:l===0?`"${e.label}" has no reset credits available.`:`Spend one of ${l} reset ${l===1?`credit`:`credits`} on "${e.label}"? Its usage windows go back to zero at the provider, and the credit cannot be returned.`+(c?.expiresAt==null?``:` The credit spent is the one expiring soonest (${r(c.expiresAt,s)}).`);return J(L,{open:e!==null,onOpenChange:n,title:`Reset quota`,body:u,confirmLabel:`Spend reset`,busy:t||c===void 0||l===0,onConfirm:()=>{e!==null&&c!==void 0&&l>0&&i(e,c.id)}})}var He=X(M)`
21
+ border-left: 3px solid ${({$provider:e})=>z(e)};
22
+ `,Ue=X(V)`
23
+ width: 100%;
24
+ min-width: 140px;
25
+ height: 26px;
26
+ font-family: ${({theme:e})=>e.font.sans};
27
+ font-size: 12.5px;
28
+ background: transparent;
29
+ border-color: transparent;
30
+
31
+ &:hover:not(:disabled),
32
+ &:focus {
33
+ background: ${({theme:e})=>e.color.panelSunk};
34
+ border-color: ${({theme:e})=>e.color.ruleStrong};
35
+ }
36
+ `,We=X(_e)`
37
+ width: 62px;
38
+ height: 26px;
39
+ `,Ge=X.span`
40
+ display: block;
41
+ padding-left: 9px;
42
+ font-size: 11px;
43
+ color: ${({theme:e})=>e.color.inkDim};
44
+ `,Ke=X.div`
45
+ margin: 0 0 10px;
46
+ min-height: 16px;
47
+ font-size: 12px;
48
+ color: ${({theme:e})=>e.color.inkDim};
49
+ `,qe=X.p`
50
+ margin: 0;
51
+ `,Je=X.ul`
52
+ margin: 4px 0 0;
53
+ padding-left: 16px;
54
+ list-style: disc;
55
+ `,Ye=X.div`
56
+ display: grid;
57
+ /* Bar, figure, legend. The figure has a column of its own so the legends stay
58
+ aligned down the stack whether a window reads 4% or 100%. */
59
+ grid-template-columns: 96px 34px 1fr;
60
+ align-items: center;
61
+ min-width: 208px;
62
+ gap: 6px;
63
+ `,Xe=X(O)`
64
+ font-size: 11px;
65
+ text-align: right;
66
+ `,Ze=X.div`
67
+ display: flex;
68
+ flex-direction: column;
69
+ gap: 4px;
70
+ `;function Qe(){let e=g();return{pending:e.isPending,commit:(t,n)=>{e.mutate({id:t,patch:n})}}}function $e(e,t){if(t===void 0)return` The list of models could not be read, so whether any target is pinned to this account is unknown.`;let n=t.filter(t=>t.targets.some(t=>t.credentialId===e.id)).map(e=>e.id);return n.length===0?``:` ${n.length===1?`The model`:`The models`} ${n.join(`, `)} ${n.length===1?`pins a target`:`pin targets`} to this account. Those targets will fail rather than fall back to another account.`}function et(){let{cadence:n}=I(),a=ne(),s=x(n(1e4,`res:credentials`)),u=i(),p=te(),ee=o(),h=f(),g=t(),v=c(),[ie,ae]=q(null),C=l(),{commit:O}=Qe(),[k,F]=q(!1),[ce,z]=q(null),[le,B]=q([]),[V,_e]=q(new Set),[H,xe]=q(!1),[Se,Ce]=q(null),[G,K]=q(null),[X,Ee]=q(new Set),De=e=>Ee(t=>{let n=new Set(t);return n.delete(e)||n.add(e),n}),Z=a.data??[],Q=e=>Z.find(t=>t.id===e)?.label??e,Ae=e=>{let t=e[0];if(e.length===1&&t!==void 0){let e=Q(t.credentialId);return t.kind===`refreshed`||t.kind===`coalesced`?`Quota refreshed for ${e}.`:t.kind===`noData`?`No quota data reported for ${e}.`:t.kind===`cooldown`?`Quota refresh is cooling down for ${e}.`:t.kind===`unsupported`?`${e} does not report quota.`:t.kind===`disabled`?`${e} is disabled, so it was not probed.`:`Quota refresh failed for ${e}.`}let n=e.filter(e=>e.kind===`refreshed`||e.kind===`coalesced`).length,r=e.filter(e=>e.kind===`failed`).length,i=e.filter(e=>e.kind===`cooldown`).length,a=e.length-n-r-i;return[`Refreshed ${n} ${n===1?`account`:`accounts`}`,r===0?null:`${r} failed`,i===0?null:`${i} cooling down`,a===0?null:`${a} skipped`].filter(e=>e!==null).join(`; `).concat(`.`)},je=e=>e.filter(e=>e.kind===`failed`||e.kind===`cooldown`||e.kind===`noData`).map(e=>`${Q(e.credentialId)}: ${e.kind===`failed`?`failed`:e.kind===`cooldown`?`cooling down`:`no data reported`}`),Me=async e=>{z(null),B([]),e.kind===`all`?xe(!0):_e(t=>{let n=new Set(t);return n.add(e.credentialId),n});try{let t=await g.mutateAsync(e);z(Ae(t.outcomes)),B(t.outcomes.length>1?je(t.outcomes):[])}catch{z(e.kind===`all`?`Quota refresh could not be started.`:`Quota refresh could not be started for ${Q(e.credentialId)}.`)}finally{xe(!1),e.kind===`one`&&_e(t=>{let n=new Set(t);return n.delete(e.credentialId),n})}},$=Date.now(),Ne=ee.data??[],Pe=e=>d(Ne,e)?.order??1/0,Fe=[...new Set(Z.map(e=>e.provider))].sort((e,t)=>Pe(e)-Pe(t)),Ie=e=>d(Ne,e)?.label??e,Le=m(s.data?.health??[],e=>e.credentialId),Be=m(s.data?.quota??[],e=>e.credentialId),et=m(s.data?.burn??[],e=>e.credentialId),tt=u.data?.quotaPollIntervalMs??3e5,nt=Z.filter(e=>e.enabled).length,rt=a.isLoading?`Reading connected accounts…`:Z.length===0?`No provider credentials are connected, so every request fails at the router.`:`${nt} of ${Z.length} accounts are enabled and eligible for routing.`;return Y(Te,{children:[J(R,{legend:`Accounts`,title:`Provider accounts`,summary:rt,actions:Y(E,{$gap:1,children:[C?Y(A,{type:`button`,$variant:`ghost`,disabled:H||V.size>0,onClick:()=>void Me({kind:`all`}),children:[J(ke,{}),H?`Refreshing quota…`:`Refresh all quota`]}):null,Y(A,{type:`button`,$variant:`primary`,onClick:()=>F(!0),children:[J(fe,{}),`Connect an account`]})]})}),Y(Ke,{children:[J(qe,{role:`status`,"aria-live":`polite`,children:ce??``}),le.length===0?null:J(Je,{children:le.map(e=>J(`li`,{children:e},e))})]}),a.isError?J(M,{legend:`Accounts`,children:J(j,{error:a.error,onRetry:()=>void a.refetch()})}):a.isLoading?J(M,{legend:`Accounts`,children:J(N,{rows:5})}):Z.length===0?J(M,{legend:`Accounts`,children:J(se,{legend:`Nothing connected`,message:`Connect a provider account to give the router something to dispatch to. Tokens are encrypted at rest and never shown again.`,action:J(A,{type:`button`,$variant:`primary`,$size:`sm`,onClick:()=>F(!0),children:`Connect an account`})})}):J(D,{$gap:4,children:Fe.map(t=>{let n=Z.filter(e=>e.provider===t);return J(He,{$provider:t,legend:Ie(t),meta:`${n.length} account${n.length===1?``:`s`}`,flush:!0,children:J(T,{children:Y(be,{children:[J(`thead`,{children:Y(`tr`,{children:[J(W,{$width:`24%`,children:`Account`}),J(W,{$width:`20%`,children:`Sign-in`}),J(W,{$align:`right`,$width:`86px`,children:`Tier`}),J(W,{$align:`right`,$width:`94px`,children:`Weight`}),J(W,{$align:`center`,$width:`86px`,children:`Enabled`}),J(W,{$width:`240px`,children:`Quota`}),J(W,{$align:`right`,$width:`130px`,children:`Token expires`}),J(W,{$width:`144px`})]})}),J(`tbody`,{children:n.map(t=>{let n=re(Le.get(t.id)??[],$,t.enabled,t.disabledReason),i=Be.get(t.id)??[],a=et.get(t.id)??[],o=oe(i),s=X.has(t.id);return Y(we,{children:[Y(ye,{children:[Y(U,{children:[Y(E,{$gap:2,children:[J(S,{state:n.state,label:n.note===``?`healthy`:n.note}),J(Ue,{defaultValue:t.label,"aria-label":`Label for ${t.label}`,onBlur:e=>{let n=e.target.value.trim();if(n.length===0||n===t.label){e.target.value=t.label;return}O(t.id,{label:n})}})]}),n.note===``?null:J(Ge,{children:n.note})]}),J(U,{children:Y(E,{$gap:1,children:[J(ge,{children:t.authType===`oauth`?`oauth`:`api key`}),t.accountEmail===null?null:J(P,{children:t.accountEmail})]})}),J(U,{$align:`right`,children:J(We,{min:1,step:1,defaultValue:t.tier,"aria-label":`Tier for ${t.label}`,onBlur:e=>{let n=Number(e.target.value);if(!Number.isInteger(n)||n<1||n===t.tier){e.target.value=String(t.tier);return}O(t.id,{tier:n})}})}),J(U,{$align:`right`,children:J(We,{min:.1,step:.1,defaultValue:t.weight,"aria-label":`Weight for ${t.label}`,onBlur:e=>{let n=Number(e.target.value);if(!Number.isFinite(n)||n<=0||n===t.weight){e.target.value=String(t.weight);return}O(t.id,{weight:n})}})}),J(U,{$align:`center`,children:J(he,{checked:t.enabled,label:`Route to ${t.label}`,onCheckedChange:e=>O(t.id,{enabled:e})})}),J(U,{children:o.length===0?J(P,{children:`unknown`}):J(Ze,{children:o.map(({window:t,fraction:n})=>Y(Ye,{children:[J(ve,{fraction:n,label:`${y[t.windowType]} window, ${Math.round(n*100)}% used`}),J(Xe,{children:e(n,0)}),J(P,{children:_(t,$,tt,r,b(a,t.windowType))})]},t.windowType))})}),J(U,{$align:`right`,$mono:!0,children:t.expiresAt===null?`never`:r(t.expiresAt,$)}),J(U,{$align:`right`,children:Y(E,{$gap:1,$justify:`flex-end`,children:[i.length===0?null:J(w,{type:`button`,$variant:`ghost`,$size:`sm`,"aria-expanded":s,"aria-label":`${s?`Hide`:`Show`} quota history for ${t.label}`,title:`${s?`Hide`:`Show`} quota history for ${t.label}`,onClick:()=>De(t.id),children:J(s?ue:de,{})}),C&&t.authType===`oauth`&&d(Ne,t.provider)?.quotaResets===!0?J(w,{type:`button`,$variant:`ghost`,$size:`sm`,"aria-label":`Reset quota for ${t.label}`,title:`Reset quota for ${t.label}`,onClick:()=>ae(t),children:J(pe,{})}):null,C&&t.authType===`oauth`?J(w,{type:`button`,$variant:`ghost`,$size:`sm`,"aria-label":`Reconnect ${t.label}`,title:`Reconnect ${t.label}`,onClick:()=>Ce(t),children:J(Oe,{})}):null,C?J(w,{type:`button`,$variant:`ghost`,$size:`sm`,disabled:H||V.has(t.id),"aria-label":V.has(t.id)?`Refreshing quota for ${t.label}`:`Refresh quota for ${t.label}`,title:`Refresh quota for ${t.label}`,onClick:()=>void Me({kind:`one`,credentialId:t.id}),children:J(ke,{})}):null,J(w,{type:`button`,$variant:`ghost`,$size:`sm`,"aria-label":`Remove ${t.label}`,title:`Remove ${t.label}`,onClick:()=>K(t),children:J(me,{})})]})})]}),s?J(ye,{children:J(U,{colSpan:9,children:J(ze,{credentialId:t.id,windows:i,burn:a,pollIntervalMs:tt,now:$})})}):null]},t.id)})})]})})},t)})}),J(Re,{open:k||Se!==null,credentials:a.data??[],credential:Se,onOpenChange:e=>{e?F(!0):(F(!1),Ce(null))},onConnected:()=>void a.refetch()}),J(Ve,{credential:ie,busy:v.isPending,onOpenChange:e=>{e||ae(null)},onConfirm:(e,t)=>{z(null),B([]),v.mutate({credentialId:e.id,creditId:t},{onSuccess:t=>z(t.quotaRefreshed?`Quota reset for ${e.label}.`:`Quota reset for ${e.label}; the meter updates at the next poll.`),onError:()=>z(`Quota reset failed for ${e.label}.`),onSettled:()=>ae(null)})}}),J(L,{open:G!==null,onOpenChange:e=>{e||K(null)},title:`Remove account`,body:G===null?``:`Removing "${G.label}" deletes its stored token. Any model target pointing at ${Ie(G.provider)} loses this account, and reconnecting means authorizing again.`+$e(G,p.data),confirmLabel:`Remove account`,busy:h.isPending,onConfirm:()=>{G!==null&&h.mutate(G.id,{onSettled:()=>K(null)})}})]})}var tt=et;export{tt as component};
@@ -1,4 +1,4 @@
1
- import{At as e,B as t,j as n,lt as r}from"./Lamp-Dk9XrTCg.js";import{S as i,a,n as o,o as s,s as ee,t as c,x as l}from"./Panel-CsovmtxF.js";import{D as u,t as d}from"./Rack-CDUOJkS2.js";import{a as f,c as p,o as m,s as h}from"./index-D1RDaq3l.js";import{i as g}from"./Field-DG1317zr.js";import{useQueryClient as te}from"@tanstack/react-query";import{useLayoutEffect as ne,useMemo as _,useRef as v,useState as y}from"react";import{Fragment as b,jsx as x,jsxs as S}from"react/jsx-runtime";import C from"styled-components";var w={debug:10,info:20,warn:30,error:40};function T(e){return typeof e==`string`&&e in w}function E(e,t){return!T(t)||e.level===null||w[e.level]>=w[t]}function D(e){if(typeof e!=`object`||!e)return null;let{raw:t,at:n,level:r,msg:i}=e;return typeof t!=`string`||n!==null&&typeof n!=`number`||r!==null&&!T(r)||i!==null&&typeof i!=`string`?null:{raw:t,at:n,level:r,msg:i}}function re(e){if(typeof e!=`object`||!e)return null;let{lines:t}=e;if(!Array.isArray(t))return null;let n=[];for(let e of t){let t=D(e);if(t===null)return null;n.push(t)}return n}var O=[100,200,500],ie=[{value:``,label:`All levels`},{value:`debug`,label:`Debug and above`},{value:`info`,label:`Info and above`},{value:`warn`,label:`Warnings and errors`},{value:`error`,label:`Errors only`}],ae=C(i)`
1
+ import{At as e,B as t,j as n,lt as r}from"./Lamp-Dk9XrTCg.js";import{S as i,a,n as o,o as s,s as ee,t as c,x as l}from"./Panel-CsovmtxF.js";import{D as u,t as d}from"./Rack-CDUOJkS2.js";import{a as f,c as p,o as m,s as h}from"./index-Bzh27906.js";import{i as g}from"./Field-DG1317zr.js";import{useQueryClient as te}from"@tanstack/react-query";import{useLayoutEffect as ne,useMemo as _,useRef as v,useState as y}from"react";import{Fragment as b,jsx as x,jsxs as S}from"react/jsx-runtime";import C from"styled-components";var w={debug:10,info:20,warn:30,error:40};function T(e){return typeof e==`string`&&e in w}function E(e,t){return!T(t)||e.level===null||w[e.level]>=w[t]}function D(e){if(typeof e!=`object`||!e)return null;let{raw:t,at:n,level:r,msg:i}=e;return typeof t!=`string`||n!==null&&typeof n!=`number`||r!==null&&!T(r)||i!==null&&typeof i!=`string`?null:{raw:t,at:n,level:r,msg:i}}function re(e){if(typeof e!=`object`||!e)return null;let{lines:t}=e;if(!Array.isArray(t))return null;let n=[];for(let e of t){let t=D(e);if(t===null)return null;n.push(t)}return n}var O=[100,200,500],ie=[{value:``,label:`All levels`},{value:`debug`,label:`Debug and above`},{value:`info`,label:`Info and above`},{value:`warn`,label:`Warnings and errors`},{value:`error`,label:`Errors only`}],ae=C(i)`
2
2
  gap: ${({theme:e})=>e.space(2)};
3
3
  flex-wrap: wrap;
4
4
  `,k=C(g)`
@@ -1,4 +1,4 @@
1
- import{jt as e}from"./Lamp-Dk9XrTCg.js";import{t}from"./preload-helper-B7KDmXJ9.js";import{T as n,a as r,d as i,m as a,o,p as s,r as c,s as l,u}from"./Panel-CsovmtxF.js";import{t as d}from"./Rack-CDUOJkS2.js";import{t as f}from"./index-D1RDaq3l.js";import{Component as p,Suspense as m,createContext as h,lazy as g,useContext as _,useMemo as v}from"react";import{Fragment as y,jsx as b,jsxs as x}from"react/jsx-runtime";import S from"styled-components";import{pluginApiPath as C}from"@omnigateway/dashboard-sdk";var w=new Map;function T(e){let t=w.get(e);if(t!==void 0)return t;let n={get:(t,n)=>i(C(e,t),n),post:(t,n)=>s(C(e,t),n),put:(t,n)=>a(C(e,t),n),del:t=>u(C(e,t))};return w.set(e,n),n}var E=h(e=>t(()=>import(e),[]));E.Provider;function D(){return _(E)}function O(e,t){let n=e?.default;if(n==null)throw Error(`plugin ${t} has no default export from definePluginUI`);if(typeof n.mount!=`function`)throw Error(`plugin ${t} exported a default without a mount function`);return n}function k(e,t,n){return g(async()=>{let r=O(await n(t),e);return{default:()=>r.mount({pluginId:e,api:T(e)})}})}var A=S.p`
1
+ import{jt as e}from"./Lamp-Dk9XrTCg.js";import{t}from"./preload-helper-B7KDmXJ9.js";import{T as n,a as r,d as i,m as a,o,p as s,r as c,s as l,u}from"./Panel-CsovmtxF.js";import{t as d}from"./Rack-CDUOJkS2.js";import{t as f}from"./index-Bzh27906.js";import{Component as p,Suspense as m,createContext as h,lazy as g,useContext as _,useMemo as v}from"react";import{Fragment as y,jsx as b,jsxs as x}from"react/jsx-runtime";import S from"styled-components";import{pluginApiPath as C}from"@omnigateway/dashboard-sdk";var w=new Map;function T(e){let t=w.get(e);if(t!==void 0)return t;let n={get:(t,n)=>i(C(e,t),n),post:(t,n)=>s(C(e,t),n),put:(t,n)=>a(C(e,t),n),del:t=>u(C(e,t))};return w.set(e,n),n}var E=h(e=>t(()=>import(e),[]));E.Provider;function D(){return _(E)}function O(e,t){let n=e?.default;if(n==null)throw Error(`plugin ${t} has no default export from definePluginUI`);if(typeof n.mount!=`function`)throw Error(`plugin ${t} exported a default without a mount function`);return n}function k(e,t,n){return g(async()=>{let r=O(await n(t),e);return{default:()=>r.mount({pluginId:e,api:T(e)})}})}var A=S.p`
2
2
  font-size: 13px;
3
3
  color: ${({theme:e})=>e.color.down};
4
4
  `,j=S.p`
@@ -1,4 +1,4 @@
1
- import{_ as e,i as t,y as n}from"./shared-DDpLUhCp.js";import{$ as r,$t as i,F as a,I as o,K as ee,L as s,V as te,W as ne,at as re,et as ie,g as c,it as ae,j as l,l as oe,nt as u,ot as d,r as f,rt as se,tt as p,u as ce}from"./Lamp-Dk9XrTCg.js";import{A as m,C as h,S as g,T as _,b as v,k as y,o as le,r as ue,s as de,x as b,y as x}from"./Panel-CsovmtxF.js";import{D as fe,i as pe,t as me,x as S}from"./Rack-CDUOJkS2.js";import{a as he,i as ge,n as _e,r as ve,t as ye}from"./RequestTable-i3TtCB9m.js";import{t as C}from"./chevron-down-Bb5ZGvwk.js";import{t as w}from"./chevron-right-hwF5mD6-.js";import{i as T,r as E}from"./index-D1RDaq3l.js";import{i as be}from"./Field-DG1317zr.js";import{t as D}from"./Meter-stpt3vQu.js";import{i as O,n as k,r as A,t as j}from"./Table-CVDZ69Zx.js";import{n as xe,r as M}from"./WindowChart-Bqbl-KFO.js";import{i as N,n as P,r as Se,t as Ce}from"./SummaryDeck-DrzTQQo5.js";import{Fragment as we,useMemo as F,useState as I}from"react";import{Fragment as Te,jsx as L,jsxs as R}from"react/jsx-runtime";import z from"styled-components";var B=z.div`
1
+ import{_ as e,i as t,y as n}from"./shared-DDpLUhCp.js";import{$ as r,$t as i,F as a,I as o,K as ee,L as s,V as te,W as ne,at as re,et as ie,g as c,it as ae,j as l,l as oe,nt as u,ot as d,r as f,rt as se,tt as p,u as ce}from"./Lamp-Dk9XrTCg.js";import{A as m,C as h,S as g,T as _,b as v,k as y,o as le,r as ue,s as de,x as b,y as x}from"./Panel-CsovmtxF.js";import{D as fe,i as pe,t as me,x as S}from"./Rack-CDUOJkS2.js";import{a as he,i as ge,n as _e,r as ve,t as ye}from"./RequestTable-i3TtCB9m.js";import{t as C}from"./chevron-down-Bb5ZGvwk.js";import{t as w}from"./chevron-right-hwF5mD6-.js";import{i as T,r as E}from"./index-Bzh27906.js";import{i as be}from"./Field-DG1317zr.js";import{t as D}from"./Meter-stpt3vQu.js";import{i as O,n as k,r as A,t as j}from"./Table-CVDZ69Zx.js";import{n as xe,r as M}from"./WindowChart-Bqbl-KFO.js";import{i as N,n as P,r as Se,t as Ce}from"./SummaryDeck-DrzTQQo5.js";import{Fragment as we,useMemo as F,useState as I}from"react";import{Fragment as Te,jsx as L,jsxs as R}from"react/jsx-runtime";import z from"styled-components";var B=z.div`
2
2
  display: grid;
3
3
  grid-template-areas:
4
4
  "chassis"
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_app-CSru2YTE.js","assets/Panel-CsovmtxF.js","assets/client-BcXc3lek.js","assets/shared-DDpLUhCp.js","assets/Lamp-Dk9XrTCg.js","assets/Rack-CDUOJkS2.js","assets/RequestTable-i3TtCB9m.js","assets/TokenBreakdown-BC6nqo1v.js","assets/chevron-right-hwF5mD6-.js","assets/dist-BBGxva0Y.js","assets/Chip-D0XSbQUr.js","assets/Field-DG1317zr.js","assets/Table-CVDZ69Zx.js","assets/chevron-down-Bb5ZGvwk.js","assets/Meter-stpt3vQu.js","assets/WindowChart-Bqbl-KFO.js","assets/SummaryDeck-DrzTQQo5.js","assets/Readout-DlT5oxGO.js","assets/login-GB0ZGUvA.js","assets/reasons-Du1OBWAM.js","assets/_app.index-BV1kJJjA.js","assets/_app.accounts-B2lQkMb0.js","assets/CopyValue-DAlmkISB.js","assets/plus-BgcHxxIr.js","assets/rotate-ccw-Do43Argv.js","assets/trash-00950_yY.js","assets/Toggle-CdMD58sy.js","assets/_app.console-a2TJDoBC.js","assets/_app.database-CqSoTi2l.js","assets/_app.keys-Dq5O0AG9.js","assets/_app.logs-PjRK5wqy.js","assets/_app.models-BfmeeB5e.js","assets/_app.settings-5i-vvT-H.js","assets/_app.usage--5qFtU1W.js","assets/_app.plugins._pluginId-Owb05aFv.js","assets/preload-helper-B7KDmXJ9.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_app-CSru2YTE.js","assets/Panel-CsovmtxF.js","assets/client-DUhmc9Si.js","assets/shared-DDpLUhCp.js","assets/Lamp-Dk9XrTCg.js","assets/Rack-CDUOJkS2.js","assets/RequestTable-i3TtCB9m.js","assets/TokenBreakdown-BC6nqo1v.js","assets/chevron-right-hwF5mD6-.js","assets/dist-BBGxva0Y.js","assets/Chip-D0XSbQUr.js","assets/Field-DG1317zr.js","assets/Table-CVDZ69Zx.js","assets/chevron-down-Bb5ZGvwk.js","assets/Meter-stpt3vQu.js","assets/WindowChart-Bqbl-KFO.js","assets/SummaryDeck-DrzTQQo5.js","assets/Readout-DlT5oxGO.js","assets/login-DbXxdOl5.js","assets/reasons-Du1OBWAM.js","assets/_app.index-BV1kJJjA.js","assets/_app.accounts-2syjcpos.js","assets/CopyValue-DAlmkISB.js","assets/plus-BgcHxxIr.js","assets/rotate-ccw-Do43Argv.js","assets/trash-00950_yY.js","assets/Toggle-CdMD58sy.js","assets/_app.console-Dxkf_zSS.js","assets/_app.database-CqSoTi2l.js","assets/_app.keys-Dq5O0AG9.js","assets/_app.logs-PjRK5wqy.js","assets/_app.models-BfmeeB5e.js","assets/_app.settings-5i-vvT-H.js","assets/_app.usage--5qFtU1W.js","assets/_app.plugins._pluginId-BSlXzAHP.js","assets/preload-helper-B7KDmXJ9.js"])))=>i.map(i=>d[i]);
2
2
  import{An as e,Cn as t,Dn as n,En as r,Fn as i,H as a,In as o,K as s,Mt as c,Nn as l,On as u,Pn as d,Rn as f,Tn as p,W as m,_n as h,an as g,bn as _,cn as v,dn as y,fn as b,gn as x,hn as S,jn as C,kn as w,ln as T,mn as E,sn as D,un as ee,vn as te,wn as ne,xn as re,yn as ie}from"./Lamp-Dk9XrTCg.js";import{a as ae,c as oe,i as se,n as O,o as ce,r as k,s as le,t as A}from"./preload-helper-B7KDmXJ9.js";import{M as ue,T as de,d as fe,j,k as pe,l as me,r as he,s as ge,y as _e}from"./Panel-CsovmtxF.js";import{C as ve,E as ye,T as be,n as xe}from"./Rack-CDUOJkS2.js";import{MutationCache as Se,QueryCache as Ce,QueryClient as we,QueryClientProvider as Te,useQueryClient as Ee}from"@tanstack/react-query";import*as M from"react";import{StrictMode as De,createContext as Oe,use as ke,useEffect as N,useRef as Ae,useState as je,useSyncExternalStore as Me}from"react";import{Fragment as Ne,jsx as P,jsxs as F}from"react/jsx-runtime";import{createRoot as Pe}from"react-dom/client";import Fe from"styled-components";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();function I(e){return e?.isNotFound===!0}function Ie(){try{return sessionStorage}catch{return}}var Le=`tsr-scroll-restoration-v1_3`,Re=Ie();function ze(){try{return JSON.parse(Re?.getItem(`tsr-scroll-restoration-v1_3`)||`{}`)}catch{return{}}}function Be(){try{Re?.setItem(Le,JSON.stringify(L))}catch{}}var L=ze(),Ve=`data-scroll-restoration-id`,He=e=>e.state.__TSR_key||e.href;function Ue(e){let t=e.getAttribute(Ve);if(t)return`[${Ve}="${t}"]`;let n=``,r=e,i;for(;i=r.parentNode;){let e=1,t=r;for(;t=t.previousElementSibling;)e++;let a=`${r.localName}:nth-child(${e})`;n=n?`${a} > ${n}`:a,r=i}return n}var We=!1,Ge=`window`;function Ke(e){try{return typeof e==`function`?e():document.querySelector(e)}catch{}}function qe(e){let t=new Set;for(let n of e){if(n===Ge)continue;let e=Ke(n);e&&t.add(e)}return t}function Je(e,t){let n=t??e.options.scrollRestoration,r=e._scroll;n&&(r.restoring=!0);let i=e.options.getScrollRestorationKey||He,a=new Set,o=e=>{let t=L[e]||={};for(let e of a)e===document?t[Ge]={scrollX,scrollY}:e.isConnected&&(t[Ue(e)]={scrollX:e.scrollLeft,scrollY:e.scrollTop})};n&&!r.restoration&&(r.restoration=!0,We=!1,history.scrollRestoration=`manual`,document.addEventListener(`scroll`,e=>{We||a.add(e.target)},!0),e.subscribe(`onBeforeLoad`,e=>{e.fromLocation&&o(i(e.fromLocation)),a.clear()}),addEventListener(`pagehide`,()=>{o(i(e.stores.resolvedLocation.get()??e.stores.location.get())),Be()})),!r.reset&&(r.reset=!0,e.subscribe(`onRendered`,t=>{let n=e.options.scrollRestorationBehavior,o=e.options.scrollToTopSelectors,s=r.next,c=r.hash,l;if(a.clear(),r.next=!0,r.hash=!1,typeof e.options.scrollRestoration==`function`&&!e.options.scrollRestoration({location:e.latestLocation}))return;let u=i(t.toLocation),d=t.fromLocation&&i(t.fromLocation);if(r.restoring&&d&&d!==u){let e=L[d];if(e){let t=L[u];for(let n in e){if(n===Ge){if(s)continue}else{let e=Ke(n);if(!e||s&&o&&(l??=qe(o),l.has(e)))continue}t||=L[u]={},t[n]??=e[n]}}}We=!0;try{let e=t.toLocation.hash,i=t.toLocation.state.__hashScrollIntoViewOptions??!0,a=!1;if(s){!e&&o&&(l??=qe(o));let t=e&&i&&c,s=r.restoring?L[u]:void 0;if(s)for(let e in s){let{scrollX:r,scrollY:i}=s[e];if(e===Ge){if(t)continue;scrollTo({top:i,left:r,behavior:n}),a=!0}else{let t=Ke(e);t&&(t.scrollLeft=r,t.scrollTop=i,l?.delete(t))}}if(!e){let e={top:0,left:0,behavior:n};if(a||scrollTo(e),l)for(let t of l)t.scrollTo(e)}}!a&&e&&i&&document.getElementById(e)?.scrollIntoView(i)}finally{We=!1}}))}function Ye(e,t=String){let n;for(let r in e){let i=e[r];i!==void 0&&(n||=new URLSearchParams).set(r,t(i))}return n?n.toString():``}function Xe(e){return e?e===`false`?!1:e===`true`?!0:e*0==0&&+e+``===e?+e:e:``}function Ze(e){let t=new URLSearchParams(e),n=Object.create(null);for(let[e,r]of t.entries()){let t=n[e];t==null?n[e]=Xe(r):Array.isArray(t)?t.push(Xe(r)):n[e]=[t,Xe(r)]}return n}var Qe=/^(?:\s|["[{\d-]|fa|nu|tr)/,$e=tt(JSON.parse),et=nt(JSON.stringify,JSON.parse);function tt(e){let t=e===JSON.parse;return n=>{n[0]===`?`&&(n=n.substring(1));let r=Ze(n);for(let n in r){let i=r[n];if(typeof i==`string`){if(t&&!Qe.test(i))continue;try{r[n]=e(i)}catch{}}}return r}}function nt(e,t){let n=t===JSON.parse;function r(r){if(r&&typeof r==`object`)try{return e(r)}catch{}else if(t&&typeof r==`string`){if(n&&!Qe.test(r))return r;try{return t(r),e(r)}catch{}}return r}return e=>{let t=Ye(e,r);return t?`?${t}`:``}}function rt(e){return{input:({url:t})=>{for(let n of e)t=at(n,t);return t},output:({url:t})=>{for(let n=e.length-1;n>=0;n--)t=ot(e[n],t);return t}}}function it(e){let t=b(e.basepath),n=`/${t}`,r=e.caseSensitive?n:n.toLowerCase(),i=`${r}/`;return{input:({url:t})=>{let a=e.caseSensitive?t.pathname:t.pathname.toLowerCase();return a===r?t.pathname=`/`:a.startsWith(i)&&(t.pathname=t.pathname.slice(n.length)),t},output:({url:e})=>(e.pathname=ee([`/`,t,e.pathname]),e)}}function at(e,t){let n=e?.input?.({url:t});if(n){if(typeof n==`string`)return new URL(n);if(n instanceof URL)return n}return t}function ot(e,t){let n=e?.output?.({url:t});if(n){if(typeof n==`string`)return new URL(n);if(n instanceof URL)return n}return t}function st(e,t){let{createMutableStore:n,createReadonlyStore:r,batch:i}=t,a=new Map,o=n(`idle`),s=n(e),c=n(void 0),l=n([]),u=r(()=>l.get().map(e=>a.get(e).get())),d=r(()=>({status:o.get(),isLoading:o.get()===`pending`,matches:u.get(),location:s.get(),resolvedLocation:c.get()}));function f(e){let t=a.get(e);return t||(t=n(void 0),a.set(e,t)),t}let p={status:o,location:s,resolvedLocation:c,ids:l,matches:u,byRoute:a,__store:d,getMatchStore:f,setMatches:m};function m(e){let t=l.get(),n=e.map(e=>e.routeId);i(()=>{ne(t,n)||l.set(n);for(let e of t)n.includes(e)||a.get(e).set(()=>void 0);for(let t of e){let e=f(t.routeId);e.get()!==t&&e.set(t)}})}return p}var R=`__TSR_index`,ct=`popstate`,lt=`beforeunload`,ut=/^[\x00-\x20]*(?:[\\/][\t\n\r]*){2,}/;function dt(e){let t=ut.exec(e);return t?`/`+e.slice(t[0].length):e}function ft(e){return/[\x00-\x1f\x7f]/.test(e)&&(e=e.replace(/[\x00-\x1f\x7f]/g,e=>`
3
3
  \r`.includes(e)?``:encodeURIComponent(e))),dt(e)}function pt(e){let t=e.getLocation(),n=new Set,r=r=>{t=e.getLocation(),n.forEach(e=>e({location:t,action:r}))},i=n=>{e.notifyOnIndexChange??!0?r(n):t=e.getLocation()},a=async({task:n,navigateOpts:r,...i})=>{if(r?.ignoreBlocker??!1){n();return}let a=e.getBlockers?.()??[],o=i.type===`PUSH`||i.type===`REPLACE`;if(typeof document<`u`&&a.length&&o)for(let n of a){let r=gt(i.path,i.state);if(await n.blockerFn({currentLocation:t,nextLocation:r,action:i.type})){e.onBlocked?.();return}}n()};return{get location(){return t},get length(){return e.getLength()},subscribers:n,subscribe:e=>(n.add(e),()=>{n.delete(e)}),push:(n,i,o)=>{let s=t.state[R];i=mt(s+1,i),a({task:()=>{e.pushState(n,i),r({type:`PUSH`})},navigateOpts:o,type:`PUSH`,path:n,state:i})},replace:(n,i,o)=>{let s=t.state[R];i=mt(s,i),a({task:()=>{e.replaceState(n,i),r({type:`REPLACE`})},navigateOpts:o,type:`REPLACE`,path:n,state:i})},go:(t,n)=>{a({task:()=>{e.go(t,n?.ignoreBlocker??!1),i({type:`GO`,index:t})},navigateOpts:n,type:`GO`})},back:t=>{a({task:()=>{e.back(t?.ignoreBlocker??!1),i({type:`BACK`})},navigateOpts:t,type:`BACK`})},forward:t=>{a({task:()=>{e.forward(t?.ignoreBlocker??!1),i({type:`FORWARD`})},navigateOpts:t,type:`FORWARD`})},canGoBack:()=>t.state[R]!==0,createHref:t=>e.createHref(t),block:t=>{if(!e.setBlockers)return()=>{};let n=e.getBlockers?.()??[];return e.setBlockers([...n,t]),()=>{let n=e.getBlockers?.()??[];e.setBlockers?.(n.filter(e=>e!==t))}},flush:()=>e.flush?.(),destroy:()=>e.destroy?.(),notify:r,_getBlockers:()=>e.getBlockers?.()??[]}}function mt(e,t){t||={};let n=_t();return{...t,key:n,__TSR_key:n,[R]:e}}function ht(e){let t=e?.window??(typeof document<`u`?window:void 0),n=t.history.pushState,r=t.history.replaceState,i=[],a=()=>i,o=e=>i=e,s=t=>ft(e?.createHref?e.createHref(t):t),c=e?.parseLocation??(()=>gt(`${t.location.pathname}${t.location.search}${t.location.hash}`,t.history.state));if(!t.history.state?.__TSR_key&&!t.history.state?.key){let e=_t();t.history.replaceState({[R]:0,key:e,__TSR_key:e},``)}let l=c(),u,d=!1,f=!1,p=!1,m=!1,h=()=>l,g,_=()=>{g&&(S._ignoreSubscribers=!0,(g[2]?t.history.pushState:t.history.replaceState)(g[1],``,g[0]),S._ignoreSubscribers=!1,g=void 0,u=void 0)},v=(t,n,r)=>{let i=e?.createHref?s(n):void 0,a=!!g;a||(u=l),l=gt(n,r),g=[i??l.href,r,g?.[2]||t],a||queueMicrotask(()=>_())},y=e=>{l=c(),S.notify({type:e})},b=async()=>{if(m=!1,f){f=!1;return}let e=c(),n=e.state[R]-l.state[R],r=n===1,i=n===-1,o=!r&&!i||d;d=!1;let s=o?`GO`:i?`BACK`:`FORWARD`,u=o?{type:`GO`,index:n}:{type:i?`BACK`:`FORWARD`};if(p)p=!1;else{let r=a();if(typeof document<`u`&&r.length){for(let i of r)if(await i.blockerFn({currentLocation:l,nextLocation:e,action:s})){f=!0,t.history.go(-n),S.notify(u);return}}}l=c(),S.notify(u)},x=e=>{if(m){m=!1;return}let t=!1,n=a();if(typeof document<`u`&&n.length)for(let e of n){let n=e.enableBeforeUnload??!0;if(n===!0){t=!0;break}if(typeof n==`function`&&n()===!0){t=!0;break}}if(t)return e.preventDefault(),e.returnValue=``},S=pt({getLocation:h,getLength:()=>t.history.length,pushState:(e,t)=>v(!0,e,t),replaceState:(e,t)=>v(!1,e,t),back:e=>(e&&(p=!0,m=!0),t.history.back()),forward:e=>{e&&(p=!0,m=!0),t.history.forward()},go:(e,n)=>{d=!0,n&&(p=!0,m=!0),t.history.go(e)},createHref:e=>s(e),flush:_,destroy:()=>{t.history.pushState=n,t.history.replaceState=r,t.removeEventListener(lt,x,{capture:!0}),t.removeEventListener(ct,b)},onBlocked:()=>{u&&l!==u&&(l=u)},getBlockers:a,setBlockers:o,notifyOnIndexChange:!1});return S._ignoreNextBeforeUnload=e=>{m=!1;try{e=new URL(e,t.document.baseURI).href,m=/^https?:/.test(e)&&(!e.includes(`#`)||e.split(`#`)[0]!==t.location.href.split(`#`)[0])}catch{}},t.addEventListener(lt,x,{capture:!0}),t.addEventListener(ct,b),t.history.pushState=function(...e){let r=n.apply(t.history,e);return S._ignoreSubscribers||y(`PUSH`),r},t.history.replaceState=function(...e){let n=r.apply(t.history,e);return S._ignoreSubscribers||y(`REPLACE`),n},S}function gt(e,t){let n=ft(e),r=n.indexOf(`#`),i=n.indexOf(`?`),a=_t();return{href:n,pathname:n.substring(0,r>0?i>0?Math.min(r,i):r:i>0?i:n.length),hash:r>-1?n.substring(r):``,search:i>-1?n.slice(i,r===-1?void 0:r):``,state:t||{[R]:0,key:a,__TSR_key:a}}}function _t(){return(Math.random()+1).toString(36).substring(7)}function vt(e,t){return e.protocol!==`http:`&&e.protocol!==`https:`||e.origin!==t||!!e.username||!!e.password}function yt(e){return e.pathname+e.search+e.hash}function bt(e){return e.options.loader||e.options.beforeLoad||e.lazyFn||e.options.component?.preload||e.options.pendingComponent?.preload}function xt(e,t){return{fromLocation:t,toLocation:e,pathChanged:t?.pathname!==e.pathname,hrefChanged:t?.href!==e.href,hashChanged:t?.hash!==e.hash}}function St({key:e,__TSR_key:t,__TSR_index:n,__hashScrollIntoViewOptions:r,...i}){return i}function Ct(e){return e.findIndex(e=>e.status===`error`||e.status===`notFound`||e._notFound)+1}function wt(e,t,n,r,i,a){r&&(t=t.slice(0,r)),i&&(n=n.slice(0,i));for(let r of t){if(a&&e._tx!==a)return;n.some(e=>e.routeId===r.routeId)||e.routesById[r.routeId].options.onLeave?.(r)}for(let r of n){if(a&&e._tx!==a)return;e.routesById[r.routeId].options[t.some(e=>e.routeId===r.routeId)?`onStay`:`onEnter`]?.(r)}}var Tt=class{constructor(a,s){this.tempLocationKey=`${Math.round(Math.random()*1e7)}`,this._scroll={next:!0},this.subscribers=new Set,this._cache=new Map,this._committed=[],this.routeBranchCache=new WeakMap,this.lightweightCache=new WeakMap,this.startTransition=async e=>(e(),!1),this.update=e=>{let t=this.options,n=this.basepath??t?.basepath??`/`,r=this.basepath===void 0,i=t?.rewrite;if(this.options={...t,...e},this.isServer=this.options.isServer??!1??typeof document>`u`,this.protocolAllowlist=new Set(this.options.protocolAllowlist),this.options.pathParamsAllowedCharacters&&(this.pathParamsDecoder=v(this.options.pathParamsAllowedCharacters)),(!this.history||this.options.history&&this.options.history!==this.history)&&(this.history=this.options.history?this.options.history:ht()),this.origin=this.options.origin,this.origin||=window?.origin&&window.origin!==`null`?window.origin:`http://localhost`,this.history&&this.updateLatestLocation(),this.options.routeTree!==this.routeTree){this.routeTree=this.options.routeTree;let e;this.resolvePathCache=re(1e3),e=this.buildRouteTree(),this.setRoutes(e)}if(!this.stores&&this.latestLocation){let e=this.getStoreConfig(this);this.batch=e.batch,this.stores=st(this.latestLocation,e),Je(this)}let a=this.options.basepath??`/`,o=this.options.rewrite;if(r||n!==a||i!==o){this.basepath=a;let e=[],t=b(a);t&&t!==`/`&&e.push(it({basepath:a})),o&&e.push(o),this.rewrite=e.length===0?void 0:e.length===1?e[0]:rt(e),this.history&&this.updateLatestLocation(),this.stores&&this.stores.location.set(this.latestLocation)}},this.updateLatestLocation=()=>{this.latestLocation=this.parseLocation(this.history.location,this.latestLocation)},this.buildRouteTree=()=>{let e=_(this.routeTree,this.options.caseSensitive,(e,t)=>{e.init({originalIndex:t})});return this.options.routeMasks&&ie(this.options.routeMasks,e.processedTree),e},this.subscribe=(e,t)=>{let n={eventType:e,fn:t};return this.subscribers.add(n),()=>{this.subscribers.delete(n)}},this.emit=e=>{for(let t of this.subscribers)if(t.eventType===e.type)try{t.fn(e)}catch(e){console.error(e)}},this.parseLocation=(e,t)=>{let n=({pathname:e,search:n,hash:r,href:i,state:a})=>{if(!this.rewrite&&!/[ \x00-\x1f\x7f\u0080-\uffff]/.test(e)){let i=this.options.parseSearch(n),s=this.options.stringifySearch(i);return{href:e+s+r,publicHref:e+s+r,pathname:p(e),external:!1,searchStr:s,search:d(t?.search,i),hash:p(r.slice(1)),state:o(t?.state,a)}}let s=new URL(i,this.origin),c=at(this.rewrite,s),l=this.options.parseSearch(c.search),u=this.options.stringifySearch(l);return c.search=u,{href:c.href.replace(c.origin,``),publicHref:i,pathname:p(dt(c.pathname)),external:!!this.rewrite&&vt(c,this.origin),searchStr:u,search:d(t?.search,l),hash:p(c.hash.slice(1)),state:o(t?.state,a)}},r=n(e),{__tempLocation:i,__tempKey:a}=r.state;if(i&&(!a||a===this.tempLocationKey)){let e=n(i);return e.state.key=r.state.key,e.state.__TSR_key=r.state.__TSR_key,delete e.state.__tempLocation,{...e,maskedLocation:r}}return r},this.resolvePathWithBase=(e,t)=>y({base:e,to:t,trailingSlash:this.options.trailingSlash,cache:this.resolvePathCache}),this.matchRoutes=(e,t,n)=>typeof e==`string`?this.matchRoutesInternal({pathname:e,search:t},n):this.matchRoutesInternal(e,t),this.getMatchedRoutes=e=>{let t=Object.create(null),n=h(E(e),this.processedTree,!0);return n&&Object.assign(t,n.rawParams),[n?.branch||[this.routesById.__root__],t,n?.route]},this.buildLocation=t=>{let r=(r={})=>{if(r.href){let e=gt(r.href,{});r={...r,to:at(this.rewrite,new URL(e.pathname,this.origin)).pathname,search:this.options.parseSearch(e.search),hash:e.hash.slice(1)}}let i=r._fromLocation||this._pendingLocation||this.latestLocation,a=this.matchRoutesLightweight(i),s=r.unsafeRelative===`path`?i.pathname:r.from??a[1],c=a[2],l=a[3],f=this.resolvePathWithBase(s,r.to?`${r.to}`:`.`),m=Mt(r.params,l),h=this.routesByPath[E(f)],g;if(h)g=this.getRouteBranch(h);else if(f.includes(`$`))g=[];else{let[e,t,n]=this.getMatchedRoutes(f);g=e,this.options.notFoundRoute&&(!n||n.path!==`/`&&t[`**`])&&(g=[...g,this.options.notFoundRoute])}if(g.length&&e(m))for(let e of g){let t=e.options.params?.stringify??e.options.stringifyParams;if(t){m===l&&(m=Object.assign(Object.create(null),m));try{Object.assign(m,t(m))}catch{}}}let _=t.leaveParams?f:p(dt(T({path:f,params:m,decoder:this.pathParamsDecoder,server:this.isServer}).interpolatedPath)),v=c;if(t._includeValidateSearch&&this.options.search?.strict){let e={};g.forEach(t=>{if(t.options.validateSearch)try{Object.assign(e,kt(t.options.validateSearch,{...e,...v}))}catch{}}),v=e}v=At(v,r,g,t._includeValidateSearch),v=d(c,v);let y=this.options.stringifySearch(v),b=r.hash===!0?i.hash:r.hash?u(r.hash,i.hash):void 0,x=b?`#${b}`:``,S=r.state===!0?i.state:r.state?u(r.state,i.state):{};r.state&&(S=o(i.state,S));let C=`${_}${y}${x}`,w,D,ee=!1;if(this.rewrite){let e=new URL(C,this.origin),t=e.origin,n=ot(this.rewrite,e);w=yt(e),vt(n,t)?(D=n.href,ee=!0):D=dt(yt(n))}else w=n(C),D=w;return{publicHref:D,href:w,pathname:_,search:v,searchStr:y,state:S,hash:b??``,external:ee,unmaskOnReload:r.unmaskOnReload}},i=r(t);if(t.mask)i.maskedLocation=r({from:t.from,...t.mask});else if(this.options.routeMasks){let e=x(i.pathname,this.processedTree);if(e){let n=Object.assign(Object.create(null),e.rawParams),{from:a,params:o,...s}=e.route,c=Mt(o,n);i.maskedLocation=r({from:t.from,...s,params:c})}}return i},this.commitLocation=async({viewTransition:e,ignoreBlocker:t,...n})=>{let i=n.maskedLocation??n;if(i.external)return Et(this,i.publicHref,{replace:n.replace,ignoreBlocker:t});let a,o=E(this.latestLocation.href)===E(n.href)&&r(St(n.state),St(this.latestLocation.state)),s=this._commitPromise,c,l=new Promise(e=>{c=e});if(l.resolve=()=>{c(),s?.resolve()},this._commitPromise=l,o)this.load();else{let{maskedLocation:r,hashScrollIntoView:i,...o}=n;r&&(o={...r,state:{...r.state,__tempKey:void 0,__tempLocation:{...o,search:o.searchStr,state:{...o.state,__tempKey:void 0,__tempLocation:void 0,__TSR_key:void 0,key:void 0}}}},(o.unmaskOnReload??this.options.unmaskOnReload??!1)&&(o.state.__tempKey=this.tempLocationKey)),o.state.__hashScrollIntoViewOptions=i??this.options.defaultHashScrollIntoView??!0,this.shouldViewTransition=e,a=n.replace?`REPLACE`:`PUSH`,this.history[a===`REPLACE`?`replace`:`push`](o.publicHref,o.state,{ignoreBlocker:t}),this.history.subscribers.size||this.load({action:{type:a}})}return this._scroll.next=n.resetScroll??!0,this._commitPromise},this.buildAndCommitLocation=({replace:e,resetScroll:t,hashScrollIntoView:n,viewTransition:r,ignoreBlocker:i,...a}={})=>{let o=this.buildLocation({...a,_includeValidateSearch:!0});this._pendingLocation=o;let s=this.commitLocation({...o,viewTransition:r,replace:e,resetScroll:t,hashScrollIntoView:n,ignoreBlocker:i});return queueMicrotask(()=>{this._pendingLocation===o&&(this._pendingLocation=void 0)}),s},this.navigate=async({to:e,reloadDocument:t,href:n,publicHref:r,...i})=>{let a=n?w(n):void 0;if(a||t){if(e!==void 0||!n){let t=this.buildLocation({to:e,...i}),a=t.maskedLocation??t;n??=a.publicHref,r??=a.publicHref}let t=!a&&r?r:n;return Et(this,t,i)}return this.buildAndCommitLocation({...i,href:n,to:e,_isNavigate:!0})},this.load=async e=>{this.updateLatestLocation(),e?.action&&(this._scroll.hash=e.action.type===`PUSH`||e.action.type===`REPLACE`),await pn(this,e)},this.startViewTransition=e=>{let t=this.shouldViewTransition??this.options.defaultViewTransition;if(this.shouldViewTransition=void 0,t&&typeof document.startViewTransition==`function`){let n;if(typeof t==`object`&&window.CSS?.supports?.(`selector(:active-view-transition-type(a))`)){let r=this.latestLocation,i=this.stores.resolvedLocation.get(),a=typeof t.types==`function`?t.types(xt(r,i)):t.types;if(a===!1)return e();n={update:e,types:a}}else n=e;return document.startViewTransition(n).updateCallbackDone}return e()},this.invalidate=e=>{let t=this._committed,n=e?.filter,r=this._preloads,i=new Set([...t,...this._cache.values(),...[...r?.values()??[]].flat(),...this._tx?.[3]??[]].filter(e=>!n||n(e)).map(e=>e.id)),a=[];for(let[e,t]of r??[])t.some(e=>i.has(e.id))&&(r.delete(e),a.push(e));let o=t=>{if(i.has(t.id)){let n=this.routesById[t.routeId],r={...t,invalid:!0,...(e?.forcePending||t.status===`error`||t.status===`notFound`)&&bt(n)?{status:`pending`,error:void 0}:void 0};return t._flight=void 0,r}return t};this._committed=t.map(o);for(let[t,n]of this._cache)i.has(t)&&(n.invalid=!0,e?.forcePending&&(n.status=`pending`));for(let e of i)this._flights?.delete(e);for(let e of a)e.abort();return this.shouldViewTransition=!1,this.load({sync:e?.sync})},this.resolveRedirect=e=>{let t=e.options,n=e.headers.get(`Location`)||t.href;if(!n){let e=this.buildLocation(t);n=(e.maskedLocation??e).publicHref||`/`}let r;if(i.test(n)||(r=w(n))&&!this.protocolAllowlist.has(r))throw Error(`Redirect blocked: unsafe protocol`);if(r===`http:`||r===`https:`){let e=new URL(n);e.pathname.startsWith(`//`)?n=e.href:vt(e,this.origin)||(n=yt(e),r=void 0)}return r&&(t.reloadDocument=!0),t.href=n,e.headers.set(`Location`,n),e},this.clearCache=e=>{let t=this._cache,n=this._preloads,r=e?.filter,i=[],a=[];for(let[e,n]of t)(!r||r(n))&&(a.push(e),i.push(n));let o=[];for(let[e,t]of n??[])(!r||t.some(r))&&(o.push(e),i.push(...t));for(let e of a)t.delete(e);for(let e of o)n.delete(e);for(let e of i){let t=e._flight;e._flight=void 0,t&&!--t[2]&&(this._flights?.get(e.id)===t&&this._flights.delete(e.id),o.push(t[1]))}for(let e of o)e.abort()},this.loadRouteChunk=z,this.preloadRoute=e=>mn(this,e),this.matchRoute=(e,t)=>{let n={...e,to:e.to?this.resolvePathWithBase(e.from||``,e.to):void 0,params:e.params||{},leaveParams:!0},i=this.buildLocation(n),a=this.stores.status.get()===`pending`;if(t?.pending&&!a)return!1;let o=t?.pending??!a?this.latestLocation:this.stores.resolvedLocation.get()||this.stores.location.get(),s=te(i.pathname,t?.caseSensitive??!1,t?.fuzzy??!1,o.pathname,this.processedTree);return!s||e.params&&!r(s.rawParams,e.params,{partial:!0})?!1:t?.includeSearch??!0?r(o.search,i.search,{partial:!0})?s.rawParams:!1:s.rawParams},this.getStoreConfig=s,this.update({defaultPreloadDelay:50,defaultPendingMs:1e3,defaultPendingMinMs:500,context:void 0,...a,caseSensitive:a.caseSensitive??!1,notFoundMode:a.notFoundMode??`fuzzy`,stringifySearch:a.stringifySearch??et,parseSearch:a.parseSearch??$e,protocolAllowlist:a.protocolAllowlist??t}),self.__TSR_ROUTER__=this}isShell(){return!!this.options.isShell}get state(){return this.stores.__store.get()}setRoutes({routesById:e,routesByPath:t,processedTree:n}){this.routesById=e,this.routesByPath=t,this.processedTree=n;let r=this.options.notFoundRoute;r&&(r.init({originalIndex:99999999999}),this.routesById[r.id]=r)}getRouteBranch(e){let t=this.routeBranchCache.get(e);return t||(t=S(e),this.routeBranchCache.set(e,t)),t}matchRoutesInternal(e,t){let[n,r,i]=this.getMatchedRoutes(e.pathname),a=n,s=!1;(i?i.path!==`/`&&r[`**`]:E(e.pathname))&&(this.options.notFoundRoute?a=[...a,this.options.notFoundRoute]:s=!0);let c=s?jt(this.options.notFoundMode,a):void 0,l=Array(a.length),u=this._committed,f=(e,t)=>{let n=u[t];return n?.routeId===e.id?n:e===this.options.notFoundRoute?u.find(t=>t.routeId===e.id):void 0},p;for(let n=0;n<a.length;n++){let i=a[n],s=l[n-1],u,m,h;{let n=s?.search??e.search,r=s?._strictSearch??void 0;try{let e=kt(i.options.validateSearch,{...n})??void 0;u={...n,...e},m={...r,...e}}catch(e){let r=e;if(e instanceof Dt||(r=new Dt(e.message,{cause:e})),t?.throwOnError)throw r;u=n,m={},h=r}}let g=``,_=``;try{g=i.options.loaderDeps?.({search:u})??``,_=g&&JSON.stringify(g)||``}catch(e){if(t?.throwOnError)throw e;h??=e}let{interpolatedPath:v,usedParams:y}=T({path:i.fullPath,params:r,decoder:this.pathParamsDecoder,server:this.isServer}),b=i.id+v+_,x=f(i,n),S=this._cache.get(b)??(x?.id===b?x:void 0);p=S?._strictParams??Object.assign(y,p);let C;if(!S)try{Nt(i,p)}catch(e){if(C=I(e)||ce(e)?e:new Ot(e.message,{cause:e}),t?.throwOnError)throw C}let w=x?`stay`:`enter`,E;if(S)E={...S,cause:w,search:d(x?x.search:S.search,u),_strictSearch:m,searchError:h};else{let e=bt(i)?`pending`:`success`;E={id:b,ssr:i.options.ssr,index:n,routeId:i.id,params:x?.params??p,_strictParams:p,pathname:v,updatedAt:Date.now(),search:x?d(x.search,u):u,_strictSearch:m,searchError:h,status:e,isFetching:!1,error:void 0,paramsError:C,context:{},abortController:t?._controller??new AbortController,cause:w,loaderDeps:x?o(x.loaderDeps,g):g,invalid:!1,preload:!1,staticData:i.options.staticData||{},fullPath:i.fullPath}}let D=c===i.id;E._notFound&&!D&&(E.error=void 0),E._notFound=D,l[n]=E}for(let e=0;e<l.length;e++){let n=l[e];n.params=n.cause===`stay`?d(n.params,p):p,t?._controller&&(n.context={})}return l}matchRoutesLightweight(e){let t=l(this.stores.ids.get()),n=t?this.stores.byRoute.get(t).get():void 0,r=n?.id,i=this.lightweightCache.get(e);if(i&&i[0]===r)return i[1];let[a,o]=this.getMatchedRoutes(e.pathname),s=l(a),c={...e.search};for(let e of a)try{Object.assign(c,kt(e.options.validateSearch,c))}catch{}let u=n&&n.routeId===s.id&&n.pathname===e.pathname,d;if(u)d=n.params;else{let e=Object.assign(Object.create(null),o);for(let t of a)try{Nt(t,e)}catch{}d=e}let f=[a,s.fullPath,c,d];return this.lightweightCache.set(e,[r,f]),f}};async function Et(e,t,{replace:n,ignoreBlocker:r}){if(!C(t,e.protocolAllowlist)){if(!r){let t=e.history._getBlockers();for(let r of t)if(r?.blockerFn&&await r.blockerFn({currentLocation:e.history.location,nextLocation:e.history.location,action:n?`REPLACE`:`PUSH`}))return}e.history._ignoreNextBeforeUnload?.(t),n?window.location.replace(t):window.location.href=t}}var Dt=class extends Error{},Ot=class extends Error{};function kt(e,t){if(e==null)return{};if(`~standard`in e){let n=e[`~standard`].validate(t);if(n instanceof Promise)throw new Dt(`Async validation not supported`);if(n.issues)throw new Dt(JSON.stringify(n.issues,void 0,2),{cause:n});return n.value}return`parse`in e?e.parse(t):typeof e==`function`?e(t):{}}function At(e,t,n,r){let i=[];for(let e of n){let t=e.options;`search`in t?t.search?.middlewares&&i.push(...t.search.middlewares):(t.preSearchFilters||t.postSearchFilters)&&i.push(({search:e,next:n})=>{let r=n(t.preSearchFilters?t.preSearchFilters.reduce((e,t)=>t(e),e):e);return t.postSearchFilters?t.postSearchFilters.reduce((e,t)=>t(e),r):r});let n=t.validateSearch;r&&n&&i.push(({search:e,next:t,meta:r})=>{let i=t(e);try{let e=kt(n,i);if(r&&e)for(let t in e)t in i||(r.defaulted||=new Map).set(t,e[t]);return{...i,...e}}catch{}return i})}let a=(e,n,r)=>{if(e>=i.length){if(!t.search)return{};if(t.search===!0)return n;let e=u(t.search,n);return r&&(r.explicit=e),e}return i[e]({search:n,next:(t,n)=>{if(n){let n=r||{};return{search:a(e+1,t,n),meta:n}}return a(e+1,t,r)},meta:r})};return a(0,e)}function jt(e,t){if(e!==`root`){let e;for(let n=t.length-1;n>=0;n--){let r=t[n];if(r.options.notFoundComponent)return r.id;e||=r.children&&r.id}if(e)return e}return oe}function Mt(e,t){if(e===!1||e===null)return Object.create(null);if((e??!0)===!0)return t;let n=Object.assign(Object.create(null),t);return Object.assign(n,u(e,n))}function Nt(e,t){let n=e.options.params?.parse??e.options.parseParams;n&&Object.assign(t,n(t))}function Pt(e,t){return e.options[t]?.preload?.()}function Ft(e,t){let n=Pt(e,`component`),r=Pt(e,`pendingComponent`);return t&&(r?r=r.then(t):t()),n&&r?Promise.all([n,r]).then(()=>{}):n??r}function z(e,t,n){let r=()=>t===!1?void 0:t?Pt(e,t):Ft(e,n),i=e._lazy;if(i)return i===!0?r():i.then(r);if(!e.lazyFn)return r();let a=e.lazyFn().then(t=>{{let{id:n,...r}=t.options;Object.assign(e.options,r),e._lazy=!0}},t=>{throw e._lazy=void 0,t});return e._lazy=a,a.then(r)}function It(e){let t=e.findIndex(e=>e.status!==`success`||e._notFound)+1;return t&&t<e.length?e.slice(0,t):e}var B=0,V=1,Lt=2,H=3,U=[4];function W(e){return typeof e[0]==`number`}function G(e,t){return t.aborted?Promise.race([Promise.reject(t),e]):new Promise((n,r)=>{let i=()=>r(t);t.addEventListener(`abort`,i,{once:!0}),Promise.resolve(e).then(n,r).then(()=>t.removeEventListener(`abort`,i))})}function K(e,t){return e.routesById[t.routeId]}function Rt(e,t,n){return ce(e)?[H,e]:I(e)?(e.routeId||=n,[Lt,e]):t?(typeof e?.then==`function`&&(e=Error(`A Promise was thrown`,{cause:e})),[V,e]):[B,e]}function zt(e,t){let n=Rt(t,!0,e.id);if(n[0]!==V)return n;try{e.options.onError?.(n[1])}catch(t){n=Rt(t,!0,e.id)}return n}function Bt(e,t,n,r,i){return i[0].signal.aborted?U:$t(e,t,n,zt(n,r),i)}async function Vt(e,t,n,r,i,a){let[o,s]=t,c=n[0].signal,l=!!n[3];for(let i=n[6]??0;i<r;i++){let r=s[i],u=K(e,r);r.abortController=n[0];let d=s[i-1]?.context??e.options.context??{},f={params:r.params,location:o,navigate:t=>e.navigate({...t,_fromLocation:o}),buildLocation:e.buildLocation,cause:l?`preload`:r.cause,abortController:n[0],preload:l,matches:s,routeId:u.id};try{let e=r._ctx||=u.options.context?u.options.context({...f,deps:r.loaderDeps,context:d})||{}:void 0;r.context={...d,...e}}catch(a){return q(e,r),[i,Bt(e,t,u,a,n)]}if(c.aborted)return[i,U];let p=r.paramsError??r.searchError;if(p!==void 0)return q(e,r),[i,Bt(e,t,u,p,n)];let m=u.options.beforeLoad;if(!m)continue;let h=r.status;i>=a&&(r.status=`pending`,n[7]?.());try{Wt(e,r,`beforeLoad`,n[0]);let a=m({...f,search:r.search,context:r.context,...e.options.additionalContext}),o=await(typeof a?.then==`function`?G(a,c):a);if(c.aborted)return[i,U];let s=$t(e,t,u,Rt(o,!1,u.id),n);if(s[0]!==B)return q(e,r),[i,s];r.context={...r.context,...o}}catch(a){return q(e,r),[i,Bt(e,t,u,a,n)]}finally{r.status=h,Wt(e,r,!1,n[0])}}i()}function Ht(e,t,n){if(!(!n||--n[2])){if(e._flights?.get(t.id)===n){let n=e._tx;if(n&&!n[0].signal.aborted&&!n[3].includes(t)&&n[3].some(e=>e.id===t.id)&&n[3].some(e=>e.isFetching===`beforeLoad`))return;e._flights.delete(t.id)}return n[1]}}function q(e,t){let n=t._flight;t._flight=void 0,Ht(e,t,n)?.abort()}function J(e,t,n,r){let i=[];for(let a of t)if(!n?.includes(a)){let t=a._flight;if(a._flight=void 0,r&&t?.[2]===1&&e._flights?.get(a.id)===t&&n?.some(e=>e.id===a.id))t[2]=0;else{let n=Ht(e,a,t);n&&i.push(n)}}for(let e of i)e.abort()}function Ut(e){for(let t of e){let e=t._flight;e&&e[2]++}}function Wt(e,t,n,r){if(t.isFetching=n,r&&e._tx?.[0]!==r)return;let i=e.stores.byRoute.get(t.routeId),a=i?.get();a?.id===t.id&&i.set({...a,isFetching:n})}function Gt(e,t,n,r,i,a,o){let s=t[0];return{params:n.params,location:s,navigate:t=>e.navigate({...t,_fromLocation:s}),cause:o?`preload`:n.cause,abortController:i,preload:o,deps:n.loaderDeps,parentMatchPromise:a,context:n.context,route:r,...e.options.additionalContext}}async function Kt(e,t,n,r,i,a,o){let s=o[0],c=s.signal;if(c.aborted)return U;if(!i)return[B,void 0];let l=n._flight;Wt(e,n,`loader`,s);try{if(!l){let s=new AbortController;l=[Promise.resolve().then(()=>i(Gt(e,t,n,r,s,a,!!o[3]))).then(e=>Rt(e,!1,r.id),e=>Rt(e,!0,r.id)).then(t=>(t[0]!==B&&e._flights?.get(n.id)===l&&(e._flights.delete(n.id),l[2]||s.abort()),t[0]===V&&l[2]?zt(r,t[1]):t)),s,1],(e._flights??=new Map).set(n.id,l)}return n._flight=l,n.abortController=l[1],$t(e,t,r,await G(l[0],c),o)}catch(t){if(t!==c||!c.aborted)throw t;return q(e,n),U}finally{Wt(e,n,!1,s)}}function qt(e,t,n){t[0]!==H&&(e.status=`success`,e.error=void 0,t[0]===B?(e.loaderData=t[1],e.invalid=!1,e.updatedAt=Date.now(),e.preload=n):e.invalid=!0)}function Jt(e,t,n){let r=e._cache.get(t.id);if(r!==n||e._committed.some(e=>e.id===t.id&&e._flight===t._flight))return;let i={...t,_notFound:void 0,context:{}};i._flight&&i._flight[2]++,e._cache.set(t.id,i),r&&q(e,r)}function Yt(e,t){return t[0]===V||t[0]===Lt?{...e,status:t[0]===V?`error`:`notFound`,error:t[1],_flight:void 0}:e}function Xt(e,t,n,r,i,a,o){let s=t[1][n],c=K(e,s),l=!!a[3],u=e._cache.get(s.id),d,f=!1,p;try{if(s.status===`success`&&(d=c.options.shouldReload,typeof d==`function`&&(d=d(Gt(e,t,s,c,a[0],i,l))),a[0].signal.aborted&&(p=U)),!p){if(s.status!==`success`)f=!0;else{let t=l||s.preload?c.options.preloadStaleTime??e.options.defaultPreloadStaleTime??3e4:c.options.staleTime??e.options.defaultStaleTime??0;f=!!(s.invalid||d||d===void 0&&Date.now()-s.updatedAt>=t&&(a[5]||s.cause===`enter`||a[2].some(e=>e.routeId===s.routeId&&e.id!==s.id)))}}}catch(n){s.invalid=!0,q(e,s),p=Bt(e,t,c,n,a)}let m=c.options.loader,h=typeof m==`function`,g=h?m:m?.handler,_=!l||c.options.preload!==!1,v=_&&m?e._flights?.get(s.id):void 0;v===s._flight||p?v=void 0:v&&!f&&!l&&d===void 0?f=!0:f||(v=void 0);let y=!(!m||!f||s.status!==`success`||l||a[4]||((h?void 0:m.staleReloadMode)??e.options.defaultStaleReloadMode)===`blocking`),b=f&&_,x=b&&!y&&(s.status!==`success`||!!m),S=n>=o?a[7]:void 0,C=c.lazyFn&&c._lazy!==!0?S:void 0;if(b&&!m&&(s.invalid=!1,s.updatedAt=Date.now()),v&&v[2]++,x){let t=s._flight;s._flight=v,Ht(e,s,t)?.abort(),n>=o&&(s.status=`pending`),S?.()}b||(s.isFetching=!1);let w=!p&&x?Kt(e,t,s,c,g,i,a).then(t=>(qt(s,t,l),t[0]===B&&(m&&!a[0].signal.aborted&&Jt(e,s,u),n>=o&&(s.status=`pending`)),t)):Promise.resolve(p??[B,s.loaderData]),T=(async()=>{try{let e=z(c,void 0,C);e&&await G(e,a[0].signal)}catch(r){if(!t[1].some((e,t)=>t<=n&&(e.status===`error`||e.status===`notFound`||e._notFound)))return[n,Bt(e,t,c,r,a)]}let r=await w;x&&r[0]===B&&s.status===`pending`&&!a[0].signal.aborted&&(s.status=`success`,S?.())})();if(r.push([n,w,T]),!y)return w.then(e=>Yt(s,e));let E={...s,status:`pending`,preload:!1,_flight:v};s.invalid=!1,s.isFetching=`loader`;let D=Kt(e,t,E,c,g,i,a).then(e=>(s.isFetching=!1,qt(E,e,!1),e));return(t[2]??=[]).push([n,D,T,E]),D.then(e=>Yt(E,e))}async function Zt(e,t,n,r,i=0){let a=n?.[1][1],o=a?.routeId?t.findIndex(e=>e.routeId===a.routeId):n?.[0]??t.length-1;o<0&&(o=0);for(let n=o;n>=0;n--){let i=K(e,t[n]);try{let e=z(i,!1);e&&await G(e,r)}catch(e){if(e===r&&r.aborted)throw e}if(i.options.notFoundComponent)return n}return a?.routeId?o:i}function Y(e,t){t[2]&&=(J(e,t[2].map(e=>e[3])),void 0)}async function Qt(e,t,n,r){let i;try{await Promise.all(e.map(e=>e[1].then(async t=>{let a=e[0];if(!(r&&a>=await r)){if(t[0]>=H)throw[a,t];!i&&t[0]!==B&&(i=[a,t],await Promise.all((n??[]).map(e=>{if(!(e[0]<=a))return e[1].then(t=>{if(t[0]===H)throw[e[0],t]})})))}})))}catch(e){return e}return t??i}function $t(e,t,n,r,i,a){for(;r[0]===H;){let o=r[1],s=o.options;try{if((s.href||o.headers.has(`Location`))&&(e.resolveRedirect(o),s.reloadDocument)||(s.reloadDocument?i[3]:i[1]>=20))return r;let n=e.buildLocation({...s,_fromLocation:t[0],_includeValidateSearch:!0}),a=n.maskedLocation??n;if(a.external){let t=o.clone();return t.options={...s},t.headers.set(`Location`,a.publicHref),e.resolveRedirect(t),i[3]?[H,t]:[H,t,a]}return[H,o,n]}catch(e){r=a?[V,e]:zt(n,e),a=!0}}return r}async function en(e,t,n,r,i,a){let o=t[1],s=await i,c=!1,l=o.findIndex(e=>e._notFound),u=t=>t[1][0]===Lt?Zt(e,o,t,r.signal):t[0],d=l<0?o.length:l;if((s?.[1][0]??0)>=H)d=0;else if(s){d=s[2]??=await u(s);for(let e of n){if(e[0]>=d)break;let t=await e[1];if(t[0]!==B&&t[0]<H&&!(`loaderData`in o[e[0]])){s=[e[0],t],d=s[2]=await u(s);break}}}for(let e of n){if(e[0]>=d)break;let t=await e[2];if(t){s=t;break}}if((s?.[1][0]??0)>=H){let n=s[1];if(n[0]!==H||n[1].options.reloadDocument||n[2])return Y(e,t),n;c=!0,s=[0,[V,Error(`Too many redirects`)]]}let f=s?s[2]??await u(s):l;if(f>=0){let i=s?.[1],l=i?.[0],u=o[f],d=i?.[1],p=()=>{i&&(u._notFound=void 0,l===V?u.status=`error`:(d.routeId=u.routeId,u.routeId===e.routeTree.id?(u.status=`success`,u._notFound=!0):u.status=`notFound`),u.error=d,u.isFetching=!1)};p(),i||a?.();let m=K(e,u);try{await G(i?Promise.resolve().then(()=>z(m,l===V?`errorComponent`:`notFoundComponent`)):Promise.all([z(m),z(m,`notFoundComponent`)]),r.signal)}catch(n){if(n===r.signal&&r.signal.aborted)return Y(e,t),U}i?c&&(r.abort(),await Promise.all([...n.map(e=>e[1]),...n.map(e=>e[2]),...(t[2]??[]).map(e=>e[1])]),Y(e,t),J(e,o),p()):u.status=`success`}return t}async function tn(e,t,n,r=0,i=t[1].length){let a=t[1];for(let t=r;t<i;t++){let r=a[t],i=K(e,r).options;if(i.head||i.scripts)try{let t={ssr:e.options.ssr,matches:a,match:r,params:r.params,loaderData:r.loaderData},[o,s]=await G(Promise.all([i.head?.(t),i.scripts?.(t)]),n);r.meta=o?.meta,r.links=o?.links,r.headScripts=o?.scripts,r.styles=o?.styles,r.scripts=s}catch(e){if(e===n&&n.aborted)break;console.error(e)}if(r.status!==`success`||r._notFound)break}return t}async function nn(e,t,n,r){let i=[t,n],a=r[0].signal,o;try{let t=e.stores.matches.get(),s=n.findIndex(e=>e._notFound);if(e.options.notFoundMode!==`root`&&s>=0){let t=await Zt(e,n,void 0,a,s);n[s]._notFound=void 0,n[t]._notFound=!0,s=t}let c=s<0?n.length:s+1,l=0;for(;l<c&&l!==s;){let e=n[l],i=r[2][l],a=t[l];if(i?.id!==e.id||i.status!==`success`||e.preload||a?.id!==e.id||a.status!==`success`||(l++,i._notFound||a._notFound))break}let u=[],d=r[6]??0,f=d?Promise.resolve(n[d-1]):void 0,p=()=>{for(let t=d;t<c&&!a.aborted;t++)f=Xt(e,i,t,u,f,r,l)},m=await Vt(e,i,r,c,p,l);if(m){if(r[4]=!0,c=m[0],m[1][0]===Lt){let t=await Zt(e,n,m,a);m[2]=t,c=Math.min(c,t+1)}else m[1][0]>=H&&(c=0);p()}if(!a.aborted&&!r[3]){let t=[];for(let[n,r]of e._flights??[])r[2]||(e._flights.delete(n),t.push(r[1]));for(let e of t)e.abort()}let h=en(e,i,u,r[0],Qt(u,m,i[2]),r[7]);i[2]?.length&&(i[3]=Qt(i[2],void 0,void 0,h.then(e=>W(e)?0:It(n).length,()=>0))),o=await h}catch(t){if(Y(e,i),t===a&&a.aborted)return U;throw t}return W(o)?o:tn(e,o,a,r[6]===n.length?r[6]:0)}function rn(e,t){if(e._tx!==t)return;let n=t[3],r=e.stores.matches.get(),i=e._pending;for(let a=0;a<n.length;a++){let o=n[a],s=o.status===`success`&&!o._notFound,c=r[a]?.id===o.id&&r[a]?.status===`pending`;if(s&&!c)continue;let l=K(e,o),u=s||o.invalid?0:l.options.pendingMs??e.options.defaultPendingMs,d=l.options.pendingComponent??e.options.defaultPendingComponent;if(!d||typeof u!=`number`||u===1/0){i&&(i[0]=t,i[2]=0,i[4]=!0);return}let f=l.options.pendingMinMs??e.options.defaultPendingMinMs??0,p=!1;if(i?.[1]===o.id?(p=i[0]!==t,i[0]=t):(clearTimeout(i?.[3]),e._pending=i=void 0),i||(e._pending=i=[t,o.id,c?Date.now()+f:t[4]+u,void 0,c||void 0,d]),i[4]&&!p&&i[5]===d)return;if(i[5]=d,!i[4]){clearTimeout(i[3]);let n=i[2]-Date.now();if(n>0){i[3]=setTimeout(()=>rn(e,t),n);return}i[2]=0}let m=n.map(e=>({...e,_flight:void 0}));m[a].status=`pending`;let h=i[4]=e.startTransition(()=>e.stores.setMatches(m),m).then(t=>(t&&e._pending===i&&i[4]===h&&!i[2]&&(i[2]=Date.now()+f),t));return}}function an(e,t){let n=e._pending;(e._tx===t||!e._tx?.[3].some(e=>e.id===n?.[1]))&&(clearTimeout(n?.[3]),e._pending=void 0)}async function on(e,t){let n=e._pending;if(!n)return;clearTimeout(n[3]);let r=n[2]-Date.now();if(!n[4]||r<=0||!It(t[3]).some(e=>e.id===n[1]))return;let i;try{await G(new Promise(e=>{i=setTimeout(e,r)}),t[0].signal)}catch{}clearTimeout(i)}function sn(e,t){e._committed=t,e.stores.setMatches(t)}function cn(e,t,n,r){let i=e._committed,a=e._lifecycleEnd,o=e._cache;for(let e of n)e.preload=!1,r&&(e._assetEnd=void 0);let s=It(n).length,c=new Map;{let t=Date.now(),r=new Set;for(let e=0;e<n.length;e++){let t=n[e];(e<s||t.status===`success`)&&r.add(t.id)}for(let n of[...i,...o.values()]){if(n.status!==`success`||r.has(n.id))continue;let i=K(e,n);!i.options.loader||t-n.updatedAt>=(n.preload?i.options.preloadGcTime??e.options.defaultPreloadGcTime??3e5:i.options.gcTime??e.options.defaultGcTime??3e5)||c.set(n.id,o.get(n.id)===n?n:{...n,_flight:void 0,isFetching:!1,context:{}})}}t[3]=[],e._cache=c;let l=e._lifecycleEnd=Ct(n);sn(e,n),J(e,[...o.values(),...i].filter(e=>e._flight&&c.get(e.id)!==e),n),wt(e,i,n,a,l,t)}async function ln(e,t){let n=e._tx;for(;n&&n!==t;)t=n,await n[5],n=e._tx}function un(e,t,n){let r=n[1].options,i=n[2];if(!i)return e.navigate({...r,replace:!0,ignoreBlocker:!0});if(r.reloadDocument)return e.navigate({href:(i.maskedLocation??i).publicHref,reloadDocument:!0,replace:!0,ignoreBlocker:!0});i._redirects=t[1]+1,e._pendingLocation=i;let a=e.commitLocation({...i,viewTransition:r.viewTransition,replace:!0,resetScroll:r.resetScroll,hashScrollIntoView:r.hashScrollIntoView,ignoreBlocker:!0});return queueMicrotask(()=>{e._pendingLocation===i&&(e._pendingLocation=void 0)}),a}async function dn(e,t,n,r,i){let a=n.map(e=>({...e}));Ut(a);for(let t of r)q(e,a[t[0]]),a[t[0]]=t[3];let o=[t[2],a],s;try{s=await en(e,o,r,t[0],i)}catch(t){throw J(e,a),t}if(W(s)){J(e,a),s[0]===H&&e._tx===t&&e._committed===n&&await un(e,t,s);return}if(await tn(e,s,t[0].signal),e._tx!==t||e._committed!==n){J(e,a);return}for(let t of a){let n=e._cache.get(t.id);n?._flight&&n._flight===t._flight&&(e._cache.delete(t.id),q(e,n))}sn(e,a),J(e,n,a)}async function fn(e,t,n,r,i,a){let o=await nn(e,t[2],t[3],[t[0],t[1],e._committed,void 0,i,n,a,r]);if(W(o)){let n=o[0]===H&&e._tx===t;if((!n||o[1].options.reloadDocument)&&an(e,t),J(e,t[3]),t[3]=[],!n)return;if(e._tx!==t){an(e,t);return}await un(e,t,o);return}let s=o[1];if(e._tx===t&&await on(e,t),e._tx!==t){an(e,t),J(e,s),Y(e,o);return}let c=t[2],l=xt(c,e.stores.resolvedLocation.get()),u=o[2];await e.startViewTransition(async()=>{if(e._tx===t&&await on(e,t),e._tx!==t){an(e,t),J(e,s),Y(e,o);return}let n=await e.startTransition(()=>{an(e,t),cn(e,t,s,a),e._tx===t&&(e.emit({type:`onLoad`,...l}),e._tx===t&&e.emit({type:`onBeforeRouteMount`,...l}))},s);if(e._tx!==t){Y(e,o);return}u?.length&&dn(e,t,s,u,o[3]).catch(console.error),e.batch(()=>{e.stores.resolvedLocation.set(c),e.stores.status.set(`idle`),e._tx===t&&e.emit({type:`onResolved`,...l}),n&&e._tx===t&&e.emit({type:`onRendered`,...l})}),e._tx===t&&(e._commitPromise?.resolve(),e._commitPromise=void 0)})}async function pn(e,t){let n=e._tx,r=e.stores.resolvedLocation.get(),i=r??e.stores.location.get(),a=e.latestLocation,o=e._pendingLocation,s=o?.href===a.href?o._redirects??0:0,c=e._handoff,l=c?.[0](),u=new AbortController,d=e._preflight;if(e._preflight=u,l||c?.[1](),d?.abort(),!u.signal.aborted){let t=xt(a,r);e.emit({type:`onBeforeNavigate`,...t}),u.signal.aborted||e.emit({type:`onBeforeLoad`,...t})}if(u.signal.aborted){await ln(e,n);return}let f=i.href===a.href,p=u,m=e.matchRoutes(a,{_controller:u});Ut(m);let h=l?c[1](m):void 0;if(h?p=l:l?.abort(),u.signal.aborted){J(e,m),await ln(e,n);return}e._preflight=void 0;let g,_=()=>fn(e,y,f,()=>rn(e,y),t?.sync,h),v=t?.sync?new Promise(e=>g=e):Promise.resolve().then(_),y=[p,s,a,m,Date.now(),v.then(()=>ln(e,y))];if(e._tx=y,n){for(let t of e.stores.matches.get()){if(e._tx!==y)break;t.isFetching&&Wt(e,t,!1)}n[0].abort(),J(e,n[3],y[3],!0)}if(e._tx!==y){J(e,y[3]),y[3]=[],g?.(),await ln(e,y);return}e.batch(()=>{e.stores.status.set(`pending`),e.stores.location.set(a)}),(h||!e._committed.length&&m[0]?.status!==`success`&&!m.some(e=>e._notFound))&&rn(e,y),g?.(_()),await y[5]}async function mn(e,t){let n=e.buildLocation(t);for(let t=0;;t++){let r=e._committed,i=new AbortController,a,o,s;try{try{a=e.matchRoutes(n,{_controller:i}),Ut(a),o=(e._preloads??=new Map).set(i,a),s=await nn(e,n,a,[i,t,r,!0])}finally{o&&(o=o.delete(i),J(e,a)),i.abort()}if(!W(s))return s[1];if(!o||s.length<3)return;n=s[2]}catch(e){I(e)||console.error(e);return}}}var hn=class extends M.Component{constructor(...e){super(...e),this.state={error:0},this.reset=()=>{this.setState({error:0})}}static getDerivedStateFromProps(e,t){let n=e.getResetKey();return t.error&&t.resetKey!==n?{resetKey:n,error:0}:{resetKey:n}}static getDerivedStateFromError(e){return{error:[e]}}componentDidCatch(e,t){this.props.onCatch?.(e,t)}render(){let e=this.state.error;return e?M.createElement(this.props.errorComponent??gn,{error:e[0],reset:this.reset}):this.props.children}};function gn({error:e}){let[t,n]=M.useState(!1);return F(`div`,{style:{padding:`.5rem`,maxWidth:`100%`},children:[F(`div`,{style:{display:`flex`,alignItems:`center`,gap:`.5rem`},children:[P(`strong`,{style:{fontSize:`1rem`},children:`Something went wrong!`}),P(`button`,{style:{appearance:`none`,fontSize:`.6em`,border:`1px solid currentColor`,padding:`.1rem .2rem`,fontWeight:`bold`,borderRadius:`.25rem`},onClick:()=>n(e=>!e),children:t?`Hide Error`:`Show Error`})]}),P(`div`,{style:{height:`.25rem`}}),t?P(`div`,{children:P(`pre`,{style:{fontSize:`.7em`,border:`1px solid red`,borderRadius:`.25rem`,padding:`.3rem`,color:`red`,overflow:`auto`},children:e?.message?P(`code`,{children:e.message}):null})}):null]})}var X=(e=>(e[e.None=0]=`None`,e[e.Mutable=1]=`Mutable`,e[e.Watching=2]=`Watching`,e[e.RecursedCheck=4]=`RecursedCheck`,e[e.Recursed=8]=`Recursed`,e[e.Dirty=16]=`Dirty`,e[e.Pending=32]=`Pending`,e))(X||{});function _n({update:e,notify:t,unwatched:n}){return{link:r,unlink:i,propagate:a,checkDirty:o,shallowPropagate:s};function r(e,t,n){let r=t.depsTail;if(r!==void 0&&r.dep===e)return;let i=r===void 0?t.deps:r.nextDep;if(i!==void 0&&i.dep===e){i.version=n,t.depsTail=i;return}let a=e.subsTail;if(a!==void 0&&a.version===n&&a.sub===t)return;let o=t.depsTail=e.subsTail={version:n,dep:e,sub:t,prevDep:r,nextDep:i,prevSub:a,nextSub:void 0};i!==void 0&&(i.prevDep=o),r===void 0?t.deps=o:r.nextDep=o,a===void 0?e.subs=o:a.nextSub=o}function i(e,t=e.sub){let r=e.dep,i=e.prevDep,a=e.nextDep,o=e.nextSub,s=e.prevSub;return a===void 0?t.depsTail=i:a.prevDep=i,i===void 0?t.deps=a:i.nextDep=a,o===void 0?r.subsTail=s:o.prevSub=s,s===void 0?(r.subs=o)===void 0&&n(r):s.nextSub=o,a}function a(e){let n=e.nextSub,r;top:do{let i=e.sub,a=i.flags;if(a&60?a&12?a&4?!(a&48)&&c(e,i)?(i.flags=a|40,a&=1):a=0:i.flags=a&-9|32:a=0:i.flags=a|32,a&2&&t(i),a&1){let t=i.subs;if(t!==void 0){let i=(e=t).nextSub;i!==void 0&&(r={value:n,prev:r},n=i);continue}}if((e=n)!==void 0){n=e.nextSub;continue}for(;r!==void 0;)if(e=r.value,r=r.prev,e!==void 0){n=e.nextSub;continue top}break}while(1)}function o(t,n){let r,i=0,a=!1;top:do{let o=t.dep,c=o.flags;if(n.flags&16)a=!0;else if((c&17)==17){if(e(o)){let e=o.subs;e.nextSub!==void 0&&s(e),a=!0}}else if((c&33)==33){(t.nextSub!==void 0||t.prevSub!==void 0)&&(r={value:t,prev:r}),t=o.deps,n=o,++i;continue}if(!a){let e=t.nextDep;if(e!==void 0){t=e;continue}}for(;i--;){let i=n.subs,o=i.nextSub!==void 0;if(o?(t=r.value,r=r.prev):t=i,a){if(e(n)){o&&s(i),n=t.sub;continue}a=!1}else n.flags&=-33;n=t.sub;let c=t.nextDep;if(c!==void 0){t=c;continue top}}return a}while(1)}function s(e){do{let n=e.sub,r=n.flags;(r&48)==32&&(n.flags=r|16,(r&6)==2&&t(n))}while((e=e.nextSub)!==void 0)}function c(e,t){let n=t.depsTail;for(;n!==void 0;){if(n===e)return!0;n=n.prevDep}return!1}}function vn(e,t,n){let r=typeof e==`object`,i=r?e:void 0;return{next:(r?e.next:e)?.bind(i),error:(r?e.error:t)?.bind(i),complete:(r?e.complete:n)?.bind(i)}}var yn=[],bn=0,{link:xn,unlink:Sn,propagate:Cn,checkDirty:wn,shallowPropagate:Tn}=_n({update(e){return e._update()},notify(e){yn[Dn++]=e,e.flags&=~X.Watching},unwatched(e){e.depsTail!==void 0&&(e.depsTail=void 0,e.flags=X.Mutable|X.Dirty,An(e))}}),En=0,Dn=0,Z,On=0;function kn(e){try{++On,e()}finally{--On||jn()}}function An(e){let t=e.depsTail,n=t===void 0?e.deps:t.nextDep;for(;n!==void 0;)n=Sn(n,e)}function jn(){if(!(On>0)){for(;En<Dn;){let e=yn[En];yn[En++]=void 0,e.notify()}En=0,Dn=0}}function Mn(e,t){let n=typeof e==`function`,r=e,i={_snapshot:n?void 0:e,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:n?X.None:X.Mutable,get(){return Z!==void 0&&xn(i,Z,bn),i._snapshot},subscribe(e){let t=vn(e),n={current:!1},r=Nn(()=>{i.get(),n.current?t.next?.(i._snapshot):n.current=!0});return{unsubscribe:()=>{r.stop()}}},_update(e){let a=Z,o=t?.compare??Object.is;if(n)Z=i,++bn,i.depsTail=void 0;else if(e===void 0)return!1;n&&(i.flags=X.Mutable|X.RecursedCheck);try{let t=i._snapshot,a=typeof e==`function`?e(t):e===void 0&&n?r(t):e;return t===void 0||!o(t,a)?(i._snapshot=a,!0):!1}finally{Z=a,n&&(i.flags&=~X.RecursedCheck),An(i)}}};return n?(i.flags=X.Mutable|X.Dirty,i.get=function(){let e=i.flags;if(e&X.Dirty||e&X.Pending&&wn(i.deps,i)){if(i._update()){let e=i.subs;e!==void 0&&Tn(e)}}else e&X.Pending&&(i.flags=e&~X.Pending);return Z!==void 0&&xn(i,Z,bn),i._snapshot}):i.set=function(e){if(i._update(e)){let e=i.subs;e!==void 0&&(Cn(e),Tn(e),jn())}},i}function Nn(e){let t=()=>{let t=Z;Z=n,++bn,n.depsTail=void 0,n.flags=X.Watching|X.RecursedCheck;try{return e()}finally{Z=t,n.flags&=~X.RecursedCheck,An(n)}},n={deps:void 0,depsTail:void 0,subs:void 0,subsTail:void 0,flags:X.Watching|X.RecursedCheck,notify(){let e=this.flags;e&X.Dirty||e&X.Pending&&wn(this.deps,this)?t():this.flags=X.Watching},stop(){this.flags=X.None,this.depsTail=void 0,An(this)}};return t(),n}function Pn(e){let t=j(),n=`not-found-${g(t.stores.location,e=>e.pathname)}-${g(t.stores.status,e=>e)}`;return P(hn,{getResetKey:()=>n,onCatch:(t,n)=>{if(I(t))e.onCatch?.(t,n);else throw t},errorComponent:({error:t})=>{if(I(t))return e.fallback?.(t);throw t},children:e.children})}function Fn(){return P(`p`,{children:`Not Found`})}function Q(e){return P(Ne,{children:e.children})}function In(e,t,n){return t.options.notFoundComponent?P(t.options.notFoundComponent,{...n}):e.options.defaultNotFoundComponent?P(e.options.defaultNotFoundComponent,{...n}):P(Fn,{})}function Ln(e,t){let n=t?.options.pendingComponent??e.options.defaultPendingComponent;return n?P(n,{}):null}var Rn=(e,t)=>e[0]===t[0]&&e[1]===t[1],zn=(e,t,n)=>!t.isRoot||t.options.shellComponent||t.options.wrapInSuspense||n===!1||n===`data-only`||!e.ssr,Bn=M.memo(function({routeId:e}){let t=j();return P(Vn,{router:t,match:g(t.stores.getMatchStore(e),e=>e)})});function Vn({router:e,match:t}){let n=e.routesById[t.routeId],r=Ln(e,n),i=n.options.errorComponent??e.options.defaultErrorComponent,a=n.options.onCatch??e.options.defaultOnCatch,o=n.isRoot?n.options.notFoundComponent??e.options.notFoundRoute?.options.component:n.options.notFoundComponent,s=t.ssr===!1||t.ssr===`data-only`,c=zn(e,n,t.ssr)&&(n.options.wrapInSuspense??r??(n.options.errorComponent?.preload||s))?M.Suspense:Q,l=i?hn:Q,u=o?Pn:Q;return F(n.isRoot?n.options.shellComponent??Q:Q,{children:[P(ae.Provider,{value:t.routeId,children:P(c,{fallback:r,children:P(l,{getResetKey:()=>t,errorComponent:i,onCatch:(e,n)=>{if(I(e))throw e.routeId??=t.routeId,e;a?.(e,n)},children:P(u,{fallback:e=>{if(e.routeId??=t.routeId,e.routeId!==t.routeId)throw e;return M.createElement(o,e)},children:s?P(D,{fallback:r,children:P(Hn,{match:t})}):P(Hn,{match:t})})})})}),null]})}var Hn=M.memo(function({match:e}){let t=j(),n=e.routeId,r=t.routesById[n],i=M.useMemo(()=>{let i=(r.options.remountDeps??t.options.defaultRemountDeps)?.({routeId:n,loaderDeps:e.loaderDeps,params:e._strictParams,search:e._strictSearch});return i?JSON.stringify(i):void 0},[n,e.loaderDeps,e._strictParams,e._strictSearch,r.options.remountDeps,t.options.defaultRemountDeps]),a=M.useMemo(()=>{let e=r.options.component??t.options.defaultComponent;return e?P(e,{},i):P(Un,{})},[i,r.options.component,t.options.defaultComponent]);if(e.status===`pending`){if(t.ssr&&!zn(t,r,e.ssr))return a;if(t._tx)throw t._tx[5];return Ln(t,r)}if(e.status===`notFound`)return In(t,r,e.error);if(e.status===`error`)throw e.error;return a}),Un=M.memo(function(){let e=j(),t=M.useContext(ae),n,r,i;{let a=e.stores.getMatchStore(t);[n,r]=g(a,e=>[!!e._notFound,e.error],Rn),i=g(e.stores.ids,e=>e[e.indexOf(t)+1])}if(n)return In(e,e.routesById[t],r);if(!i)return null;let a=P(Bn,{routeId:i});return t===`__root__`?P(M.Suspense,{fallback:Ln(e),children:a}):a});function Wn(e,t){let n=e[1];e.length=0,n?.(t)}function Gn({t:e}){let t=j(),n=t._rendered??=[];return t.startTransition=(r,i)=>new Promise(a=>{Wn(n,!1),n.push(i,a),e(t),M.startTransition(r)}),f(()=>{let e=t.history.subscribe(t.load);t.updateLatestLocation();let r=t.latestLocation,i=t.buildLocation({to:r.pathname,search:!0,params:!0,hash:!0,state:!0,_includeValidateSearch:!0});if(E(r.publicHref)!==E(i.publicHref))return t.commitLocation({...i,replace:!0,ignoreBlocker:!0}),e;let a=t.stores.resolvedLocation.get();return a?.href===r.href&&a.state.__TSR_key===r.state.__TSR_key?n.push(t.stores.matches.get(),e=>{e&&t.emit({type:`onRendered`,...xt(a,a)})}):t._tx||t.load({sync:!0}).catch(console.error),e},[t,t.history]),null}function Kn(){let e=j(),t=e.routesById[oe],n=Ln(e,t),r=e.ssr?Q:M.Suspense,i=F(Ne,{children:[P(Gn,{t:M.useState()[1]}),P(r,{fallback:n,children:P(qn,{})})]});return e.options.InnerWrap?P(e.options.InnerWrap,{children:i}):i}function qn(){let e=j(),t=e._rendered,n=g(e.stores.matches,e=>t[0]??e),r=n[0],i=r?.routeId;f(()=>{t[0]===n&&Wn(t,!0)},[t,n]);let a=i?P(Bn,{routeId:i}):null;return P(ae.Provider,{value:i,children:e.options.disableGlobalCatchBoundary?a:P(hn,{getResetKey:()=>r,onCatch:void 0,children:a})})}var Jn=e=>({createMutableStore:Mn,createReadonlyStore:Mn,batch:kn}),Yn=e=>new Xn(e),Xn=class extends Tt{constructor(e){super(e,Jn)}};function Zn({router:t,children:n,...r}){e(r)&&t.update({...t.options,...r,context:{...t.options.context,...r.context}});let i=P(ue.Provider,{value:t,children:n});return t.options.Wrap?P(t.options.Wrap,{children:i}):i}function Qn({router:e,...t}){return P(Zn,{router:e,...t,children:P(Kn,{})})}var $n=Fe.div`
4
4
  display: flex;
@@ -11,4 +11,4 @@ import{An as e,Cn as t,Dn as n,En as r,Fn as i,H as a,In as o,K as s,Mt as c,Nn
11
11
  font-size: 13px;
12
12
  color: ${({theme:e})=>e.color.inkDim};
13
13
  max-width: 48ch;
14
- `,tr=se()({component:Un,notFoundComponent:()=>P($n,{children:F(de,{$gap:3,style:{alignItems:`center`},children:[P(_e,{children:`Not found`}),P(er,{children:`This console has no screen at that address.`}),P(pe,{as:`a`,href:`/`,$variant:`primary`,$size:`sm`,children:`Back to the rack`})]})})}),nr=`stream:console`,rr={"res:usage":{predicate:e=>e.queryKey[0]===`usage`||e.queryKey[0]===`client`&&(e.queryKey[1]===`usage`||e.queryKey[1]===`summary`)},"res:logs":{predicate:e=>e.queryKey[0]===`logs`&&e.queryKey[1]!==`body`||e.queryKey[0]===`client`&&e.queryKey[1]===`logs`||(e.queryKey[0]===`logPages`||e.queryKey[0]===`client`&&e.queryKey[1]===`logPages`)&&m(e.state.data)},"res:credentials":{queryKey:s.credentials},"res:keys":{queryKey:s.keys},"res:settings":{queryKey:s.settings},"res:models":{queryKey:s.models},"res:quota":{predicate:e=>e.queryKey[0]===`quota-history`||e.queryKey[0]===`credentials`&&e.queryKey[1]===`health`},[nr]:{queryKey:[`console`]}},ir=Object.keys(rr),ar=ir.filter(e=>e.startsWith(`res:`)),or=ir.filter(e=>e.startsWith(`stream:`));function sr(e,t){if(t===`res:*`){lr(e);return}let n=rr[t];n!==void 0&&e.invalidateQueries(n)}function cr(e){for(let t of ir)sr(e,t)}function lr(e){e.invalidateQueries()}var ur=4401,dr=500,fr=3e4,pr=new Set([...ar,...or]),mr=3,hr=6e4,gr=(e,t)=>{let n=setTimeout(e,t);return()=>clearTimeout(n)};function _r(){let{protocol:e,host:t}=window.location;return`${e===`https:`?`wss:`:`ws:`}//${t}/api/stream`}function vr(e){if(typeof e!=`string`)return null;let t;try{t=JSON.parse(e)}catch{return null}if(typeof t!=`object`||!t||Array.isArray(t))return null;let n=t,{type:r,topic:i,seq:a}=n;return typeof r!=`string`||i!==void 0&&typeof i!=`string`||a!==void 0&&typeof a!=`number`?null:{type:r,...typeof i==`string`?{topic:i}:{},...typeof a==`number`?{seq:a}:{},...`payload`in n?{payload:n.payload}:{}}}function yr(e){let t=new Set,n=new Set,r=new Map,i=new Map,a=new Map,o=e=>a.has(e)||pr.has(e),s=[],c=null,l=!1,u=!1,d=!1,f=!1,p=!1,m=0,h=null,g={status:`poll`,pushed:()=>!1};function _(){let e=p?`offline`:u&&!f?`push`:`poll`,r=e===`push`;g={status:e,pushed:e=>r&&n.has(e)};for(let e of t)e()}function v(e){c?.send(JSON.stringify(e))}function y(e,t){let n=i.get(e);if(n===void 0||n.size===0)return!1;for(let e of[...n])e(t);return!0}function b(){for(let e of ar)v({type:`subscribe`,topic:e});for(let e of or){let t=r.get(e);v(t===void 0?{type:`subscribe`,topic:e}:{type:`subscribe`,topic:e,sinceSeq:t})}for(let e of a.keys())v({type:`subscribe`,topic:e})}function x(){u=!0,m=0,n.clear(),d&&cr(e.client),d=!0,b(),_()}function S(t){let i=vr(t.data);if(i===null)return;let{topic:a}=i;if(i.type===`ack`){a!==void 0&&o(a)&&(n.add(a),y(a,{kind:`open`}),_());return}if(i.type===`error`){a!==void 0&&(n.delete(a)&&_(),y(a,{kind:`refused`}));return}if(a!==void 0){if(i.type===`gap`){i.seq!==void 0&&r.set(a,i.seq),y(a,{kind:`gap`}),sr(e.client,a);return}if(i.type===`event`){if(a===`res:*`){lr(e.client);return}if(i.seq!==void 0){let t=r.get(a);if(r.set(a,i.seq),t!==void 0&&i.seq>t+1){y(a,{kind:`gap`}),sr(e.client,a);return}}i.payload!==void 0&&y(a,{kind:`frame`,payload:i.payload})||sr(e.client,a)}}}function C(t){let r=u;u=!1,c=null,n.clear();for(let e of[...i.keys()])y(e,{kind:`closed`});if(l){if(t.code===ur){p=!0,l=!1,_(),lr(e.client);return}if(!r)f=!0;else{let t=e.now();s=[...s.filter(e=>e>t-hr),t],s.length>=mr&&(f=!0)}_(),w()}}function w(){let t=Math.min(fr,dr*2**m);m+=1,h=e.timer(()=>{h=null,l&&T()},t)}function T(){let t=new WebSocket(e.url());c=t,t.addEventListener(`open`,x),t.addEventListener(`message`,S),t.addEventListener(`close`,C)}function E(e,t){let n=i.get(e)??new Set;return i.set(e,n),n.add(t),()=>{n.delete(t),n.size===0&&i.delete(e)}}return{subscribe(e){return t.add(e),()=>{t.delete(e)}},snapshot:()=>g,hold(e,t){let r=E(e,t),i=(a.get(e)??0)+1;a.set(e,i),i===1&&u&&v({type:`subscribe`,topic:e}),n.has(e)&&t({kind:`open`});let o=!1;return()=>{if(o)return;o=!0,r();let t=(a.get(e)??1)-1;if(t>0){a.set(e,t);return}a.delete(e),n.delete(e)&&_(),u&&v({type:`unsubscribe`,topic:e})}},publish(e,t){return!u||!n.has(e)?!1:(v({type:`send`,topic:e,payload:t}),!0)},onStream:E,start(){return l=!0,T(),()=>{l=!1,h?.(),h=null;let e=c;c=null,u=!1,e?.close()}}}}var br=Oe(null),xr=Oe(null),Sr=Oe(null),Cr={status:`poll`,pushed:()=>!1};function wr({children:e,enabled:t=!0,timer:n=gr,now:r=Date.now,url:i=_r}){let a=Ee(),[o]=je(()=>yr({client:a,timer:n,now:r,url:i})),[s]=je(()=>({subscribe:(e,t)=>o.hold(e,e=>{if(e.kind===`gap`){t({kind:`closed`});return}t(e)}),send:o.publish}));N(()=>{if(t)return o.start()},[o,t]);let c=Me(o.subscribe,o.snapshot,o.snapshot);return P(br,{value:c,children:P(xr,{value:o.onStream,children:P(Sr,{value:s,children:e})})})}function Tr(){return ke(br)??Cr}function Er(e,t){let n=ke(xr),r=Ae(t);N(()=>{r.current=t}),N(()=>{if(n!==null)return n(e,e=>r.current(e))},[n,e])}function Dr(e,t){let n=ke(Sr),r=Ae(t);N(()=>{r.current=t}),N(()=>{if(n!==null&&e!==null)return n.subscribe(e,e=>r.current(e))},[n,e])}function Or({children:e}){let t=Tr(),n=ke(Sr);return P(ye,{connection:t,...n===null?{}:{channels:n},children:e})}async function kr(e){return e.queryClient.ensureQueryData({queryKey:s.status,queryFn:()=>fe(`/api/status`),revalidateIfStale:!0})}function Ar(e){let t=e.principal;return e.authenticated!==!0||t==null?`/login`:t.kind===`client`?`/client`:t.kind===`admin`||t.kind===`viewer`?`/`:`/login`}function jr(e,t){let n=Ar(e);if(n===`/login`)throw le({to:`/login`,search:{next:t}});if(n!==`/`)throw le({to:n})}function Mr(e,t){let n=Ar(e);if(n===`/login`)throw le({to:`/login`,search:{next:t}});if(n!==`/client`)throw le({to:n})}var Nr=k(`/_app`)({beforeLoad:async({context:e,location:t})=>{jr(await kr(e),t.href),await e.queryClient.ensureQueryData(a)},pendingComponent:Pr,pendingMs:200,errorComponent:O(()=>A(()=>import(`./_app-CSru2YTE.js`),__vite__mapDeps([0,1])),`errorComponent`),component:Fr});function Pr(){return P(he,{legend:`Console`,children:P(ge,{rows:6})})}function Fr(){let e=c().data??[];return P(wr,{children:F(Or,{children:[P(be,{$providers:e}),P(xe,{children:P(Un,{})})]})})}var Ir=k(`/client`)({beforeLoad:async({context:e,location:t})=>{Mr(await kr(e),t.href)},component:O(()=>A(()=>import(`./client-BcXc3lek.js`),__vite__mapDeps([2,3,4,1,5,6,7,8,9,10,11,12,13,14,15,16,17])),`component`)}),Lr=k(`/login`)({validateSearch:e=>({...typeof e.next==`string`?{next:e.next}:{},...typeof e.reason==`string`?{reason:e.reason}:{}}),component:O(()=>A(()=>import(`./login-GB0ZGUvA.js`),__vite__mapDeps([18,4,1,11,19])),`component`)}),Rr=k(`/_app/`)({component:O(()=>A(()=>import(`./_app.index-BV1kJJjA.js`),__vite__mapDeps([20,4,1,5,7,10,14,12,17])),`component`)}),zr=k(`/_app/accounts`)({component:O(()=>A(()=>import(`./_app.accounts-B2lQkMb0.js`),__vite__mapDeps([21,4,1,5,22,13,8,23,24,25,26,9,10,11,14,12,15,3])),`component`)}),Br=k(`/_app/console`)({component:O(()=>A(()=>import(`./_app.console-a2TJDoBC.js`),__vite__mapDeps([27,4,1,5,11])),`component`)}),Vr=k(`/_app/database`)({component:O(()=>A(()=>import(`./_app.database-CqSoTi2l.js`),__vite__mapDeps([28,4,1,5,25,11,14,12,17,19])),`component`)}),Hr=k(`/_app/keys`)({component:O(()=>A(()=>import(`./_app.keys-Dq5O0AG9.js`),__vite__mapDeps([29,4,1,5,22,13,8,23,26,9,10,11,14,12])),`component`)}),Ur=k(`/_app/logs`)({component:O(()=>A(()=>import(`./_app.logs-PjRK5wqy.js`),__vite__mapDeps([30,4,1,5,6,7,8,9,10,11,12])),`component`)}),Wr=k(`/_app/models`)({component:O(()=>A(()=>import(`./_app.models-BfmeeB5e.js`),__vite__mapDeps([31,4,1,5,23,24,25,26,9,10,11,14])),`component`)}),Gr=k(`/_app/settings`)({component:O(()=>A(()=>import(`./_app.settings-5i-vvT-H.js`),__vite__mapDeps([32,4,1,5,26,9,11,14,19])),`component`)}),Kr=k(`/_app/usage`)({component:O(()=>A(()=>import(`./_app.usage--5qFtU1W.js`),__vite__mapDeps([33,3,4,1,5,12,16,17])),`component`)}),qr=k(`/_app/plugins/$pluginId`)({component:O(()=>A(()=>import(`./_app.plugins._pluginId-Owb05aFv.js`),__vite__mapDeps([34,4,1,35,5])),`component`)}),$=Nr.update({id:`/_app`,getParentRoute:()=>tr}),Jr=Ir.update({id:`/client`,path:`/client`,getParentRoute:()=>tr}),Yr=Lr.update({id:`/login`,path:`/login`,getParentRoute:()=>tr}),Xr=Rr.update({id:`/`,path:`/`,getParentRoute:()=>$}),Zr={AppAccountsRoute:zr.update({id:`/accounts`,path:`/accounts`,getParentRoute:()=>$}),AppConsoleRoute:Br.update({id:`/console`,path:`/console`,getParentRoute:()=>$}),AppDatabaseRoute:Vr.update({id:`/database`,path:`/database`,getParentRoute:()=>$}),AppKeysRoute:Hr.update({id:`/keys`,path:`/keys`,getParentRoute:()=>$}),AppLogsRoute:Ur.update({id:`/logs`,path:`/logs`,getParentRoute:()=>$}),AppModelsRoute:Wr.update({id:`/models`,path:`/models`,getParentRoute:()=>$}),AppSettingsRoute:Gr.update({id:`/settings`,path:`/settings`,getParentRoute:()=>$}),AppUsageRoute:Kr.update({id:`/usage`,path:`/usage`,getParentRoute:()=>$}),AppIndexRoute:Xr,AppPluginsPluginIdRoute:qr.update({id:`/plugins/$pluginId`,path:`/plugins/$pluginId`,getParentRoute:()=>$})},Qr={AppRoute:$._addFileChildren(Zr),ClientRoute:Jr,LoginRoute:Yr},$r=tr._addFileChildren(Qr)._addFileTypes();function ei(e){return{isLoginRoute:()=>e().state.location.pathname===`/login`,onUnauthenticated:()=>void e().navigate({to:`/login`,search:{next:e().state.location.href}})}}function ti(e){let t=t=>{t instanceof me&&t.isUnauthenticated&&(e.isLoginRoute()||e.onUnauthenticated())};return new we({queryCache:new Ce({onError:t}),mutationCache:new Se({onError:t}),defaultOptions:{queries:{retry:(e,t)=>t instanceof me&&t.isUnauthenticated?!1:e<2,staleTime:5e3,refetchOnWindowFocus:!0},mutations:{retry:!1}}})}var ni,ri=ti(ei(()=>ni));ni=Yn({routeTree:$r,context:{queryClient:ri}});var ii=document.getElementById(`root`);if(ii===null)throw Error(`#root is missing from index.html`);Pe(ii).render(P(De,{children:P(ve,{children:P(Te,{client:ri,children:P(Qn,{router:ni})})})}));export{Dr as a,sr as c,Or as i,Lr as n,Er as o,wr as r,nr as s,qr as t};
14
+ `,tr=se()({component:Un,notFoundComponent:()=>P($n,{children:F(de,{$gap:3,style:{alignItems:`center`},children:[P(_e,{children:`Not found`}),P(er,{children:`This console has no screen at that address.`}),P(pe,{as:`a`,href:`/`,$variant:`primary`,$size:`sm`,children:`Back to the rack`})]})})}),nr=`stream:console`,rr={"res:usage":{predicate:e=>e.queryKey[0]===`usage`||e.queryKey[0]===`client`&&(e.queryKey[1]===`usage`||e.queryKey[1]===`summary`)},"res:logs":{predicate:e=>e.queryKey[0]===`logs`&&e.queryKey[1]!==`body`||e.queryKey[0]===`client`&&e.queryKey[1]===`logs`||(e.queryKey[0]===`logPages`||e.queryKey[0]===`client`&&e.queryKey[1]===`logPages`)&&m(e.state.data)},"res:credentials":{queryKey:s.credentials},"res:keys":{queryKey:s.keys},"res:settings":{queryKey:s.settings},"res:models":{queryKey:s.models},"res:quota":{predicate:e=>e.queryKey[0]===`quota-history`||e.queryKey[0]===`credentials`&&e.queryKey[1]===`health`},[nr]:{queryKey:[`console`]}},ir=Object.keys(rr),ar=ir.filter(e=>e.startsWith(`res:`)),or=ir.filter(e=>e.startsWith(`stream:`));function sr(e,t){if(t===`res:*`){lr(e);return}let n=rr[t];n!==void 0&&e.invalidateQueries(n)}function cr(e){for(let t of ir)sr(e,t)}function lr(e){e.invalidateQueries()}var ur=4401,dr=500,fr=3e4,pr=new Set([...ar,...or]),mr=3,hr=6e4,gr=(e,t)=>{let n=setTimeout(e,t);return()=>clearTimeout(n)};function _r(){let{protocol:e,host:t}=window.location;return`${e===`https:`?`wss:`:`ws:`}//${t}/api/stream`}function vr(e){if(typeof e!=`string`)return null;let t;try{t=JSON.parse(e)}catch{return null}if(typeof t!=`object`||!t||Array.isArray(t))return null;let n=t,{type:r,topic:i,seq:a}=n;return typeof r!=`string`||i!==void 0&&typeof i!=`string`||a!==void 0&&typeof a!=`number`?null:{type:r,...typeof i==`string`?{topic:i}:{},...typeof a==`number`?{seq:a}:{},...`payload`in n?{payload:n.payload}:{}}}function yr(e){let t=new Set,n=new Set,r=new Map,i=new Map,a=new Map,o=e=>a.has(e)||pr.has(e),s=[],c=null,l=!1,u=!1,d=!1,f=!1,p=!1,m=0,h=null,g={status:`poll`,pushed:()=>!1};function _(){let e=p?`offline`:u&&!f?`push`:`poll`,r=e===`push`;g={status:e,pushed:e=>r&&n.has(e)};for(let e of t)e()}function v(e){c?.send(JSON.stringify(e))}function y(e,t){let n=i.get(e);if(n===void 0||n.size===0)return!1;for(let e of[...n])e(t);return!0}function b(){for(let e of ar)v({type:`subscribe`,topic:e});for(let e of or){let t=r.get(e);v(t===void 0?{type:`subscribe`,topic:e}:{type:`subscribe`,topic:e,sinceSeq:t})}for(let e of a.keys())v({type:`subscribe`,topic:e})}function x(){u=!0,m=0,n.clear(),d&&cr(e.client),d=!0,b(),_()}function S(t){let i=vr(t.data);if(i===null)return;let{topic:a}=i;if(i.type===`ack`){a!==void 0&&o(a)&&(n.add(a),y(a,{kind:`open`}),_());return}if(i.type===`error`){a!==void 0&&(n.delete(a)&&_(),y(a,{kind:`refused`}));return}if(a!==void 0){if(i.type===`gap`){i.seq!==void 0&&r.set(a,i.seq),y(a,{kind:`gap`}),sr(e.client,a);return}if(i.type===`event`){if(a===`res:*`){lr(e.client);return}if(i.seq!==void 0){let t=r.get(a);if(r.set(a,i.seq),t!==void 0&&i.seq>t+1){y(a,{kind:`gap`}),sr(e.client,a);return}}i.payload!==void 0&&y(a,{kind:`frame`,payload:i.payload})||sr(e.client,a)}}}function C(t){let r=u;u=!1,c=null,n.clear();for(let e of[...i.keys()])y(e,{kind:`closed`});if(l){if(t.code===ur){p=!0,l=!1,_(),lr(e.client);return}if(!r)f=!0;else{let t=e.now();s=[...s.filter(e=>e>t-hr),t],s.length>=mr&&(f=!0)}_(),w()}}function w(){let t=Math.min(fr,dr*2**m);m+=1,h=e.timer(()=>{h=null,l&&T()},t)}function T(){let t=new WebSocket(e.url());c=t,t.addEventListener(`open`,x),t.addEventListener(`message`,S),t.addEventListener(`close`,C)}function E(e,t){let n=i.get(e)??new Set;return i.set(e,n),n.add(t),()=>{n.delete(t),n.size===0&&i.delete(e)}}return{subscribe(e){return t.add(e),()=>{t.delete(e)}},snapshot:()=>g,hold(e,t){let r=E(e,t),i=(a.get(e)??0)+1;a.set(e,i),i===1&&u&&v({type:`subscribe`,topic:e}),n.has(e)&&t({kind:`open`});let o=!1;return()=>{if(o)return;o=!0,r();let t=(a.get(e)??1)-1;if(t>0){a.set(e,t);return}a.delete(e),n.delete(e)&&_(),u&&v({type:`unsubscribe`,topic:e})}},publish(e,t){return!u||!n.has(e)?!1:(v({type:`send`,topic:e,payload:t}),!0)},onStream:E,start(){return l=!0,T(),()=>{l=!1,h?.(),h=null;let e=c;c=null,u=!1,e?.close()}}}}var br=Oe(null),xr=Oe(null),Sr=Oe(null),Cr={status:`poll`,pushed:()=>!1};function wr({children:e,enabled:t=!0,timer:n=gr,now:r=Date.now,url:i=_r}){let a=Ee(),[o]=je(()=>yr({client:a,timer:n,now:r,url:i})),[s]=je(()=>({subscribe:(e,t)=>o.hold(e,e=>{if(e.kind===`gap`){t({kind:`closed`});return}t(e)}),send:o.publish}));N(()=>{if(t)return o.start()},[o,t]);let c=Me(o.subscribe,o.snapshot,o.snapshot);return P(br,{value:c,children:P(xr,{value:o.onStream,children:P(Sr,{value:s,children:e})})})}function Tr(){return ke(br)??Cr}function Er(e,t){let n=ke(xr),r=Ae(t);N(()=>{r.current=t}),N(()=>{if(n!==null)return n(e,e=>r.current(e))},[n,e])}function Dr(e,t){let n=ke(Sr),r=Ae(t);N(()=>{r.current=t}),N(()=>{if(n!==null&&e!==null)return n.subscribe(e,e=>r.current(e))},[n,e])}function Or({children:e}){let t=Tr(),n=ke(Sr);return P(ye,{connection:t,...n===null?{}:{channels:n},children:e})}async function kr(e){return e.queryClient.ensureQueryData({queryKey:s.status,queryFn:()=>fe(`/api/status`),revalidateIfStale:!0})}function Ar(e){let t=e.principal;return e.authenticated!==!0||t==null?`/login`:t.kind===`client`?`/client`:t.kind===`admin`||t.kind===`viewer`?`/`:`/login`}function jr(e,t){let n=Ar(e);if(n===`/login`)throw le({to:`/login`,search:{next:t}});if(n!==`/`)throw le({to:n})}function Mr(e,t){let n=Ar(e);if(n===`/login`)throw le({to:`/login`,search:{next:t}});if(n!==`/client`)throw le({to:n})}var Nr=k(`/_app`)({beforeLoad:async({context:e,location:t})=>{jr(await kr(e),t.href),await e.queryClient.ensureQueryData(a)},pendingComponent:Pr,pendingMs:200,errorComponent:O(()=>A(()=>import(`./_app-CSru2YTE.js`),__vite__mapDeps([0,1])),`errorComponent`),component:Fr});function Pr(){return P(he,{legend:`Console`,children:P(ge,{rows:6})})}function Fr(){let e=c().data??[];return P(wr,{children:F(Or,{children:[P(be,{$providers:e}),P(xe,{children:P(Un,{})})]})})}var Ir=k(`/client`)({beforeLoad:async({context:e,location:t})=>{Mr(await kr(e),t.href)},component:O(()=>A(()=>import(`./client-DUhmc9Si.js`),__vite__mapDeps([2,3,4,1,5,6,7,8,9,10,11,12,13,14,15,16,17])),`component`)}),Lr=k(`/login`)({validateSearch:e=>({...typeof e.next==`string`?{next:e.next}:{},...typeof e.reason==`string`?{reason:e.reason}:{}}),component:O(()=>A(()=>import(`./login-DbXxdOl5.js`),__vite__mapDeps([18,4,1,11,19])),`component`)}),Rr=k(`/_app/`)({component:O(()=>A(()=>import(`./_app.index-BV1kJJjA.js`),__vite__mapDeps([20,4,1,5,7,10,14,12,17])),`component`)}),zr=k(`/_app/accounts`)({component:O(()=>A(()=>import(`./_app.accounts-2syjcpos.js`),__vite__mapDeps([21,4,1,5,22,13,8,23,24,25,26,9,10,11,14,12,15,3])),`component`)}),Br=k(`/_app/console`)({component:O(()=>A(()=>import(`./_app.console-Dxkf_zSS.js`),__vite__mapDeps([27,4,1,5,11])),`component`)}),Vr=k(`/_app/database`)({component:O(()=>A(()=>import(`./_app.database-CqSoTi2l.js`),__vite__mapDeps([28,4,1,5,25,11,14,12,17,19])),`component`)}),Hr=k(`/_app/keys`)({component:O(()=>A(()=>import(`./_app.keys-Dq5O0AG9.js`),__vite__mapDeps([29,4,1,5,22,13,8,23,26,9,10,11,14,12])),`component`)}),Ur=k(`/_app/logs`)({component:O(()=>A(()=>import(`./_app.logs-PjRK5wqy.js`),__vite__mapDeps([30,4,1,5,6,7,8,9,10,11,12])),`component`)}),Wr=k(`/_app/models`)({component:O(()=>A(()=>import(`./_app.models-BfmeeB5e.js`),__vite__mapDeps([31,4,1,5,23,24,25,26,9,10,11,14])),`component`)}),Gr=k(`/_app/settings`)({component:O(()=>A(()=>import(`./_app.settings-5i-vvT-H.js`),__vite__mapDeps([32,4,1,5,26,9,11,14,19])),`component`)}),Kr=k(`/_app/usage`)({component:O(()=>A(()=>import(`./_app.usage--5qFtU1W.js`),__vite__mapDeps([33,3,4,1,5,12,16,17])),`component`)}),qr=k(`/_app/plugins/$pluginId`)({component:O(()=>A(()=>import(`./_app.plugins._pluginId-BSlXzAHP.js`),__vite__mapDeps([34,4,1,35,5])),`component`)}),$=Nr.update({id:`/_app`,getParentRoute:()=>tr}),Jr=Ir.update({id:`/client`,path:`/client`,getParentRoute:()=>tr}),Yr=Lr.update({id:`/login`,path:`/login`,getParentRoute:()=>tr}),Xr=Rr.update({id:`/`,path:`/`,getParentRoute:()=>$}),Zr={AppAccountsRoute:zr.update({id:`/accounts`,path:`/accounts`,getParentRoute:()=>$}),AppConsoleRoute:Br.update({id:`/console`,path:`/console`,getParentRoute:()=>$}),AppDatabaseRoute:Vr.update({id:`/database`,path:`/database`,getParentRoute:()=>$}),AppKeysRoute:Hr.update({id:`/keys`,path:`/keys`,getParentRoute:()=>$}),AppLogsRoute:Ur.update({id:`/logs`,path:`/logs`,getParentRoute:()=>$}),AppModelsRoute:Wr.update({id:`/models`,path:`/models`,getParentRoute:()=>$}),AppSettingsRoute:Gr.update({id:`/settings`,path:`/settings`,getParentRoute:()=>$}),AppUsageRoute:Kr.update({id:`/usage`,path:`/usage`,getParentRoute:()=>$}),AppIndexRoute:Xr,AppPluginsPluginIdRoute:qr.update({id:`/plugins/$pluginId`,path:`/plugins/$pluginId`,getParentRoute:()=>$})},Qr={AppRoute:$._addFileChildren(Zr),ClientRoute:Jr,LoginRoute:Yr},$r=tr._addFileChildren(Qr)._addFileTypes();function ei(e){return{isLoginRoute:()=>e().state.location.pathname===`/login`,onUnauthenticated:()=>void e().navigate({to:`/login`,search:{next:e().state.location.href}})}}function ti(e){let t=t=>{t instanceof me&&t.isUnauthenticated&&(e.isLoginRoute()||e.onUnauthenticated())};return new we({queryCache:new Ce({onError:t}),mutationCache:new Se({onError:t}),defaultOptions:{queries:{retry:(e,t)=>t instanceof me&&t.isUnauthenticated?!1:e<2,staleTime:5e3,refetchOnWindowFocus:!0},mutations:{retry:!1}}})}var ni,ri=ti(ei(()=>ni));ni=Yn({routeTree:$r,context:{queryClient:ri}});var ii=document.getElementById(`root`);if(ii===null)throw Error(`#root is missing from index.html`);Pe(ii).render(P(De,{children:P(ve,{children:P(Te,{client:ri,children:P(Qn,{router:ni})})})}));export{Dr as a,sr as c,Or as i,Lr as n,Er as o,wr as r,nr as s,qr as t};
@@ -1,4 +1,4 @@
1
- import{Et as e,Qt as t,Yt as n,in as r,t as i}from"./Lamp-Dk9XrTCg.js";import{O as a,S as o,T as s,c,i as l,k as u,y as d}from"./Panel-CsovmtxF.js";import{n as f}from"./index-D1RDaq3l.js";import{n as p,t as m}from"./Field-DG1317zr.js";import{t as h}from"./reasons-Du1OBWAM.js";import{useState as g}from"react";import{jsx as _,jsxs as v}from"react/jsx-runtime";import y from"styled-components";var b=y.div`
1
+ import{Et as e,Qt as t,Yt as n,in as r,t as i}from"./Lamp-Dk9XrTCg.js";import{O as a,S as o,T as s,c,i as l,k as u,y as d}from"./Panel-CsovmtxF.js";import{n as f}from"./index-Bzh27906.js";import{n as p,t as m}from"./Field-DG1317zr.js";import{t as h}from"./reasons-Du1OBWAM.js";import{useState as g}from"react";import{jsx as _,jsxs as v}from"react/jsx-runtime";import y from"styled-components";var b=y.div`
2
2
  display: flex;
3
3
  align-items: center;
4
4
  justify-content: center;
package/public/index.html CHANGED
@@ -9,7 +9,7 @@
9
9
  <link rel="icon" href="/favicon.svg" type="image/svg+xml" />
10
10
  <title>OmniGateway — One endpoint in front of the AI accounts you already pay for.</title>
11
11
  <script type="importmap">{"imports":{"react":"/shared/react.js","react/jsx-runtime":"/shared/jsx-runtime.js","react-dom":"/shared/react-dom.js","react-dom/client":"/shared/react-dom-client.js","styled-components":"/shared/styled-components.js","@tanstack/react-query":"/shared/react-query.js","@omnigateway/dashboard-sdk":"/shared/dashboard-sdk.js"}}</script>
12
- <script type="module" crossorigin src="/assets/index-D1RDaq3l.js"></script>
12
+ <script type="module" crossorigin src="/assets/index-Bzh27906.js"></script>
13
13
  <link rel="modulepreload" crossorigin href="/assets/Panel-CsovmtxF.js">
14
14
  <link rel="modulepreload" crossorigin href="/assets/Lamp-Dk9XrTCg.js">
15
15
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-B7KDmXJ9.js">
@@ -1,70 +0,0 @@
1
- import{F as e,Ft as t,G as n,I as r,Jt as i,Lt as a,Mt as o,Nt as s,Pt as c,St as l,T as u,U as d,_t as f,b as p,c as m,ct as ee,d as h,en as g,h as _,j as v,kt as te,mt as y,n as b,o as x,pt as ne,s as S,st as re,t as ie,ut as C,v as w,y as T}from"./Lamp-Dk9XrTCg.js";import{A as E,C as ae,S as D,T as O,a as oe,b as k,c as A,k as j,o as M,r as N,s as P,y as F}from"./Panel-CsovmtxF.js";import{A as I,D as L,i as se,r as R,t as ce,w as z}from"./Rack-CDUOJkS2.js";import{t as le}from"./CopyValue-DAlmkISB.js";import{t as ue}from"./chevron-down-Bb5ZGvwk.js";import{t as de}from"./chevron-right-hwF5mD6-.js";import{t as fe}from"./plus-BgcHxxIr.js";import{t as pe}from"./rotate-ccw-Do43Argv.js";import{t as me}from"./trash-00950_yY.js";import{t as he}from"./Toggle-CdMD58sy.js";import{t as ge}from"./Chip-D0XSbQUr.js";import{i as B,n as V,r as _e,t as H}from"./Field-DG1317zr.js";import{t as ve}from"./Meter-stpt3vQu.js";import{i as ye,n as U,r as W,t as be}from"./Table-CVDZ69Zx.js";import{n as xe,r as G,t as K}from"./WindowChart-Bqbl-KFO.js";import{Fragment as Se,useCallback as Ce,useEffect as we,useState as q}from"react";import{Fragment as J,jsx as Y,jsxs as X}from"react/jsx-runtime";import Z from"styled-components";var Q={name:`external-link`,size:24,node:[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`M10 14 21 3`,key:`gplh6r`}],[`path`,{d:`M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6`,key:`a6xqqp`}]]};Q.node;var Te=I(Q),Ee={name:`refresh-cw`,size:24,node:[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]};Ee.node;var De=I(Ee);function Oe(e){return e?.authTypes??[]}function ke(e){return Oe(e).includes(`oauth`)?`oauth`:`apiKey`}function $(e){return e[0]?.id??`anthropic`}var Ae={oauth:`Authorize in the browser`,apiKey:`Paste an API key`};function je(e){let t=e?.callback;return t===void 0?`code#state`:`${t.uri}?code=…`}var Me=Z.ol`
2
- display: flex;
3
- flex-direction: column;
4
- gap: ${({theme:e})=>e.space(3)};
5
- `,Ne=Z.div`
6
- font-family: ${({theme:e})=>e.font.mono};
7
- font-size: 26px;
8
- letter-spacing: 0.22em;
9
- text-align: center;
10
- padding: ${({theme:e})=>e.space(3)};
11
- background: ${({theme:e})=>e.color.panelSunk};
12
- border: 1px solid ${({theme:e})=>e.color.ruleStrong};
13
- border-radius: ${({theme:e})=>e.radius.control};
14
- `,Pe=Z.p`
15
- font-size: 12px;
16
- color: ${({theme:e})=>e.color.down};
17
- `,Fe=Z.p`
18
- font-size: 12px;
19
- color: ${({theme:e})=>e.color.inkDim};
20
- `;function Ie({open:e,credentials:t,onOpenChange:r,onConnected:i}){let a=o().data??[],[s,c]=q(()=>$(a)),l=d(a,s),[u,f]=q(()=>ke(d(a,$(a)))),[p,m]=q(``),h=l?.label??s,[g,_]=q(null),[v,te]=q(``),[y,b]=q(``),x=(t??[]).filter((e,t,n)=>e.provider===`custom`&&n.findIndex(t=>t.provider===`custom`&&t.providerData.endpointId===e.providerData.endpointId)===t),[ne,S]=q(``),[ie,w]=q(``),[T,E]=q(`chat_completions`),[ae,oe]=q(``),[k,M]=q(null),N=ee(),P=re(),I=C(),L=Ce(()=>{_(null),te(``),b(``),S(``),w(``),E(`chat_completions`),oe(``),M(null),m(``),N.reset(),P.reset(),I.reset()},[N,P,I]),R=Ce(e=>{e||L(),r(e)},[r,L]);return we(()=>{if(g===null||g.kind!==`device`)return;let e=!1,t=async()=>{try{let t=await n(g.flowId);if(e)return;if(t.status===`complete`){L(),r(!1),i();return}}catch(t){if(e)return;M(A(t)),_(null);return}e||(a=setTimeout(()=>void t(),g.pollIntervalMs))},a=setTimeout(()=>void t(),g.pollIntervalMs);return()=>{e=!0,clearTimeout(a)}},[g,i,r,L]),Y(se,{open:e,onOpenChange:R,title:`Connect an account`,description:`The gateway stores the resulting token encrypted. It is never shown again after this dialog.`,footer:g===null?X(J,{children:[Y(j,{type:`button`,onClick:()=>R(!1),children:`Cancel`}),Y(j,{type:`button`,$variant:`primary`,disabled:N.isPending||I.isPending,onClick:()=>{if(M(null),u===`apiKey`){I.mutate({provider:s,apiKey:ae,label:p.trim()||void 0,...s===`custom`?{endpointId:y,endpointLabel:ne,origin:ie,protocol:T}:{}},{onSuccess:()=>{L(),r(!1),i()},onError:e=>M(A(e))});return}N.mutate({provider:s,label:p.trim().length===0?h:p.trim()},{onSuccess:e=>_(e),onError:e=>M(A(e))})},children:u===`apiKey`?I.isPending?`Adding…`:`Add API key`:N.isPending?`Starting…`:`Start authorization`})]}):g.kind===`device`?Y(j,{type:`button`,onClick:()=>R(!1),children:`Cancel`}):X(J,{children:[Y(j,{type:`button`,onClick:()=>R(!1),children:`Cancel`}),Y(j,{type:`button`,$variant:`primary`,disabled:P.isPending||v.trim().length===0,onClick:()=>{g!==null&&(M(null),P.mutate({flowId:g.flowId,code:v.trim()},{onSuccess:()=>{L(),r(!1),i()},onError:e=>M(A(e))}))},children:P.isPending?`Finishing…`:`Finish connecting`})]}),children:X(Me,{children:[g===null?X(O,{$gap:3,children:[Y(H,{label:`Provider`,children:e=>Y(B,{...e,value:s,onChange:e=>{let t=e.target.value;c(t),f(ke(d(a,t)))},children:a.map(e=>Y(`option`,{value:e.id,children:e.label},e.id))})}),Oe(l).length>1?Y(H,{label:`How to connect`,children:e=>Y(B,{...e,value:u,onChange:e=>f(e.target.value),children:Oe(l).map(e=>Y(`option`,{value:e,children:Ae[e]},e))})}):null,s===`custom`?X(J,{children:[x.length===0?null:Y(H,{label:`Existing endpoint`,children:e=>X(B,{...e,value:y,onChange:e=>{let t=x.find(t=>t.providerData.endpointId===e.target.value);if(t===void 0){b(``),S(``),w(``),E(`chat_completions`);return}b(String(t.providerData.endpointId)),S(String(t.providerData.endpointLabel)),w(String(t.providerData.origin)+String(t.providerData.basePath??``)),E(t.providerData.protocol===`responses`?`responses`:`chat_completions`)},children:[Y(`option`,{value:``,children:`Create new endpoint`}),x.map(e=>Y(`option`,{value:String(e.providerData.endpointId),children:String(e.providerData.endpointLabel)},String(e.providerData.endpointId)))]})}),Y(H,{label:`Endpoint ID`,children:e=>Y(V,{...e,value:y,onChange:e=>b(e.target.value)})}),Y(H,{label:`Endpoint label`,children:e=>Y(V,{...e,value:ne,onChange:e=>S(e.target.value)})}),Y(H,{label:`Server URL`,children:e=>Y(V,{...e,value:ie,placeholder:`https://server.example/api`,onChange:e=>w(e.target.value)})}),ie.trim().toLowerCase().startsWith(`http://`)?Y(Pe,{children:`Plaintext transport sends prompts and API keys without TLS.`}):null,Y(H,{label:`Protocol`,children:e=>X(B,{...e,value:T,onChange:e=>E(e.target.value),children:[Y(`option`,{value:`chat_completions`,children:`Chat Completions (/v1/chat/completions)`}),Y(`option`,{value:`responses`,children:`Responses (/v1/responses)`})]})})]}):null,u===`apiKey`?Y(H,{label:`API key`,children:e=>Y(V,{...e,type:`password`,value:ae,autoComplete:`off`,onChange:e=>oe(e.target.value)})}):null,Y(H,{label:`Label`,hint:`How this account is named in the rack. Defaults to the provider.`,children:e=>Y(V,{...e,value:p,placeholder:h,onChange:e=>m(e.target.value)})})]}):X(O,{$gap:3,children:[X(O,{$gap:1,children:[Y(F,{children:`Step 1 — authorize`}),Y(D,{$gap:2,children:X(j,{as:`a`,href:g.authorizeUrl,target:`_blank`,rel:`noreferrer noopener`,$variant:`primary`,$size:`sm`,children:[Y(Te,{}),`Open `,h]})}),Y(le,{value:g.authorizeUrl,label:`Copy authorization link`})]}),g.userCode===null?null:X(O,{$gap:1,children:[Y(F,{children:`Step 2 — enter this code`}),Y(Ne,{children:g.userCode})]}),g.kind===`device`?X(Fe,{children:[l?.pasteHint??``,` Waiting for authorization…`]}):Y(H,{label:`Authorization code`,hint:l?.pasteHint??``,...k===null?{}:{problem:k},children:e=>Y(V,{...e,value:v,autoFocus:!0,placeholder:je(l),onChange:e=>te(e.target.value)})})]}),k===null||g?.kind===`pkce`?null:Y(Pe,{children:k})]})})}function Le({credentialId:e,windows:t,burn:n,pollIntervalMs:r,now:i}){let a=t.map(e=>({window:e,estimate:x(n,e.windowType),since:G(p(e))})),o=a.map(e=>e.since).filter(e=>e!==null),c=o.length===0?0:Math.min(...o),l=s({credentialId:e,since:c},o.length>0),u=l.data?.samples??[],d=l.data?.gatewayRates??[],f=l.data?.truncated===!0;return Y(O,{$gap:4,children:a.map(e=>Y(Re,{window:e.window,estimate:e.estimate,since:e.since,samples:u.filter(t=>t.windowType===e.window.windowType&&t.observedAt>=(e.since??0)),gatewayRate:d.find(t=>t.windowType===e.window.windowType),truncated:f,pollIntervalMs:r,now:i},e.window.windowType))})}function Re({window:e,estimate:t,since:n,samples:r,gatewayRate:i,truncated:a,pollIntervalMs:o,now:s}){let c=e.limit===null?`${v(e.used)} used`:`${v(e.used)} of ${v(e.limit)} used`,l=u(e,s),d=t===void 0||h(e,s,o)||t.stale&&!l;return Y(xe,{live:p(e),samples:r.map(p),since:n,now:s,truncated:a&&n!==null&&r.length>0&&(r[0]?.observedAt??0)>n,ratePerHourRatio:T(e,t),exhaustsAt:t?.exhaustsAt??null,survives:t?.survives??null,stale:d,rolledOver:l,spent:c,rateText:t?.ratePerHour===void 0||t.ratePerHour===null?`unknown`:`${v(t.ratePerHour)}/h`,extraFact:Y(K,{legend:`This gateway accounts for`,value:i?.gatewayRatePerHour===void 0||i.gatewayRatePerHour===null?`unknown`:`${v(i.gatewayRatePerHour)} tokens/h`})})}function ze({credential:e,busy:t,onOpenChange:n,onConfirm:i}){let o=a(e?.id??null),s=Date.now(),c=(o.data?.credits??[]).filter(e=>e.status===`available`).sort((e,t)=>(e.expiresAt??1/0)-(t.expiresAt??1/0))[0],l=o.isError||o.isFetching?0:o.data?.available??0,u=e===null?``:o.isFetching?`Reading the reset credits this account holds…`:o.isError?`Could not read reset credits for "${e.label}".`:l===0?`"${e.label}" has no reset credits available.`:`Spend one of ${l} reset ${l===1?`credit`:`credits`} on "${e.label}"? Its usage windows go back to zero at the provider, and the credit cannot be returned.`+(c?.expiresAt==null?``:` The credit spent is the one expiring soonest (${r(c.expiresAt,s)}).`);return Y(R,{open:e!==null,onOpenChange:n,title:`Reset quota`,body:u,confirmLabel:`Spend reset`,busy:t||c===void 0||l===0,onConfirm:()=>{e!==null&&c!==void 0&&l>0&&i(e,c.id)}})}var Be=Z(N)`
21
- border-left: 3px solid ${({$provider:e})=>z(e)};
22
- `,Ve=Z(V)`
23
- width: 100%;
24
- min-width: 140px;
25
- height: 26px;
26
- font-family: ${({theme:e})=>e.font.sans};
27
- font-size: 12.5px;
28
- background: transparent;
29
- border-color: transparent;
30
-
31
- &:hover:not(:disabled),
32
- &:focus {
33
- background: ${({theme:e})=>e.color.panelSunk};
34
- border-color: ${({theme:e})=>e.color.ruleStrong};
35
- }
36
- `,He=Z(_e)`
37
- width: 62px;
38
- height: 26px;
39
- `,Ue=Z.span`
40
- display: block;
41
- padding-left: 9px;
42
- font-size: 11px;
43
- color: ${({theme:e})=>e.color.inkDim};
44
- `,We=Z.div`
45
- margin: 0 0 10px;
46
- min-height: 16px;
47
- font-size: 12px;
48
- color: ${({theme:e})=>e.color.inkDim};
49
- `,Ge=Z.p`
50
- margin: 0;
51
- `,Ke=Z.ul`
52
- margin: 4px 0 0;
53
- padding-left: 16px;
54
- list-style: disc;
55
- `,qe=Z.div`
56
- display: grid;
57
- /* Bar, figure, legend. The figure has a column of its own so the legends stay
58
- aligned down the stack whether a window reads 4% or 100%. */
59
- grid-template-columns: 96px 34px 1fr;
60
- align-items: center;
61
- min-width: 208px;
62
- gap: 6px;
63
- `,Je=Z(k)`
64
- font-size: 11px;
65
- text-align: right;
66
- `,Ye=Z.div`
67
- display: flex;
68
- flex-direction: column;
69
- gap: 4px;
70
- `;function Xe(){let e=g();return{pending:e.isPending,commit:(t,n)=>{e.mutate({id:t,patch:n})}}}function Ze(e,t){if(t===void 0)return` The list of models could not be read, so whether any target is pinned to this account is unknown.`;let n=t.filter(t=>t.targets.some(t=>t.credentialId===e.id)).map(e=>e.id);return n.length===0?``:` ${n.length===1?`The model`:`The models`} ${n.join(`, `)} ${n.length===1?`pins a target`:`pin targets`} to this account. Those targets will fail rather than fall back to another account.`}function Qe(){let{cadence:n}=L(),a=y(),s=ne(n(1e4,`res:credentials`)),u=i(),p=te(),ee=o(),h=f(),g=t(),v=c(),[re,C]=q(null),T=l(),{commit:k}=Xe(),[A,I]=q(!1),[se,z]=q(null),[le,B]=q([]),[V,_e]=q(new Set),[H,xe]=q(!1),[G,K]=q(null),[Ce,we]=q(new Set),Z=e=>we(t=>{let n=new Set(t);return n.delete(e)||n.add(e),n}),Q=a.data??[],Te=e=>Q.find(t=>t.id===e)?.label??e,Ee=e=>{let t=e[0];if(e.length===1&&t!==void 0){let e=Te(t.credentialId);return t.kind===`refreshed`||t.kind===`coalesced`?`Quota refreshed for ${e}.`:t.kind===`noData`?`No quota data reported for ${e}.`:t.kind===`cooldown`?`Quota refresh is cooling down for ${e}.`:t.kind===`unsupported`?`${e} does not report quota.`:t.kind===`disabled`?`${e} is disabled, so it was not probed.`:`Quota refresh failed for ${e}.`}let n=e.filter(e=>e.kind===`refreshed`||e.kind===`coalesced`).length,r=e.filter(e=>e.kind===`failed`).length,i=e.filter(e=>e.kind===`cooldown`).length,a=e.length-n-r-i;return[`Refreshed ${n} ${n===1?`account`:`accounts`}`,r===0?null:`${r} failed`,i===0?null:`${i} cooling down`,a===0?null:`${a} skipped`].filter(e=>e!==null).join(`; `).concat(`.`)},Oe=e=>e.filter(e=>e.kind===`failed`||e.kind===`cooldown`||e.kind===`noData`).map(e=>`${Te(e.credentialId)}: ${e.kind===`failed`?`failed`:e.kind===`cooldown`?`cooling down`:`no data reported`}`),ke=async e=>{z(null),B([]),e.kind===`all`?xe(!0):_e(t=>{let n=new Set(t);return n.add(e.credentialId),n});try{let t=await g.mutateAsync(e);z(Ee(t.outcomes)),B(t.outcomes.length>1?Oe(t.outcomes):[])}catch{z(e.kind===`all`?`Quota refresh could not be started.`:`Quota refresh could not be started for ${Te(e.credentialId)}.`)}finally{xe(!1),e.kind===`one`&&_e(t=>{let n=new Set(t);return n.delete(e.credentialId),n})}},$=Date.now(),Ae=ee.data??[],je=e=>d(Ae,e)?.order??1/0,Me=[...new Set(Q.map(e=>e.provider))].sort((e,t)=>je(e)-je(t)),Ne=e=>d(Ae,e)?.label??e,Pe=m(s.data?.health??[],e=>e.credentialId),Fe=m(s.data?.quota??[],e=>e.credentialId),Re=m(s.data?.burn??[],e=>e.credentialId),Qe=u.data?.quotaPollIntervalMs??3e5,$e=Q.filter(e=>e.enabled).length,et=a.isLoading?`Reading connected accounts…`:Q.length===0?`No provider credentials are connected, so every request fails at the router.`:`${$e} of ${Q.length} accounts are enabled and eligible for routing.`;return X(J,{children:[Y(ce,{legend:`Accounts`,title:`Provider accounts`,summary:et,actions:X(D,{$gap:1,children:[T?X(j,{type:`button`,$variant:`ghost`,disabled:H||V.size>0,onClick:()=>void ke({kind:`all`}),children:[Y(De,{}),H?`Refreshing quota…`:`Refresh all quota`]}):null,X(j,{type:`button`,$variant:`primary`,onClick:()=>I(!0),children:[Y(fe,{}),`Connect an account`]})]})}),X(We,{children:[Y(Ge,{role:`status`,"aria-live":`polite`,children:se??``}),le.length===0?null:Y(Ke,{children:le.map(e=>Y(`li`,{children:e},e))})]}),a.isError?Y(N,{legend:`Accounts`,children:Y(M,{error:a.error,onRetry:()=>void a.refetch()})}):a.isLoading?Y(N,{legend:`Accounts`,children:Y(P,{rows:5})}):Q.length===0?Y(N,{legend:`Accounts`,children:Y(oe,{legend:`Nothing connected`,message:`Connect a provider account to give the router something to dispatch to. Tokens are encrypted at rest and never shown again.`,action:Y(j,{type:`button`,$variant:`primary`,$size:`sm`,onClick:()=>I(!0),children:`Connect an account`})})}):Y(O,{$gap:4,children:Me.map(t=>{let n=Q.filter(e=>e.provider===t);return Y(Be,{$provider:t,legend:Ne(t),meta:`${n.length} account${n.length===1?``:`s`}`,flush:!0,children:Y(ae,{children:X(be,{children:[Y(`thead`,{children:X(`tr`,{children:[Y(W,{$width:`24%`,children:`Account`}),Y(W,{$width:`20%`,children:`Sign-in`}),Y(W,{$align:`right`,$width:`86px`,children:`Tier`}),Y(W,{$align:`right`,$width:`94px`,children:`Weight`}),Y(W,{$align:`center`,$width:`86px`,children:`Enabled`}),Y(W,{$width:`240px`,children:`Quota`}),Y(W,{$align:`right`,$width:`130px`,children:`Token expires`}),Y(W,{$width:`144px`})]})}),Y(`tbody`,{children:n.map(t=>{let n=S(Pe.get(t.id)??[],$,t.enabled,t.disabledReason),i=Fe.get(t.id)??[],a=Re.get(t.id)??[],o=w(i),s=Ce.has(t.id);return X(Se,{children:[X(ye,{children:[X(U,{children:[X(D,{$gap:2,children:[Y(ie,{state:n.state,label:n.note===``?`healthy`:n.note}),Y(Ve,{defaultValue:t.label,"aria-label":`Label for ${t.label}`,onBlur:e=>{let n=e.target.value.trim();if(n.length===0||n===t.label){e.target.value=t.label;return}k(t.id,{label:n})}})]}),n.note===``?null:Y(Ue,{children:n.note})]}),Y(U,{children:X(D,{$gap:1,children:[Y(ge,{children:t.authType===`oauth`?`oauth`:`api key`}),t.accountEmail===null?null:Y(F,{children:t.accountEmail})]})}),Y(U,{$align:`right`,children:Y(He,{min:1,step:1,defaultValue:t.tier,"aria-label":`Tier for ${t.label}`,onBlur:e=>{let n=Number(e.target.value);if(!Number.isInteger(n)||n<1||n===t.tier){e.target.value=String(t.tier);return}k(t.id,{tier:n})}})}),Y(U,{$align:`right`,children:Y(He,{min:.1,step:.1,defaultValue:t.weight,"aria-label":`Weight for ${t.label}`,onBlur:e=>{let n=Number(e.target.value);if(!Number.isFinite(n)||n<=0||n===t.weight){e.target.value=String(t.weight);return}k(t.id,{weight:n})}})}),Y(U,{$align:`center`,children:Y(he,{checked:t.enabled,label:`Route to ${t.label}`,onCheckedChange:e=>k(t.id,{enabled:e})})}),Y(U,{children:o.length===0?Y(F,{children:`unknown`}):Y(Ye,{children:o.map(({window:t,fraction:n})=>X(qe,{children:[Y(ve,{fraction:n,label:`${b[t.windowType]} window, ${Math.round(n*100)}% used`}),Y(Je,{children:e(n,0)}),Y(F,{children:_(t,$,Qe,r,x(a,t.windowType))})]},t.windowType))})}),Y(U,{$align:`right`,$mono:!0,children:t.expiresAt===null?`never`:r(t.expiresAt,$)}),Y(U,{$align:`right`,children:X(D,{$gap:1,$justify:`flex-end`,children:[i.length===0?null:Y(E,{type:`button`,$variant:`ghost`,$size:`sm`,"aria-expanded":s,"aria-label":`${s?`Hide`:`Show`} quota history for ${t.label}`,title:`${s?`Hide`:`Show`} quota history for ${t.label}`,onClick:()=>Z(t.id),children:Y(s?ue:de,{})}),T&&t.authType===`oauth`&&d(Ae,t.provider)?.quotaResets===!0?Y(E,{type:`button`,$variant:`ghost`,$size:`sm`,"aria-label":`Reset quota for ${t.label}`,title:`Reset quota for ${t.label}`,onClick:()=>C(t),children:Y(pe,{})}):null,T?Y(E,{type:`button`,$variant:`ghost`,$size:`sm`,disabled:H||V.has(t.id),"aria-label":V.has(t.id)?`Refreshing quota for ${t.label}`:`Refresh quota for ${t.label}`,title:`Refresh quota for ${t.label}`,onClick:()=>void ke({kind:`one`,credentialId:t.id}),children:Y(De,{})}):null,Y(E,{type:`button`,$variant:`ghost`,$size:`sm`,"aria-label":`Remove ${t.label}`,title:`Remove ${t.label}`,onClick:()=>K(t),children:Y(me,{})})]})})]}),s?Y(ye,{children:Y(U,{colSpan:9,children:Y(Le,{credentialId:t.id,windows:i,burn:a,pollIntervalMs:Qe,now:$})})}):null]},t.id)})})]})})},t)})}),Y(Ie,{open:A,credentials:a.data??[],onOpenChange:I,onConnected:()=>void a.refetch()}),Y(ze,{credential:re,busy:v.isPending,onOpenChange:e=>{e||C(null)},onConfirm:(e,t)=>{z(null),B([]),v.mutate({credentialId:e.id,creditId:t},{onSuccess:t=>z(t.quotaRefreshed?`Quota reset for ${e.label}.`:`Quota reset for ${e.label}; the meter updates at the next poll.`),onError:()=>z(`Quota reset failed for ${e.label}.`),onSettled:()=>C(null)})}}),Y(R,{open:G!==null,onOpenChange:e=>{e||K(null)},title:`Remove account`,body:G===null?``:`Removing "${G.label}" deletes its stored token. Any model target pointing at ${Ne(G.provider)} loses this account, and reconnecting means authorizing again.`+Ze(G,p.data),confirmLabel:`Remove account`,busy:h.isPending,onConfirm:()=>{G!==null&&h.mutate(G.id,{onSettled:()=>K(null)})}})]})}var $e=Qe;export{$e as component};