omnigateway 0.12.13 → 0.13.1
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 +67 -31
- package/gateway.js +64 -29
- package/package.json +1 -1
- package/public/assets/_app.accounts-2syjcpos.js +70 -0
- package/public/assets/{_app.console-a2TJDoBC.js → _app.console-Dxkf_zSS.js} +1 -1
- package/public/assets/{_app.plugins._pluginId-Owb05aFv.js → _app.plugins._pluginId-BSlXzAHP.js} +1 -1
- package/public/assets/{client-BcXc3lek.js → client-DUhmc9Si.js} +1 -1
- package/public/assets/{index-D1RDaq3l.js → index-Bzh27906.js} +2 -2
- package/public/assets/{login-GB0ZGUvA.js → login-DbXxdOl5.js} +1 -1
- package/public/index.html +1 -1
- package/public/assets/_app.accounts-B2lQkMb0.js +0 -70
package/bin/omni.js
CHANGED
|
@@ -26016,35 +26016,37 @@ var museBodyOrder = [
|
|
|
26016
26016
|
];
|
|
26017
26017
|
|
|
26018
26018
|
// packages/providers/src/openai/profile.ts
|
|
26019
|
-
var OPENAI_CLI_VERSION = env("OMNI_OPENAI_CLI_VERSION", "0.
|
|
26019
|
+
var OPENAI_CLI_VERSION = env("OMNI_OPENAI_CLI_VERSION", "0.159.2");
|
|
26020
26020
|
var OPENAI_UA_PLATFORM = env("OMNI_OPENAI_UA_PLATFORM", "Windows 10.0.26200");
|
|
26021
|
-
var OPENAI_UA_ARCH = env("OMNI_OPENAI_UA_ARCH", "
|
|
26021
|
+
var OPENAI_UA_ARCH = env("OMNI_OPENAI_UA_ARCH", "x86_64");
|
|
26022
|
+
var OPENAI_UA_TERMINAL = env("OMNI_OPENAI_UA_TERMINAL", "WindowsTerminal");
|
|
26023
|
+
var originator = env("OMNI_OPENAI_ORIGINATOR", "codex_cli_rs");
|
|
26022
26024
|
var openaiProfile = {
|
|
26023
26025
|
headers: [
|
|
26024
26026
|
[
|
|
26025
|
-
"
|
|
26026
|
-
env("OMNI_UA_OPENAI",
|
|
26027
|
+
"user-agent",
|
|
26028
|
+
env("OMNI_UA_OPENAI", `${originator}/${OPENAI_CLI_VERSION} (${OPENAI_UA_PLATFORM}; ${OPENAI_UA_ARCH}) ${OPENAI_UA_TERMINAL}`)
|
|
26027
26029
|
],
|
|
26028
|
-
["originator",
|
|
26029
|
-
["
|
|
26030
|
-
["
|
|
26031
|
-
["
|
|
26032
|
-
["Accept", "text/event-stream"]
|
|
26030
|
+
["originator", originator],
|
|
26031
|
+
["version", OPENAI_CLI_VERSION],
|
|
26032
|
+
["x-codex-beta-features", "remote_compaction_v2"],
|
|
26033
|
+
["accept", "text/event-stream"]
|
|
26033
26034
|
],
|
|
26034
26035
|
order: envOrder("OMNI_ORDER_OPENAI", [
|
|
26035
|
-
"
|
|
26036
|
-
"
|
|
26037
|
-
"
|
|
26038
|
-
"chatgpt-account-id",
|
|
26036
|
+
"host",
|
|
26037
|
+
"version",
|
|
26038
|
+
"x-codex-beta-features",
|
|
26039
26039
|
"originator",
|
|
26040
|
-
"
|
|
26041
|
-
"
|
|
26042
|
-
"
|
|
26043
|
-
"
|
|
26044
|
-
"
|
|
26045
|
-
"
|
|
26046
|
-
"
|
|
26047
|
-
"
|
|
26040
|
+
"x-client-request-id",
|
|
26041
|
+
"session-id",
|
|
26042
|
+
"thread-id",
|
|
26043
|
+
"accept",
|
|
26044
|
+
"content-type",
|
|
26045
|
+
"authorization",
|
|
26046
|
+
"chatgpt-account-id",
|
|
26047
|
+
"user-agent",
|
|
26048
|
+
"accept-encoding",
|
|
26049
|
+
"content-length"
|
|
26048
26050
|
])
|
|
26049
26051
|
};
|
|
26050
26052
|
var openaiBodyOrder = [
|
|
@@ -32502,11 +32504,13 @@ async function* decodeResponses(messages, options = {}) {
|
|
|
32502
32504
|
|
|
32503
32505
|
// packages/providers/src/openai/wire.ts
|
|
32504
32506
|
import { createHash as createHash6 } from "crypto";
|
|
32507
|
+
var MAX_CACHE_KEY_LENGTH = 1024;
|
|
32508
|
+
var HEADER_SAFE_KEY = /^[\x21-\x7e]+$/;
|
|
32505
32509
|
function suppliedKey2(req) {
|
|
32506
32510
|
const vendor = req.vendor?.openai;
|
|
32507
32511
|
for (const name of ["prompt_cache_key", "session_id"]) {
|
|
32508
32512
|
const value = vendor?.[name];
|
|
32509
|
-
if (typeof value === "string" && value.length
|
|
32513
|
+
if (typeof value === "string" && value.length <= MAX_CACHE_KEY_LENGTH && HEADER_SAFE_KEY.test(value))
|
|
32510
32514
|
return value;
|
|
32511
32515
|
}
|
|
32512
32516
|
return;
|
|
@@ -32689,18 +32693,18 @@ var openaiCodec = {
|
|
|
32689
32693
|
buildRequest(input2) {
|
|
32690
32694
|
const oauth = input2.credentials.accessToken !== null;
|
|
32691
32695
|
const { body, degradations, cacheKey: cacheKey3 } = toResponsesWire(input2.request, input2.model, { oauth });
|
|
32692
|
-
const protocol = [["
|
|
32696
|
+
const protocol = [["content-type", "application/json"]];
|
|
32693
32697
|
if (oauth) {
|
|
32694
|
-
protocol.push(["
|
|
32698
|
+
protocol.push(["authorization", `Bearer ${input2.credentials.accessToken}`]);
|
|
32695
32699
|
const accountId = input2.credentials.providerData.accountId;
|
|
32696
32700
|
if (typeof accountId === "string")
|
|
32697
32701
|
protocol.push(["chatgpt-account-id", accountId]);
|
|
32698
|
-
protocol.push(["session_id", cacheKey3]);
|
|
32699
32702
|
} else if (input2.credentials.apiKey !== null) {
|
|
32700
|
-
protocol.push(["
|
|
32703
|
+
protocol.push(["authorization", `Bearer ${input2.credentials.apiKey}`]);
|
|
32701
32704
|
} else {
|
|
32702
32705
|
throw input2.fail("AUTH", "openai credential has no token");
|
|
32703
32706
|
}
|
|
32707
|
+
protocol.push(["x-client-request-id", cacheKey3], ["session-id", cacheKey3], ["thread-id", cacheKey3]);
|
|
32704
32708
|
const headers = orderHeaders(mergeHeaders(openaiProfile.headers, protocol), openaiProfile.order);
|
|
32705
32709
|
const include = body.include;
|
|
32706
32710
|
const nativeReasoning = Array.isArray(include) && include.includes("reasoning.encrypted_content");
|
|
@@ -32803,6 +32807,24 @@ function createConnectFlows(deps) {
|
|
|
32803
32807
|
if (provider === undefined)
|
|
32804
32808
|
throw new GatewayError("BAD_REQUEST", "provider does not support OAuth");
|
|
32805
32809
|
const result = await provider.exchange({ code, pending: flow.pending }, { http: deps.http, now: deps.now });
|
|
32810
|
+
if (flow.credentialId !== undefined) {
|
|
32811
|
+
const existing = await deps.store.credentials.get(flow.credentialId);
|
|
32812
|
+
if (existing === null)
|
|
32813
|
+
throw new GatewayError("BAD_REQUEST", "credential not found");
|
|
32814
|
+
await deps.store.credentials.updateSecrets(flow.credentialId, result.secrets, result.expiresAt);
|
|
32815
|
+
await deps.store.credentials.update(flow.credentialId, {
|
|
32816
|
+
enabled: true,
|
|
32817
|
+
disabledReason: null,
|
|
32818
|
+
disabledAt: null,
|
|
32819
|
+
accountEmail: result.accountEmail,
|
|
32820
|
+
providerData: result.providerData
|
|
32821
|
+
});
|
|
32822
|
+
logger2.info("oauth reconnect completed", {
|
|
32823
|
+
provider: flow.provider,
|
|
32824
|
+
credentialId: flow.credentialId
|
|
32825
|
+
});
|
|
32826
|
+
return { id: flow.credentialId };
|
|
32827
|
+
}
|
|
32806
32828
|
const id = crypto.randomUUID();
|
|
32807
32829
|
await deps.store.credentials.create({
|
|
32808
32830
|
id,
|
|
@@ -32839,13 +32861,25 @@ function createConnectFlows(deps) {
|
|
|
32839
32861
|
}
|
|
32840
32862
|
return {
|
|
32841
32863
|
connectableIds,
|
|
32842
|
-
async start(providerInput, labelInput) {
|
|
32864
|
+
async start(providerInput, labelInput, credentialIdInput) {
|
|
32843
32865
|
const unconnectable = () => new GatewayError("BAD_REQUEST", `provider must be one of ${connectableIds().join(", ")}`);
|
|
32844
32866
|
if (!exists(providerInput))
|
|
32845
32867
|
throw unconnectable();
|
|
32846
32868
|
const provider = deps.providers[providerInput];
|
|
32847
32869
|
if (provider === undefined)
|
|
32848
32870
|
throw unconnectable();
|
|
32871
|
+
let credentialId;
|
|
32872
|
+
if (credentialIdInput !== undefined) {
|
|
32873
|
+
if (typeof credentialIdInput !== "string" || credentialIdInput.trim().length === 0) {
|
|
32874
|
+
throw new GatewayError("BAD_REQUEST", "invalid credential for reconnect");
|
|
32875
|
+
}
|
|
32876
|
+
const id = credentialIdInput.trim();
|
|
32877
|
+
const existing = await deps.store.credentials.get(id);
|
|
32878
|
+
if (existing === null || existing.provider !== providerInput || existing.authType !== "oauth") {
|
|
32879
|
+
throw new GatewayError("BAD_REQUEST", "invalid credential for reconnect");
|
|
32880
|
+
}
|
|
32881
|
+
credentialId = id;
|
|
32882
|
+
}
|
|
32849
32883
|
const label3 = typeof labelInput === "string" && labelInput.trim().length > 0 ? labelInput.trim() : providerInput;
|
|
32850
32884
|
const redirectUri = callbackUri(providerInput);
|
|
32851
32885
|
const oauthDeps = { http: deps.http, now: deps.now };
|
|
@@ -32855,6 +32889,7 @@ function createConnectFlows(deps) {
|
|
|
32855
32889
|
provider: providerInput,
|
|
32856
32890
|
label: label3,
|
|
32857
32891
|
pending: start.pending,
|
|
32892
|
+
...credentialId === undefined ? {} : { credentialId },
|
|
32858
32893
|
...start.userCode === undefined ? {} : { userCode: start.userCode }
|
|
32859
32894
|
});
|
|
32860
32895
|
return {
|
|
@@ -36852,9 +36887,9 @@ var bodies = {
|
|
|
36852
36887
|
// apps/cli/src/commands/connect.ts
|
|
36853
36888
|
var DEVICE_TIMEOUT_MS = 600000;
|
|
36854
36889
|
var connect = {
|
|
36855
|
-
usage: "connect <provider> [--label L]",
|
|
36890
|
+
usage: "connect <provider> [--label L] [--credential ID]",
|
|
36856
36891
|
summary: "Authorize a provider account from the terminal",
|
|
36857
|
-
options: { label: { type: "string" } },
|
|
36892
|
+
options: { label: { type: "string" }, credential: { type: "string" } },
|
|
36858
36893
|
async run(args, { ctx, writer, prompt, connect: connectFlows, connectable }) {
|
|
36859
36894
|
const providerId = requirePositional(args, 0, "provider");
|
|
36860
36895
|
const { ids, failures } = await connectable();
|
|
@@ -36863,7 +36898,8 @@ var connect = {
|
|
|
36863
36898
|
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
36899
|
}
|
|
36865
36900
|
const flows = await connectFlows(await ctx.store());
|
|
36866
|
-
const
|
|
36901
|
+
const credentialId = stringFlag(args.values, "credential");
|
|
36902
|
+
const start = await flows.start(providerId, stringFlag(args.values, "label"), credentialId);
|
|
36867
36903
|
writer.err("");
|
|
36868
36904
|
writer.err(`Open this URL to authorize ${providerId}:`);
|
|
36869
36905
|
writer.err(` ${start.authorizeUrl}`);
|
|
@@ -38510,7 +38546,7 @@ function createServiceDeps(input2) {
|
|
|
38510
38546
|
}
|
|
38511
38547
|
|
|
38512
38548
|
// apps/cli/src/version.ts
|
|
38513
|
-
var VERSION = "0.
|
|
38549
|
+
var VERSION = "0.13.1";
|
|
38514
38550
|
|
|
38515
38551
|
// apps/cli/src/commands/service.ts
|
|
38516
38552
|
function gatewayArgv(root) {
|
package/gateway.js
CHANGED
|
@@ -31562,35 +31562,37 @@ var museBodyOrder = [
|
|
|
31562
31562
|
];
|
|
31563
31563
|
|
|
31564
31564
|
// packages/providers/src/openai/profile.ts
|
|
31565
|
-
var OPENAI_CLI_VERSION = env("OMNI_OPENAI_CLI_VERSION", "0.
|
|
31565
|
+
var OPENAI_CLI_VERSION = env("OMNI_OPENAI_CLI_VERSION", "0.159.2");
|
|
31566
31566
|
var OPENAI_UA_PLATFORM = env("OMNI_OPENAI_UA_PLATFORM", "Windows 10.0.26200");
|
|
31567
|
-
var OPENAI_UA_ARCH = env("OMNI_OPENAI_UA_ARCH", "
|
|
31567
|
+
var OPENAI_UA_ARCH = env("OMNI_OPENAI_UA_ARCH", "x86_64");
|
|
31568
|
+
var OPENAI_UA_TERMINAL = env("OMNI_OPENAI_UA_TERMINAL", "WindowsTerminal");
|
|
31569
|
+
var originator = env("OMNI_OPENAI_ORIGINATOR", "codex_cli_rs");
|
|
31568
31570
|
var openaiProfile = {
|
|
31569
31571
|
headers: [
|
|
31570
31572
|
[
|
|
31571
|
-
"
|
|
31572
|
-
env("OMNI_UA_OPENAI",
|
|
31573
|
+
"user-agent",
|
|
31574
|
+
env("OMNI_UA_OPENAI", `${originator}/${OPENAI_CLI_VERSION} (${OPENAI_UA_PLATFORM}; ${OPENAI_UA_ARCH}) ${OPENAI_UA_TERMINAL}`)
|
|
31573
31575
|
],
|
|
31574
|
-
["originator",
|
|
31575
|
-
["
|
|
31576
|
-
["
|
|
31577
|
-
["
|
|
31578
|
-
["Accept", "text/event-stream"]
|
|
31576
|
+
["originator", originator],
|
|
31577
|
+
["version", OPENAI_CLI_VERSION],
|
|
31578
|
+
["x-codex-beta-features", "remote_compaction_v2"],
|
|
31579
|
+
["accept", "text/event-stream"]
|
|
31579
31580
|
],
|
|
31580
31581
|
order: envOrder("OMNI_ORDER_OPENAI", [
|
|
31581
|
-
"
|
|
31582
|
-
"
|
|
31583
|
-
"
|
|
31584
|
-
"chatgpt-account-id",
|
|
31582
|
+
"host",
|
|
31583
|
+
"version",
|
|
31584
|
+
"x-codex-beta-features",
|
|
31585
31585
|
"originator",
|
|
31586
|
-
"
|
|
31587
|
-
"
|
|
31588
|
-
"
|
|
31589
|
-
"
|
|
31590
|
-
"
|
|
31591
|
-
"
|
|
31592
|
-
"
|
|
31593
|
-
"
|
|
31586
|
+
"x-client-request-id",
|
|
31587
|
+
"session-id",
|
|
31588
|
+
"thread-id",
|
|
31589
|
+
"accept",
|
|
31590
|
+
"content-type",
|
|
31591
|
+
"authorization",
|
|
31592
|
+
"chatgpt-account-id",
|
|
31593
|
+
"user-agent",
|
|
31594
|
+
"accept-encoding",
|
|
31595
|
+
"content-length"
|
|
31594
31596
|
])
|
|
31595
31597
|
};
|
|
31596
31598
|
var openaiBodyOrder = [
|
|
@@ -38064,11 +38066,13 @@ async function* decodeResponses(messages, options = {}) {
|
|
|
38064
38066
|
|
|
38065
38067
|
// packages/providers/src/openai/wire.ts
|
|
38066
38068
|
import { createHash as createHash6 } from "crypto";
|
|
38069
|
+
var MAX_CACHE_KEY_LENGTH = 1024;
|
|
38070
|
+
var HEADER_SAFE_KEY = /^[\x21-\x7e]+$/;
|
|
38067
38071
|
function suppliedKey2(req) {
|
|
38068
38072
|
const vendor = req.vendor?.openai;
|
|
38069
38073
|
for (const name of ["prompt_cache_key", "session_id"]) {
|
|
38070
38074
|
const value = vendor?.[name];
|
|
38071
|
-
if (typeof value === "string" && value.length
|
|
38075
|
+
if (typeof value === "string" && value.length <= MAX_CACHE_KEY_LENGTH && HEADER_SAFE_KEY.test(value))
|
|
38072
38076
|
return value;
|
|
38073
38077
|
}
|
|
38074
38078
|
return;
|
|
@@ -38251,18 +38255,18 @@ var openaiCodec = {
|
|
|
38251
38255
|
buildRequest(input2) {
|
|
38252
38256
|
const oauth = input2.credentials.accessToken !== null;
|
|
38253
38257
|
const { body, degradations, cacheKey: cacheKey3 } = toResponsesWire(input2.request, input2.model, { oauth });
|
|
38254
|
-
const protocol = [["
|
|
38258
|
+
const protocol = [["content-type", "application/json"]];
|
|
38255
38259
|
if (oauth) {
|
|
38256
|
-
protocol.push(["
|
|
38260
|
+
protocol.push(["authorization", `Bearer ${input2.credentials.accessToken}`]);
|
|
38257
38261
|
const accountId = input2.credentials.providerData.accountId;
|
|
38258
38262
|
if (typeof accountId === "string")
|
|
38259
38263
|
protocol.push(["chatgpt-account-id", accountId]);
|
|
38260
|
-
protocol.push(["session_id", cacheKey3]);
|
|
38261
38264
|
} else if (input2.credentials.apiKey !== null) {
|
|
38262
|
-
protocol.push(["
|
|
38265
|
+
protocol.push(["authorization", `Bearer ${input2.credentials.apiKey}`]);
|
|
38263
38266
|
} else {
|
|
38264
38267
|
throw input2.fail("AUTH", "openai credential has no token");
|
|
38265
38268
|
}
|
|
38269
|
+
protocol.push(["x-client-request-id", cacheKey3], ["session-id", cacheKey3], ["thread-id", cacheKey3]);
|
|
38266
38270
|
const headers = orderHeaders(mergeHeaders(openaiProfile.headers, protocol), openaiProfile.order);
|
|
38267
38271
|
const include = body.include;
|
|
38268
38272
|
const nativeReasoning = Array.isArray(include) && include.includes("reasoning.encrypted_content");
|
|
@@ -38372,6 +38376,24 @@ function createConnectFlows(deps) {
|
|
|
38372
38376
|
if (provider === undefined)
|
|
38373
38377
|
throw new GatewayError("BAD_REQUEST", "provider does not support OAuth");
|
|
38374
38378
|
const result = await provider.exchange({ code, pending: flow.pending }, { http: deps.http, now: deps.now });
|
|
38379
|
+
if (flow.credentialId !== undefined) {
|
|
38380
|
+
const existing = await deps.store.credentials.get(flow.credentialId);
|
|
38381
|
+
if (existing === null)
|
|
38382
|
+
throw new GatewayError("BAD_REQUEST", "credential not found");
|
|
38383
|
+
await deps.store.credentials.updateSecrets(flow.credentialId, result.secrets, result.expiresAt);
|
|
38384
|
+
await deps.store.credentials.update(flow.credentialId, {
|
|
38385
|
+
enabled: true,
|
|
38386
|
+
disabledReason: null,
|
|
38387
|
+
disabledAt: null,
|
|
38388
|
+
accountEmail: result.accountEmail,
|
|
38389
|
+
providerData: result.providerData
|
|
38390
|
+
});
|
|
38391
|
+
logger2.info("oauth reconnect completed", {
|
|
38392
|
+
provider: flow.provider,
|
|
38393
|
+
credentialId: flow.credentialId
|
|
38394
|
+
});
|
|
38395
|
+
return { id: flow.credentialId };
|
|
38396
|
+
}
|
|
38375
38397
|
const id = crypto.randomUUID();
|
|
38376
38398
|
await deps.store.credentials.create({
|
|
38377
38399
|
id,
|
|
@@ -38408,13 +38430,25 @@ function createConnectFlows(deps) {
|
|
|
38408
38430
|
}
|
|
38409
38431
|
return {
|
|
38410
38432
|
connectableIds,
|
|
38411
|
-
async start(providerInput, labelInput) {
|
|
38433
|
+
async start(providerInput, labelInput, credentialIdInput) {
|
|
38412
38434
|
const unconnectable = () => new GatewayError("BAD_REQUEST", `provider must be one of ${connectableIds().join(", ")}`);
|
|
38413
38435
|
if (!exists(providerInput))
|
|
38414
38436
|
throw unconnectable();
|
|
38415
38437
|
const provider = deps.providers[providerInput];
|
|
38416
38438
|
if (provider === undefined)
|
|
38417
38439
|
throw unconnectable();
|
|
38440
|
+
let credentialId;
|
|
38441
|
+
if (credentialIdInput !== undefined) {
|
|
38442
|
+
if (typeof credentialIdInput !== "string" || credentialIdInput.trim().length === 0) {
|
|
38443
|
+
throw new GatewayError("BAD_REQUEST", "invalid credential for reconnect");
|
|
38444
|
+
}
|
|
38445
|
+
const id = credentialIdInput.trim();
|
|
38446
|
+
const existing = await deps.store.credentials.get(id);
|
|
38447
|
+
if (existing === null || existing.provider !== providerInput || existing.authType !== "oauth") {
|
|
38448
|
+
throw new GatewayError("BAD_REQUEST", "invalid credential for reconnect");
|
|
38449
|
+
}
|
|
38450
|
+
credentialId = id;
|
|
38451
|
+
}
|
|
38418
38452
|
const label3 = typeof labelInput === "string" && labelInput.trim().length > 0 ? labelInput.trim() : providerInput;
|
|
38419
38453
|
const redirectUri = callbackUri(providerInput);
|
|
38420
38454
|
const oauthDeps = { http: deps.http, now: deps.now };
|
|
@@ -38424,6 +38458,7 @@ function createConnectFlows(deps) {
|
|
|
38424
38458
|
provider: providerInput,
|
|
38425
38459
|
label: label3,
|
|
38426
38460
|
pending: start.pending,
|
|
38461
|
+
...credentialId === undefined ? {} : { credentialId },
|
|
38427
38462
|
...start.userCode === undefined ? {} : { userCode: start.userCode }
|
|
38428
38463
|
});
|
|
38429
38464
|
return {
|
|
@@ -57798,7 +57833,7 @@ function connectRoutes(deps) {
|
|
|
57798
57833
|
return new Elysia().onError(apiErrorHandler).post("/api/connect/start", async ({ request: request2 }) => {
|
|
57799
57834
|
await requireAdmin(request2, deps.admin);
|
|
57800
57835
|
const body2 = await readJsonRecord(request2);
|
|
57801
|
-
return flows.start(body2?.provider, body2?.label);
|
|
57836
|
+
return flows.start(body2?.provider, body2?.label, body2?.credentialId);
|
|
57802
57837
|
}).post("/api/connect/finish", async ({ request: request2 }) => {
|
|
57803
57838
|
await requireAdmin(request2, deps.admin);
|
|
57804
57839
|
const body2 = await readJsonRecord(request2);
|
|
@@ -63457,7 +63492,7 @@ function createRing(limits = DEFAULT_RING_LIMITS) {
|
|
|
63457
63492
|
}
|
|
63458
63493
|
|
|
63459
63494
|
// apps/gateway/src/version.ts
|
|
63460
|
-
var VERSION = "0.
|
|
63495
|
+
var VERSION = "0.13.1";
|
|
63461
63496
|
|
|
63462
63497
|
// apps/gateway/src/app.ts
|
|
63463
63498
|
var ADMIN_SESSION_TTL_MS = 12 * 60 * 60 * 1000;
|
package/package.json
CHANGED
|
@@ -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-
|
|
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)`
|
package/public/assets/{_app.plugins._pluginId-Owb05aFv.js → _app.plugins._pluginId-BSlXzAHP.js}
RENAMED
|
@@ -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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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};
|