omnigateway 0.13.4 → 0.13.5
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/README.md +1 -1
- package/bin/omni.js +170 -16
- package/gateway.js +177 -22
- package/package.json +1 -1
- package/public/assets/{_app.console-Dxkf_zSS.js → _app.console-facio1_r.js} +1 -1
- package/public/assets/{_app.plugins._pluginId-BSlXzAHP.js → _app.plugins._pluginId-cCDDM_D_.js} +1 -1
- package/public/assets/{_app.settings-5i-vvT-H.js → _app.settings-CdSQyweb.js} +2 -2
- package/public/assets/{client-DUhmc9Si.js → client-DEALADtD.js} +1 -1
- package/public/assets/{index-Bzh27906.js → index-BYDVTknB.js} +2 -2
- package/public/assets/{login-DbXxdOl5.js → login-BhkdR1f4.js} +1 -1
- package/public/index.html +1 -1
package/README.md
CHANGED
|
@@ -329,7 +329,7 @@ that output was captured; it does not redirect it — see
|
|
|
329
329
|
Everything else lives in the database rather than the environment, so it can be
|
|
330
330
|
changed without a restart: the six routing weights, `maxAttempts`,
|
|
331
331
|
`requestDeadlineMs`, the circuit breaker's `breakerThreshold` and
|
|
332
|
-
`breakerCooldownMs`, `logRetentionDays`, `quotaPollIntervalMs`, `rtkEnabled`,
|
|
332
|
+
`breakerCooldownMs`, `logRetentionDays`, `bodyRetentionDays`, `quotaPollIntervalMs`, `rtkEnabled`,
|
|
333
333
|
`ponytailMode` (`off` | `lite` | `full` | `ultra`),
|
|
334
334
|
and the two body-capture switches. Edit them with `omni settings set` or in the
|
|
335
335
|
console. `quotaPollIntervalMs` is the one exception: the poller reads it once at
|
package/bin/omni.js
CHANGED
|
@@ -6358,8 +6358,10 @@ function memoryCoord(options = {}) {
|
|
|
6358
6358
|
}
|
|
6359
6359
|
|
|
6360
6360
|
// packages/store/src/bodies/artifact.ts
|
|
6361
|
-
import { mkdir,
|
|
6361
|
+
import { mkdir, open as open2, readdir, rmdir, unlink, writeFile } from "fs/promises";
|
|
6362
6362
|
import { dirname, join, sep } from "path";
|
|
6363
|
+
import { promisify } from "util";
|
|
6364
|
+
import { gunzip, gzip } from "zlib";
|
|
6363
6365
|
|
|
6364
6366
|
// packages/store/src/encryption.ts
|
|
6365
6367
|
var PREFIX = "enc:v1";
|
|
@@ -6584,27 +6586,171 @@ async function sealArtifact(key, json) {
|
|
|
6584
6586
|
const bytes = encoder2.encode(await encrypt(key, json));
|
|
6585
6587
|
return { bytes, sha256: await sha256Hex(bytes) };
|
|
6586
6588
|
}
|
|
6589
|
+
var MAX_ENVELOPE_BYTES = 2 * MAX_ARTIFACT_BYTES + 65;
|
|
6590
|
+
var BINARY_MAGIC = encoder2.encode("OGBA");
|
|
6591
|
+
var LEGACY_PREFIX = encoder2.encode("enc:v1:");
|
|
6592
|
+
var BINARY_VERSION = 1;
|
|
6593
|
+
var BINARY_HEADER_BYTES = 10;
|
|
6594
|
+
var BINARY_IV_BYTES = 12;
|
|
6595
|
+
var BINARY_TAG_BYTES = 16;
|
|
6596
|
+
var BINARY_OVERHEAD = BINARY_HEADER_BYTES + BINARY_IV_BYTES + BINARY_TAG_BYTES;
|
|
6597
|
+
var MAX_BINARY_ENVELOPE_BYTES = MAX_ARTIFACT_BYTES + BINARY_OVERHEAD;
|
|
6598
|
+
var CODEC_RAW = 0;
|
|
6599
|
+
var CODEC_GZIP = 1;
|
|
6600
|
+
var GZIP_FRAME_BYTES = 18;
|
|
6601
|
+
var gzipAsync = promisify(gzip);
|
|
6602
|
+
var gunzipAsync = promisify(gunzip);
|
|
6603
|
+
function own2(bytes, start, end) {
|
|
6604
|
+
return bytes.slice(start, end);
|
|
6605
|
+
}
|
|
6587
6606
|
async function readArtifact(key, dir, relPath, expectedSha256) {
|
|
6588
|
-
|
|
6607
|
+
const acquired = await acquireArtifact(join(dir, relPath));
|
|
6608
|
+
if (!(acquired instanceof Uint8Array))
|
|
6609
|
+
return { ok: false, failure: acquired };
|
|
6610
|
+
return decodeArtifact(key, acquired, expectedSha256);
|
|
6611
|
+
}
|
|
6612
|
+
async function acquireArtifact(path) {
|
|
6613
|
+
let handle;
|
|
6589
6614
|
try {
|
|
6590
|
-
|
|
6615
|
+
handle = await open2(path, "r");
|
|
6591
6616
|
} catch {
|
|
6592
|
-
return
|
|
6617
|
+
return "missing";
|
|
6618
|
+
}
|
|
6619
|
+
try {
|
|
6620
|
+
const { size } = await handle.stat();
|
|
6621
|
+
if (size > MAX_ENVELOPE_BYTES)
|
|
6622
|
+
return "corrupt";
|
|
6623
|
+
const buffer = new Uint8Array(size + 1);
|
|
6624
|
+
let filled = 0;
|
|
6625
|
+
while (filled < buffer.length) {
|
|
6626
|
+
const { bytesRead } = await handle.read(buffer, filled, buffer.length - filled, filled);
|
|
6627
|
+
if (bytesRead === 0)
|
|
6628
|
+
break;
|
|
6629
|
+
filled += bytesRead;
|
|
6630
|
+
}
|
|
6631
|
+
return filled > size ? "corrupt" : buffer.subarray(0, filled);
|
|
6632
|
+
} catch {
|
|
6633
|
+
return "missing";
|
|
6634
|
+
} finally {
|
|
6635
|
+
await handle.close().catch(() => {});
|
|
6636
|
+
}
|
|
6637
|
+
}
|
|
6638
|
+
var LEGACY_HEX = /^(?:[0-9a-f]{2})*$/;
|
|
6639
|
+
var LEGACY_IV_HEX_CHARS = 24;
|
|
6640
|
+
var LEGACY_TAG_HEX_CHARS = 32;
|
|
6641
|
+
function isLegacyStructure(text) {
|
|
6642
|
+
const parts = text.split(":");
|
|
6643
|
+
const [scheme, version, iv, body, tag] = parts;
|
|
6644
|
+
return parts.length === 5 && scheme === "enc" && version === "v1" && iv !== undefined && body !== undefined && tag !== undefined && iv.length === LEGACY_IV_HEX_CHARS && tag.length === LEGACY_TAG_HEX_CHARS && LEGACY_HEX.test(iv) && LEGACY_HEX.test(body) && LEGACY_HEX.test(tag);
|
|
6645
|
+
}
|
|
6646
|
+
function payloadFits(codec, payloadBytes, claimed) {
|
|
6647
|
+
switch (codec) {
|
|
6648
|
+
case CODEC_RAW:
|
|
6649
|
+
return payloadBytes === claimed;
|
|
6650
|
+
case CODEC_GZIP:
|
|
6651
|
+
return payloadBytes >= GZIP_FRAME_BYTES;
|
|
6652
|
+
default:
|
|
6653
|
+
return false;
|
|
6654
|
+
}
|
|
6655
|
+
}
|
|
6656
|
+
async function expand(codec, payload, claimed) {
|
|
6657
|
+
switch (codec) {
|
|
6658
|
+
case CODEC_RAW:
|
|
6659
|
+
return payload;
|
|
6660
|
+
case CODEC_GZIP:
|
|
6661
|
+
return gunzipArtifact(payload, claimed);
|
|
6662
|
+
default:
|
|
6663
|
+
throw new Error("unsupported artifact codec");
|
|
6593
6664
|
}
|
|
6594
|
-
|
|
6665
|
+
}
|
|
6666
|
+
async function gunzipArtifact(payload, claimed) {
|
|
6667
|
+
const result = await gunzipAsync(payload, {
|
|
6668
|
+
maxOutputLength: MAX_ARTIFACT_BYTES,
|
|
6669
|
+
info: true
|
|
6670
|
+
});
|
|
6671
|
+
const inflated = inflateResult(result);
|
|
6672
|
+
if (inflated === null)
|
|
6673
|
+
throw new Error("gzip result has an unexpected shape");
|
|
6674
|
+
if (inflated.consumed !== payload.length)
|
|
6675
|
+
throw new Error("bytes follow the gzip stream");
|
|
6676
|
+
if (inflated.output.length !== claimed)
|
|
6677
|
+
throw new Error("gzip output is not the claimed length");
|
|
6678
|
+
return inflated.output;
|
|
6679
|
+
}
|
|
6680
|
+
function inflateResult(result) {
|
|
6681
|
+
if (typeof result !== "object" || result === null)
|
|
6682
|
+
return null;
|
|
6683
|
+
if (!("buffer" in result) || !("engine" in result))
|
|
6684
|
+
return null;
|
|
6685
|
+
const { buffer, engine } = result;
|
|
6686
|
+
if (!(buffer instanceof Uint8Array) || typeof engine !== "object" || engine === null)
|
|
6687
|
+
return null;
|
|
6688
|
+
if (!("bytesWritten" in engine) || typeof engine.bytesWritten !== "number")
|
|
6689
|
+
return null;
|
|
6690
|
+
return { output: buffer, consumed: engine.bytesWritten };
|
|
6691
|
+
}
|
|
6692
|
+
function parseBinary(bytes) {
|
|
6693
|
+
if (bytes.length < BINARY_OVERHEAD || bytes.length > MAX_BINARY_ENVELOPE_BYTES)
|
|
6694
|
+
return null;
|
|
6695
|
+
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
6696
|
+
const version = view.getUint8(4);
|
|
6697
|
+
const codec = view.getUint8(5);
|
|
6698
|
+
const claimed = view.getUint32(6, false);
|
|
6699
|
+
if (version !== BINARY_VERSION)
|
|
6700
|
+
return null;
|
|
6701
|
+
if (claimed < 1 || claimed > MAX_ARTIFACT_BYTES)
|
|
6702
|
+
return null;
|
|
6703
|
+
if (!payloadFits(codec, bytes.length - BINARY_OVERHEAD, claimed))
|
|
6704
|
+
return null;
|
|
6705
|
+
return {
|
|
6706
|
+
header: own2(bytes, 0, BINARY_HEADER_BYTES),
|
|
6707
|
+
codec,
|
|
6708
|
+
claimed,
|
|
6709
|
+
iv: own2(bytes, BINARY_HEADER_BYTES, BINARY_HEADER_BYTES + BINARY_IV_BYTES),
|
|
6710
|
+
sealed: own2(bytes, BINARY_HEADER_BYTES + BINARY_IV_BYTES)
|
|
6711
|
+
};
|
|
6712
|
+
}
|
|
6713
|
+
async function openBinary(key, envelope) {
|
|
6714
|
+
const payload = await crypto.subtle.decrypt({
|
|
6715
|
+
name: "AES-GCM",
|
|
6716
|
+
iv: envelope.iv,
|
|
6717
|
+
additionalData: envelope.header,
|
|
6718
|
+
tagLength: BINARY_TAG_BYTES * 8
|
|
6719
|
+
}, key, envelope.sealed);
|
|
6720
|
+
return new TextDecoder("utf-8", { fatal: true }).decode(await expand(envelope.codec, new Uint8Array(payload), envelope.claimed));
|
|
6721
|
+
}
|
|
6722
|
+
function startsWith(bytes, prefix) {
|
|
6723
|
+
if (bytes.length < prefix.length)
|
|
6724
|
+
return false;
|
|
6725
|
+
return prefix.every((byte, i) => bytes[i] === byte);
|
|
6595
6726
|
}
|
|
6596
6727
|
async function decodeArtifact(key, bytes, expectedSha256) {
|
|
6728
|
+
const corrupt = { ok: false, failure: "corrupt" };
|
|
6597
6729
|
try {
|
|
6598
|
-
if (
|
|
6599
|
-
return
|
|
6600
|
-
|
|
6601
|
-
|
|
6602
|
-
|
|
6603
|
-
|
|
6730
|
+
if (bytes.length > MAX_ENVELOPE_BYTES)
|
|
6731
|
+
return corrupt;
|
|
6732
|
+
let unseal;
|
|
6733
|
+
if (startsWith(bytes, BINARY_MAGIC)) {
|
|
6734
|
+
const envelope = parseBinary(bytes);
|
|
6735
|
+
if (envelope === null)
|
|
6736
|
+
return corrupt;
|
|
6737
|
+
unseal = () => openBinary(key, envelope);
|
|
6738
|
+
} else if (startsWith(bytes, LEGACY_PREFIX)) {
|
|
6739
|
+
const text = new TextDecoder().decode(bytes);
|
|
6740
|
+
if (!isLegacyStructure(text))
|
|
6741
|
+
return corrupt;
|
|
6742
|
+
unseal = () => decrypt(key, text);
|
|
6743
|
+
} else {
|
|
6744
|
+
return corrupt;
|
|
6604
6745
|
}
|
|
6746
|
+
if (expectedSha256 !== null && await sha256Hex(bytes) !== expectedSha256)
|
|
6747
|
+
return corrupt;
|
|
6748
|
+
const parsed = JSON.parse(await unseal());
|
|
6749
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed))
|
|
6750
|
+
return corrupt;
|
|
6605
6751
|
return { ok: true, artifact: parsed };
|
|
6606
6752
|
} catch {
|
|
6607
|
-
return
|
|
6753
|
+
return corrupt;
|
|
6608
6754
|
}
|
|
6609
6755
|
}
|
|
6610
6756
|
async function writeArtifact(dir, relPath, bytes) {
|
|
@@ -7637,13 +7783,16 @@ function createBodyRepo(sql, key) {
|
|
|
7637
7783
|
return row;
|
|
7638
7784
|
},
|
|
7639
7785
|
async get(requestId) {
|
|
7640
|
-
const found = (await sql.unsafe(
|
|
7786
|
+
const found = (await sql.unsafe(`SELECT ${META},
|
|
7787
|
+
CASE WHEN octet_length(bytes) <= $2 THEN bytes ELSE NULL END AS bytes,
|
|
7788
|
+
octet_length(bytes) AS encoded_size
|
|
7789
|
+
FROM request_bodies WHERE request_id = $1`, [requestId, MAX_ENVELOPE_BYTES]))[0];
|
|
7641
7790
|
if (found === undefined)
|
|
7642
7791
|
return null;
|
|
7643
7792
|
const row = toRow(found);
|
|
7644
7793
|
if (row.relPath === null || row.detailState === "none")
|
|
7645
7794
|
return { row, artifact: null };
|
|
7646
|
-
const read = found.
|
|
7795
|
+
const read = found.encoded_size === null ? { ok: false, failure: "missing" } : found.bytes === null ? { ok: false, failure: "corrupt" } : await decodeArtifact(key, new Uint8Array(found.bytes), row.sha256);
|
|
7647
7796
|
if (read.ok) {
|
|
7648
7797
|
if (row.detailState !== "ready")
|
|
7649
7798
|
await recordState(requestId, "ready");
|
|
@@ -7743,6 +7892,7 @@ var DEFAULT_SETTINGS = {
|
|
|
7743
7892
|
breakerThreshold: 3,
|
|
7744
7893
|
breakerCooldownMs: 30000,
|
|
7745
7894
|
logRetentionDays: 30,
|
|
7895
|
+
bodyRetentionDays: 1,
|
|
7746
7896
|
quotaPollIntervalMs: 300000,
|
|
7747
7897
|
rtkEnabled: false,
|
|
7748
7898
|
autoCacheEnabled: true,
|
|
@@ -7812,6 +7962,7 @@ function createConfigRepo(sql, emit) {
|
|
|
7812
7962
|
rtkEnabled: stored.rtkEnabled === true,
|
|
7813
7963
|
autoCacheEnabled: stored.autoCacheEnabled === undefined ? true : stored.autoCacheEnabled === true,
|
|
7814
7964
|
ponytailMode: isPonytailMode(stored.ponytailMode) ? stored.ponytailMode : "off",
|
|
7965
|
+
bodyRetentionDays: Number.isInteger(stored.bodyRetentionDays) && (stored.bodyRetentionDays ?? 0) >= 1 && (stored.bodyRetentionDays ?? 0) <= 3650 ? stored.bodyRetentionDays : DEFAULT_SETTINGS.bodyRetentionDays,
|
|
7815
7966
|
bodyLoggingEnabled: stored.bodyLoggingEnabled === true,
|
|
7816
7967
|
bodyLoggingCaptureStreamChunks: stored.bodyLoggingCaptureStreamChunks === true,
|
|
7817
7968
|
weights: knownWeights(stored.weights)
|
|
@@ -9301,6 +9452,7 @@ function createConfigRepo2(db, emit = () => {}) {
|
|
|
9301
9452
|
rtkEnabled: stored.rtkEnabled === true,
|
|
9302
9453
|
autoCacheEnabled: stored.autoCacheEnabled === undefined ? true : stored.autoCacheEnabled === true,
|
|
9303
9454
|
ponytailMode: isPonytailMode(stored.ponytailMode) ? stored.ponytailMode : "off",
|
|
9455
|
+
bodyRetentionDays: Number.isInteger(stored.bodyRetentionDays) && (stored.bodyRetentionDays ?? 0) >= 1 && (stored.bodyRetentionDays ?? 0) <= 3650 ? stored.bodyRetentionDays : DEFAULT_SETTINGS.bodyRetentionDays,
|
|
9304
9456
|
bodyLoggingEnabled: stored.bodyLoggingEnabled === true,
|
|
9305
9457
|
bodyLoggingCaptureStreamChunks: stored.bodyLoggingCaptureStreamChunks === true,
|
|
9306
9458
|
weights: knownWeights2(stored.weights)
|
|
@@ -19584,6 +19736,7 @@ var settingsSchema = object({
|
|
|
19584
19736
|
breakerThreshold: number2().int().min(1),
|
|
19585
19737
|
breakerCooldownMs: number2().int().positive(),
|
|
19586
19738
|
logRetentionDays: number2().int().min(1),
|
|
19739
|
+
bodyRetentionDays: retentionSchema.shape.maxAgeDays.optional(),
|
|
19587
19740
|
quotaPollIntervalMs: number2().int().min(0),
|
|
19588
19741
|
rtkEnabled: boolean2(),
|
|
19589
19742
|
autoCacheEnabled: boolean2(),
|
|
@@ -22763,9 +22916,10 @@ async function getSettings(store) {
|
|
|
22763
22916
|
return store.config.getSettings();
|
|
22764
22917
|
}
|
|
22765
22918
|
async function putSettings(store, input) {
|
|
22766
|
-
const { snapshotKeepLatest, snapshotMaxAgeDays, ...rest } = parseOrThrow(settingsSchema, input);
|
|
22919
|
+
const { bodyRetentionDays, snapshotKeepLatest, snapshotMaxAgeDays, ...rest } = parseOrThrow(settingsSchema, input);
|
|
22767
22920
|
const patch = {
|
|
22768
22921
|
...rest,
|
|
22922
|
+
...bodyRetentionDays === undefined ? {} : { bodyRetentionDays },
|
|
22769
22923
|
...snapshotKeepLatest === undefined ? {} : { snapshotKeepLatest },
|
|
22770
22924
|
...snapshotMaxAgeDays === undefined ? {} : { snapshotMaxAgeDays }
|
|
22771
22925
|
};
|
|
@@ -25109,7 +25263,7 @@ function createServiceDeps(input) {
|
|
|
25109
25263
|
}
|
|
25110
25264
|
|
|
25111
25265
|
// apps/cli/src/version.ts
|
|
25112
|
-
var VERSION = "0.13.
|
|
25266
|
+
var VERSION = "0.13.5";
|
|
25113
25267
|
|
|
25114
25268
|
// apps/cli/src/commands/service.ts
|
|
25115
25269
|
function gatewayArgv(root) {
|
package/gateway.js
CHANGED
|
@@ -11660,8 +11660,10 @@ function memoryCoord(options = {}) {
|
|
|
11660
11660
|
}
|
|
11661
11661
|
|
|
11662
11662
|
// packages/store/src/bodies/artifact.ts
|
|
11663
|
-
import { mkdir,
|
|
11663
|
+
import { mkdir, open as open2, readdir, rmdir, unlink, writeFile } from "fs/promises";
|
|
11664
11664
|
import { dirname, join, sep } from "path";
|
|
11665
|
+
import { promisify } from "util";
|
|
11666
|
+
import { gunzip, gzip } from "zlib";
|
|
11665
11667
|
|
|
11666
11668
|
// packages/store/src/encryption.ts
|
|
11667
11669
|
var PREFIX = "enc:v1";
|
|
@@ -11886,27 +11888,171 @@ async function sealArtifact(key, json) {
|
|
|
11886
11888
|
const bytes = encoder2.encode(await encrypt(key, json));
|
|
11887
11889
|
return { bytes, sha256: await sha256Hex(bytes) };
|
|
11888
11890
|
}
|
|
11891
|
+
var MAX_ENVELOPE_BYTES = 2 * MAX_ARTIFACT_BYTES + 65;
|
|
11892
|
+
var BINARY_MAGIC = encoder2.encode("OGBA");
|
|
11893
|
+
var LEGACY_PREFIX = encoder2.encode("enc:v1:");
|
|
11894
|
+
var BINARY_VERSION = 1;
|
|
11895
|
+
var BINARY_HEADER_BYTES = 10;
|
|
11896
|
+
var BINARY_IV_BYTES = 12;
|
|
11897
|
+
var BINARY_TAG_BYTES = 16;
|
|
11898
|
+
var BINARY_OVERHEAD = BINARY_HEADER_BYTES + BINARY_IV_BYTES + BINARY_TAG_BYTES;
|
|
11899
|
+
var MAX_BINARY_ENVELOPE_BYTES = MAX_ARTIFACT_BYTES + BINARY_OVERHEAD;
|
|
11900
|
+
var CODEC_RAW = 0;
|
|
11901
|
+
var CODEC_GZIP = 1;
|
|
11902
|
+
var GZIP_FRAME_BYTES = 18;
|
|
11903
|
+
var gzipAsync = promisify(gzip);
|
|
11904
|
+
var gunzipAsync = promisify(gunzip);
|
|
11905
|
+
function own2(bytes, start, end) {
|
|
11906
|
+
return bytes.slice(start, end);
|
|
11907
|
+
}
|
|
11889
11908
|
async function readArtifact(key, dir, relPath, expectedSha256) {
|
|
11890
|
-
|
|
11909
|
+
const acquired = await acquireArtifact(join(dir, relPath));
|
|
11910
|
+
if (!(acquired instanceof Uint8Array))
|
|
11911
|
+
return { ok: false, failure: acquired };
|
|
11912
|
+
return decodeArtifact(key, acquired, expectedSha256);
|
|
11913
|
+
}
|
|
11914
|
+
async function acquireArtifact(path) {
|
|
11915
|
+
let handle;
|
|
11891
11916
|
try {
|
|
11892
|
-
|
|
11917
|
+
handle = await open2(path, "r");
|
|
11893
11918
|
} catch {
|
|
11894
|
-
return
|
|
11919
|
+
return "missing";
|
|
11920
|
+
}
|
|
11921
|
+
try {
|
|
11922
|
+
const { size } = await handle.stat();
|
|
11923
|
+
if (size > MAX_ENVELOPE_BYTES)
|
|
11924
|
+
return "corrupt";
|
|
11925
|
+
const buffer = new Uint8Array(size + 1);
|
|
11926
|
+
let filled = 0;
|
|
11927
|
+
while (filled < buffer.length) {
|
|
11928
|
+
const { bytesRead } = await handle.read(buffer, filled, buffer.length - filled, filled);
|
|
11929
|
+
if (bytesRead === 0)
|
|
11930
|
+
break;
|
|
11931
|
+
filled += bytesRead;
|
|
11932
|
+
}
|
|
11933
|
+
return filled > size ? "corrupt" : buffer.subarray(0, filled);
|
|
11934
|
+
} catch {
|
|
11935
|
+
return "missing";
|
|
11936
|
+
} finally {
|
|
11937
|
+
await handle.close().catch(() => {});
|
|
11938
|
+
}
|
|
11939
|
+
}
|
|
11940
|
+
var LEGACY_HEX = /^(?:[0-9a-f]{2})*$/;
|
|
11941
|
+
var LEGACY_IV_HEX_CHARS = 24;
|
|
11942
|
+
var LEGACY_TAG_HEX_CHARS = 32;
|
|
11943
|
+
function isLegacyStructure(text) {
|
|
11944
|
+
const parts = text.split(":");
|
|
11945
|
+
const [scheme, version, iv, body, tag] = parts;
|
|
11946
|
+
return parts.length === 5 && scheme === "enc" && version === "v1" && iv !== undefined && body !== undefined && tag !== undefined && iv.length === LEGACY_IV_HEX_CHARS && tag.length === LEGACY_TAG_HEX_CHARS && LEGACY_HEX.test(iv) && LEGACY_HEX.test(body) && LEGACY_HEX.test(tag);
|
|
11947
|
+
}
|
|
11948
|
+
function payloadFits(codec, payloadBytes, claimed) {
|
|
11949
|
+
switch (codec) {
|
|
11950
|
+
case CODEC_RAW:
|
|
11951
|
+
return payloadBytes === claimed;
|
|
11952
|
+
case CODEC_GZIP:
|
|
11953
|
+
return payloadBytes >= GZIP_FRAME_BYTES;
|
|
11954
|
+
default:
|
|
11955
|
+
return false;
|
|
11895
11956
|
}
|
|
11896
|
-
|
|
11957
|
+
}
|
|
11958
|
+
async function expand(codec, payload, claimed) {
|
|
11959
|
+
switch (codec) {
|
|
11960
|
+
case CODEC_RAW:
|
|
11961
|
+
return payload;
|
|
11962
|
+
case CODEC_GZIP:
|
|
11963
|
+
return gunzipArtifact(payload, claimed);
|
|
11964
|
+
default:
|
|
11965
|
+
throw new Error("unsupported artifact codec");
|
|
11966
|
+
}
|
|
11967
|
+
}
|
|
11968
|
+
async function gunzipArtifact(payload, claimed) {
|
|
11969
|
+
const result = await gunzipAsync(payload, {
|
|
11970
|
+
maxOutputLength: MAX_ARTIFACT_BYTES,
|
|
11971
|
+
info: true
|
|
11972
|
+
});
|
|
11973
|
+
const inflated = inflateResult(result);
|
|
11974
|
+
if (inflated === null)
|
|
11975
|
+
throw new Error("gzip result has an unexpected shape");
|
|
11976
|
+
if (inflated.consumed !== payload.length)
|
|
11977
|
+
throw new Error("bytes follow the gzip stream");
|
|
11978
|
+
if (inflated.output.length !== claimed)
|
|
11979
|
+
throw new Error("gzip output is not the claimed length");
|
|
11980
|
+
return inflated.output;
|
|
11981
|
+
}
|
|
11982
|
+
function inflateResult(result) {
|
|
11983
|
+
if (typeof result !== "object" || result === null)
|
|
11984
|
+
return null;
|
|
11985
|
+
if (!("buffer" in result) || !("engine" in result))
|
|
11986
|
+
return null;
|
|
11987
|
+
const { buffer, engine } = result;
|
|
11988
|
+
if (!(buffer instanceof Uint8Array) || typeof engine !== "object" || engine === null)
|
|
11989
|
+
return null;
|
|
11990
|
+
if (!("bytesWritten" in engine) || typeof engine.bytesWritten !== "number")
|
|
11991
|
+
return null;
|
|
11992
|
+
return { output: buffer, consumed: engine.bytesWritten };
|
|
11993
|
+
}
|
|
11994
|
+
function parseBinary(bytes) {
|
|
11995
|
+
if (bytes.length < BINARY_OVERHEAD || bytes.length > MAX_BINARY_ENVELOPE_BYTES)
|
|
11996
|
+
return null;
|
|
11997
|
+
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
11998
|
+
const version = view.getUint8(4);
|
|
11999
|
+
const codec = view.getUint8(5);
|
|
12000
|
+
const claimed = view.getUint32(6, false);
|
|
12001
|
+
if (version !== BINARY_VERSION)
|
|
12002
|
+
return null;
|
|
12003
|
+
if (claimed < 1 || claimed > MAX_ARTIFACT_BYTES)
|
|
12004
|
+
return null;
|
|
12005
|
+
if (!payloadFits(codec, bytes.length - BINARY_OVERHEAD, claimed))
|
|
12006
|
+
return null;
|
|
12007
|
+
return {
|
|
12008
|
+
header: own2(bytes, 0, BINARY_HEADER_BYTES),
|
|
12009
|
+
codec,
|
|
12010
|
+
claimed,
|
|
12011
|
+
iv: own2(bytes, BINARY_HEADER_BYTES, BINARY_HEADER_BYTES + BINARY_IV_BYTES),
|
|
12012
|
+
sealed: own2(bytes, BINARY_HEADER_BYTES + BINARY_IV_BYTES)
|
|
12013
|
+
};
|
|
12014
|
+
}
|
|
12015
|
+
async function openBinary(key, envelope) {
|
|
12016
|
+
const payload = await crypto.subtle.decrypt({
|
|
12017
|
+
name: "AES-GCM",
|
|
12018
|
+
iv: envelope.iv,
|
|
12019
|
+
additionalData: envelope.header,
|
|
12020
|
+
tagLength: BINARY_TAG_BYTES * 8
|
|
12021
|
+
}, key, envelope.sealed);
|
|
12022
|
+
return new TextDecoder("utf-8", { fatal: true }).decode(await expand(envelope.codec, new Uint8Array(payload), envelope.claimed));
|
|
12023
|
+
}
|
|
12024
|
+
function startsWith(bytes, prefix) {
|
|
12025
|
+
if (bytes.length < prefix.length)
|
|
12026
|
+
return false;
|
|
12027
|
+
return prefix.every((byte, i) => bytes[i] === byte);
|
|
11897
12028
|
}
|
|
11898
12029
|
async function decodeArtifact(key, bytes, expectedSha256) {
|
|
12030
|
+
const corrupt = { ok: false, failure: "corrupt" };
|
|
11899
12031
|
try {
|
|
11900
|
-
if (
|
|
11901
|
-
return
|
|
11902
|
-
|
|
11903
|
-
|
|
11904
|
-
|
|
11905
|
-
|
|
12032
|
+
if (bytes.length > MAX_ENVELOPE_BYTES)
|
|
12033
|
+
return corrupt;
|
|
12034
|
+
let unseal;
|
|
12035
|
+
if (startsWith(bytes, BINARY_MAGIC)) {
|
|
12036
|
+
const envelope = parseBinary(bytes);
|
|
12037
|
+
if (envelope === null)
|
|
12038
|
+
return corrupt;
|
|
12039
|
+
unseal = () => openBinary(key, envelope);
|
|
12040
|
+
} else if (startsWith(bytes, LEGACY_PREFIX)) {
|
|
12041
|
+
const text = new TextDecoder().decode(bytes);
|
|
12042
|
+
if (!isLegacyStructure(text))
|
|
12043
|
+
return corrupt;
|
|
12044
|
+
unseal = () => decrypt(key, text);
|
|
12045
|
+
} else {
|
|
12046
|
+
return corrupt;
|
|
11906
12047
|
}
|
|
12048
|
+
if (expectedSha256 !== null && await sha256Hex(bytes) !== expectedSha256)
|
|
12049
|
+
return corrupt;
|
|
12050
|
+
const parsed = JSON.parse(await unseal());
|
|
12051
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed))
|
|
12052
|
+
return corrupt;
|
|
11907
12053
|
return { ok: true, artifact: parsed };
|
|
11908
12054
|
} catch {
|
|
11909
|
-
return
|
|
12055
|
+
return corrupt;
|
|
11910
12056
|
}
|
|
11911
12057
|
}
|
|
11912
12058
|
async function writeArtifact(dir, relPath, bytes) {
|
|
@@ -13184,13 +13330,16 @@ function createBodyRepo(sql, key) {
|
|
|
13184
13330
|
return row;
|
|
13185
13331
|
},
|
|
13186
13332
|
async get(requestId) {
|
|
13187
|
-
const found = (await sql.unsafe(
|
|
13333
|
+
const found = (await sql.unsafe(`SELECT ${META},
|
|
13334
|
+
CASE WHEN octet_length(bytes) <= $2 THEN bytes ELSE NULL END AS bytes,
|
|
13335
|
+
octet_length(bytes) AS encoded_size
|
|
13336
|
+
FROM request_bodies WHERE request_id = $1`, [requestId, MAX_ENVELOPE_BYTES]))[0];
|
|
13188
13337
|
if (found === undefined)
|
|
13189
13338
|
return null;
|
|
13190
13339
|
const row = toRow(found);
|
|
13191
13340
|
if (row.relPath === null || row.detailState === "none")
|
|
13192
13341
|
return { row, artifact: null };
|
|
13193
|
-
const read = found.
|
|
13342
|
+
const read = found.encoded_size === null ? { ok: false, failure: "missing" } : found.bytes === null ? { ok: false, failure: "corrupt" } : await decodeArtifact(key, new Uint8Array(found.bytes), row.sha256);
|
|
13194
13343
|
if (read.ok) {
|
|
13195
13344
|
if (row.detailState !== "ready")
|
|
13196
13345
|
await recordState(requestId, "ready");
|
|
@@ -13278,6 +13427,7 @@ var DEFAULT_SETTINGS = {
|
|
|
13278
13427
|
breakerThreshold: 3,
|
|
13279
13428
|
breakerCooldownMs: 30000,
|
|
13280
13429
|
logRetentionDays: 30,
|
|
13430
|
+
bodyRetentionDays: 1,
|
|
13281
13431
|
quotaPollIntervalMs: 300000,
|
|
13282
13432
|
rtkEnabled: false,
|
|
13283
13433
|
autoCacheEnabled: true,
|
|
@@ -13347,6 +13497,7 @@ function createConfigRepo(sql, emit) {
|
|
|
13347
13497
|
rtkEnabled: stored.rtkEnabled === true,
|
|
13348
13498
|
autoCacheEnabled: stored.autoCacheEnabled === undefined ? true : stored.autoCacheEnabled === true,
|
|
13349
13499
|
ponytailMode: isPonytailMode(stored.ponytailMode) ? stored.ponytailMode : "off",
|
|
13500
|
+
bodyRetentionDays: Number.isInteger(stored.bodyRetentionDays) && (stored.bodyRetentionDays ?? 0) >= 1 && (stored.bodyRetentionDays ?? 0) <= 3650 ? stored.bodyRetentionDays : DEFAULT_SETTINGS.bodyRetentionDays,
|
|
13350
13501
|
bodyLoggingEnabled: stored.bodyLoggingEnabled === true,
|
|
13351
13502
|
bodyLoggingCaptureStreamChunks: stored.bodyLoggingCaptureStreamChunks === true,
|
|
13352
13503
|
weights: knownWeights(stored.weights)
|
|
@@ -14836,6 +14987,7 @@ function createConfigRepo2(db, emit = () => {}) {
|
|
|
14836
14987
|
rtkEnabled: stored.rtkEnabled === true,
|
|
14837
14988
|
autoCacheEnabled: stored.autoCacheEnabled === undefined ? true : stored.autoCacheEnabled === true,
|
|
14838
14989
|
ponytailMode: isPonytailMode(stored.ponytailMode) ? stored.ponytailMode : "off",
|
|
14990
|
+
bodyRetentionDays: Number.isInteger(stored.bodyRetentionDays) && (stored.bodyRetentionDays ?? 0) >= 1 && (stored.bodyRetentionDays ?? 0) <= 3650 ? stored.bodyRetentionDays : DEFAULT_SETTINGS.bodyRetentionDays,
|
|
14839
14991
|
bodyLoggingEnabled: stored.bodyLoggingEnabled === true,
|
|
14840
14992
|
bodyLoggingCaptureStreamChunks: stored.bodyLoggingCaptureStreamChunks === true,
|
|
14841
14993
|
weights: knownWeights2(stored.weights)
|
|
@@ -25256,6 +25408,7 @@ var settingsSchema = object({
|
|
|
25256
25408
|
breakerThreshold: number2().int().min(1),
|
|
25257
25409
|
breakerCooldownMs: number2().int().positive(),
|
|
25258
25410
|
logRetentionDays: number2().int().min(1),
|
|
25411
|
+
bodyRetentionDays: retentionSchema.shape.maxAgeDays.optional(),
|
|
25259
25412
|
quotaPollIntervalMs: number2().int().min(0),
|
|
25260
25413
|
rtkEnabled: boolean2(),
|
|
25261
25414
|
autoCacheEnabled: boolean2(),
|
|
@@ -27918,9 +28071,10 @@ async function getSettings(store) {
|
|
|
27918
28071
|
return store.config.getSettings();
|
|
27919
28072
|
}
|
|
27920
28073
|
async function putSettings(store, input) {
|
|
27921
|
-
const { snapshotKeepLatest, snapshotMaxAgeDays, ...rest } = parseOrThrow(settingsSchema, input);
|
|
28074
|
+
const { bodyRetentionDays, snapshotKeepLatest, snapshotMaxAgeDays, ...rest } = parseOrThrow(settingsSchema, input);
|
|
27922
28075
|
const patch = {
|
|
27923
28076
|
...rest,
|
|
28077
|
+
...bodyRetentionDays === undefined ? {} : { bodyRetentionDays },
|
|
27924
28078
|
...snapshotKeepLatest === undefined ? {} : { snapshotKeepLatest },
|
|
27925
28079
|
...snapshotMaxAgeDays === undefined ? {} : { snapshotMaxAgeDays }
|
|
27926
28080
|
};
|
|
@@ -49079,7 +49233,7 @@ function createRing(limits = DEFAULT_RING_LIMITS) {
|
|
|
49079
49233
|
}
|
|
49080
49234
|
|
|
49081
49235
|
// apps/gateway/src/version.ts
|
|
49082
|
-
var VERSION = "0.13.
|
|
49236
|
+
var VERSION = "0.13.5";
|
|
49083
49237
|
|
|
49084
49238
|
// apps/gateway/src/app.ts
|
|
49085
49239
|
var ADMIN_SESSION_TTL_MS = 12 * 60 * 60 * 1000;
|
|
@@ -49868,7 +50022,8 @@ async function pruneLogs(store, now) {
|
|
|
49868
50022
|
const raw = await store.usage.prune(rawHorizon);
|
|
49869
50023
|
const daily = await store.usage.pruneDaily(now - ROLLUP_RETENTION_DAYS * DAY_MS4);
|
|
49870
50024
|
const quotaSamples = await store.credentials.pruneQuotaSamples(rawHorizon);
|
|
49871
|
-
const
|
|
50025
|
+
const bodyHorizon = now - Math.min(settings.bodyRetentionDays, settings.logRetentionDays) * DAY_MS4;
|
|
50026
|
+
const bodies = await store.bodies.prune(bodyHorizon);
|
|
49872
50027
|
const bodiesOverCap = await store.bodies.pruneToCap();
|
|
49873
50028
|
const bodyOrphans = await store.bodies.sweepOrphans();
|
|
49874
50029
|
return { raw, daily, quotaSamples, bodies, bodiesOverCap, bodyOrphans };
|
|
@@ -50099,11 +50254,11 @@ function installPluginProviders(providers, logger, registry = OAUTH_PROVIDERS) {
|
|
|
50099
50254
|
}
|
|
50100
50255
|
|
|
50101
50256
|
// apps/gateway/src/plugins/loader.ts
|
|
50102
|
-
import { readdir as readdir2, readFile as
|
|
50257
|
+
import { readdir as readdir2, readFile as readFile2 } from "fs/promises";
|
|
50103
50258
|
import { join as join5, resolve as resolve5, sep as sep5 } from "path";
|
|
50104
50259
|
|
|
50105
50260
|
// apps/gateway/src/plugins/capabilities.ts
|
|
50106
|
-
import { mkdir as mkdir2, readFile
|
|
50261
|
+
import { mkdir as mkdir2, readFile, realpath, writeFile as writeFile2 } from "fs/promises";
|
|
50107
50262
|
import { dirname as dirname4, resolve as resolve4, sep as sep4 } from "path";
|
|
50108
50263
|
async function resolveInside(root, path) {
|
|
50109
50264
|
const rootReal = await realpath(root);
|
|
@@ -50133,7 +50288,7 @@ function createPluginFiles(root) {
|
|
|
50133
50288
|
async read(path) {
|
|
50134
50289
|
const target = await ensureRootThen(root, () => resolveInside(root, path));
|
|
50135
50290
|
try {
|
|
50136
|
-
const data = await
|
|
50291
|
+
const data = await readFile(target);
|
|
50137
50292
|
return new Uint8Array(data);
|
|
50138
50293
|
} catch {
|
|
50139
50294
|
return null;
|
|
@@ -50147,7 +50302,7 @@ function createPluginFiles(root) {
|
|
|
50147
50302
|
async exists(path) {
|
|
50148
50303
|
const target = await ensureRootThen(root, () => resolveInside(root, path));
|
|
50149
50304
|
try {
|
|
50150
|
-
await
|
|
50305
|
+
await readFile(target);
|
|
50151
50306
|
return true;
|
|
50152
50307
|
} catch {
|
|
50153
50308
|
return false;
|
|
@@ -50254,7 +50409,7 @@ async function loadPlugins(deps) {
|
|
|
50254
50409
|
};
|
|
50255
50410
|
let manifest;
|
|
50256
50411
|
try {
|
|
50257
|
-
const raw = await
|
|
50412
|
+
const raw = await readFile2(join5(home, "omni-plugin.json"), "utf8");
|
|
50258
50413
|
const parsed = safeParseManifest(JSON.parse(raw));
|
|
50259
50414
|
if (!parsed.ok) {
|
|
50260
50415
|
fail(parsed.reason);
|
package/package.json
CHANGED
|
@@ -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-BYDVTknB.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-BSlXzAHP.js → _app.plugins._pluginId-cCDDM_D_.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-BYDVTknB.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`
|
|
@@ -34,7 +34,7 @@ import{J as e,Jt as t,Qt as n,Ut as r,X as i,Z as a,kt as o,qt as s}from"./Lamp-
|
|
|
34
34
|
display: grid;
|
|
35
35
|
grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
|
|
36
36
|
gap: ${({theme:e})=>e.space(2)};
|
|
37
|
-
`,oe=[{key:`defaultModel`,label:`Default model`,required:!0},{key:`fableModel`,label:`Fable model`,required:!1},{key:`opusModel`,label:`Opus model`,required:!1},{key:`sonnetModel`,label:`Sonnet model`,required:!1},{key:`haikuModel`,label:`Haiku model`,required:!1}];function V(){let[t,n]=O(`claude`),[r,i]=O(()=>({claude:{},opencode:{}})),a=o(),s=r[t],u=typeof s.defaultModel==`string`&&s.defaultModel!==``?s:void 0,_=e(t,u),v=z.find(e=>e.id===t);return k(h,{legend:`Agent setup`,children:A(l,{children:[k(c,{children:z.map(e=>k(p,{type:`button`,$variant:e.id===t?`primary`:`ghost`,onClick:()=>n(e.id),children:e.label},e.id))}),A(B,{children:[v?.where,`. The key is a placeholder — paste your own over it. Or run`,` `,A(d,{children:[`omni setup `,t]}),` to write these files directly.`]}),t===`claude`?A(B,{children:[`Claude Code cannot read a window from this gateway, so it assumes 200k for a pool id it does not recognise and auto-compacts there. For a pool whose models hold 1M, append`,` `,k(d,{children:`[1m]`}),` to the model name — `,k(d,{children:`--model 'pool[1m]'`}),` — which lifts it per invocation. The suffix is stripped before the request is sent, so the pool id arrives unchanged.`]}):null,(a.data?.length??0)>0?k(ae,{children:oe.map(e=>k(w,{label:e.label,children:n=>A(S,{...n,value:s[e.key]??``,onChange:n=>i(r=>({...r,[t]:{...r[t],[e.key]:n.target.value||void 0}})),children:[k(`option`,{value:``,children:e.required?`Choose a pool`:`Not mapped`}),a.data?.map(e=>k(`option`,{value:e.id,children:e.id},e.id))]})},e.key))}):null,a.isLoading?k(g,{rows:2}):_.isError?k(m,{error:_.error,onRetry:()=>void _.refetch()}):_.isLoading?k(g,{rows:4}):(a.data?.length??0)===0?k(B,{children:`No virtual models configured yet, so there is nothing to point a client at.`}):u===void 0?A(B,{children:[`Choose a default model to generate `,v?.label,` settings.`]}):_.data===void 0||_.data.length===0?k(B,{children:`No virtual models configured yet, so there is nothing to point a client at.`}):_.data.map(e=>A(`div`,{children:[k(ie,{children:e.path}),k(re,{as:`pre`,children:e.contents.trimEnd()})]},e.path)),_.isError?k(B,{children:f(_.error)}):null]})})}var H={off:`Off`,lite:`Lite — names the lazier option`,full:`Full — the ladder enforced`,ultra:`Ultra — challenges the requirement`},U=[{id:`tier`,label:`Tier`,blurb:`Prefers a lower tier.`},{id:`health`,label:`Health`,blurb:`Penalises recent failures and an open breaker.`},{id:`quota`,label:`Quota`,blurb:`Prefers accounts ahead of their window's burn rate.`},{id:`cost`,label:`Cost`,blurb:`Prefers the cheaper candidate.`},{id:`latency`,label:`Latency`,blurb:`Prefers the faster observed first token.`},{id:`load`,label:`Load`,blurb:`Prefers accounts with fewer requests in flight.`}],W=[{id:`maxAttempts`,label:`Attempts per request`,hint:`Candidates dispatch may try. 1 disables failover.`,unit:`attempts`,step:1,min:1},{id:`requestDeadlineMs`,label:`Request deadline`,hint:`Across all attempts. 0 disables only OmniGateway's deadline.`,unit:`ms`,step:1e3,min:0},{id:`breakerThreshold`,label:`Breaker threshold`,hint:`Consecutive failures before an account and model leaves rotation.`,unit:`failures`,step:1,min:1},{id:`breakerCooldownMs`,label:`Breaker cooldown`,hint:`Wait before a tripped account is probed. Doubles per extra failure.`,unit:`ms`,step:1e3,min:1},{id:`logRetentionDays`,label:`Log retention`,hint:`How long request rows are kept before pruning.`,unit:`days`,step:1,min:1},{id:`quotaPollIntervalMs`,label:`Quota poll interval`,hint:`How often a provider is asked for remaining quota. 0 disables. Needs a restart.`,unit:`ms`,step:6e4,min:0}],G=j.div`
|
|
37
|
+
`,oe=[{key:`defaultModel`,label:`Default model`,required:!0},{key:`fableModel`,label:`Fable model`,required:!1},{key:`opusModel`,label:`Opus model`,required:!1},{key:`sonnetModel`,label:`Sonnet model`,required:!1},{key:`haikuModel`,label:`Haiku model`,required:!1}];function V(){let[t,n]=O(`claude`),[r,i]=O(()=>({claude:{},opencode:{}})),a=o(),s=r[t],u=typeof s.defaultModel==`string`&&s.defaultModel!==``?s:void 0,_=e(t,u),v=z.find(e=>e.id===t);return k(h,{legend:`Agent setup`,children:A(l,{children:[k(c,{children:z.map(e=>k(p,{type:`button`,$variant:e.id===t?`primary`:`ghost`,onClick:()=>n(e.id),children:e.label},e.id))}),A(B,{children:[v?.where,`. The key is a placeholder — paste your own over it. Or run`,` `,A(d,{children:[`omni setup `,t]}),` to write these files directly.`]}),t===`claude`?A(B,{children:[`Claude Code cannot read a window from this gateway, so it assumes 200k for a pool id it does not recognise and auto-compacts there. For a pool whose models hold 1M, append`,` `,k(d,{children:`[1m]`}),` to the model name — `,k(d,{children:`--model 'pool[1m]'`}),` — which lifts it per invocation. The suffix is stripped before the request is sent, so the pool id arrives unchanged.`]}):null,(a.data?.length??0)>0?k(ae,{children:oe.map(e=>k(w,{label:e.label,children:n=>A(S,{...n,value:s[e.key]??``,onChange:n=>i(r=>({...r,[t]:{...r[t],[e.key]:n.target.value||void 0}})),children:[k(`option`,{value:``,children:e.required?`Choose a pool`:`Not mapped`}),a.data?.map(e=>k(`option`,{value:e.id,children:e.id},e.id))]})},e.key))}):null,a.isLoading?k(g,{rows:2}):_.isError?k(m,{error:_.error,onRetry:()=>void _.refetch()}):_.isLoading?k(g,{rows:4}):(a.data?.length??0)===0?k(B,{children:`No virtual models configured yet, so there is nothing to point a client at.`}):u===void 0?A(B,{children:[`Choose a default model to generate `,v?.label,` settings.`]}):_.data===void 0||_.data.length===0?k(B,{children:`No virtual models configured yet, so there is nothing to point a client at.`}):_.data.map(e=>A(`div`,{children:[k(ie,{children:e.path}),k(re,{as:`pre`,children:e.contents.trimEnd()})]},e.path)),_.isError?k(B,{children:f(_.error)}):null]})})}var H={off:`Off`,lite:`Lite — names the lazier option`,full:`Full — the ladder enforced`,ultra:`Ultra — challenges the requirement`},U=[{id:`tier`,label:`Tier`,blurb:`Prefers a lower tier.`},{id:`health`,label:`Health`,blurb:`Penalises recent failures and an open breaker.`},{id:`quota`,label:`Quota`,blurb:`Prefers accounts ahead of their window's burn rate.`},{id:`cost`,label:`Cost`,blurb:`Prefers the cheaper candidate.`},{id:`latency`,label:`Latency`,blurb:`Prefers the faster observed first token.`},{id:`load`,label:`Load`,blurb:`Prefers accounts with fewer requests in flight.`}],W=[{id:`maxAttempts`,label:`Attempts per request`,hint:`Candidates dispatch may try. 1 disables failover.`,unit:`attempts`,step:1,min:1},{id:`requestDeadlineMs`,label:`Request deadline`,hint:`Across all attempts. 0 disables only OmniGateway's deadline.`,unit:`ms`,step:1e3,min:0},{id:`breakerThreshold`,label:`Breaker threshold`,hint:`Consecutive failures before an account and model leaves rotation.`,unit:`failures`,step:1,min:1},{id:`breakerCooldownMs`,label:`Breaker cooldown`,hint:`Wait before a tripped account is probed. Doubles per extra failure.`,unit:`ms`,step:1e3,min:1},{id:`logRetentionDays`,label:`Log retention`,hint:`How long request rows are kept before pruning.`,unit:`days`,step:1,min:1},{id:`bodyRetentionDays`,label:`Body retention`,hint:`Captured bodies only. Never longer than log retention; swept hourly.`,unit:`days`,step:1,min:1,max:3650},{id:`quotaPollIntervalMs`,label:`Quota poll interval`,hint:`How often a provider is asked for remaining quota. 0 disables. Needs a restart.`,unit:`ms`,step:6e4,min:0}],G=j.div`
|
|
38
38
|
display: grid;
|
|
39
39
|
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
|
40
40
|
gap: ${({theme:e})=>e.space(3)};
|
|
@@ -85,4 +85,4 @@ import{J as e,Jt as t,Qt as n,Ut as r,X as i,Z as a,kt as o,qt as s}from"./Lamp-
|
|
|
85
85
|
code {
|
|
86
86
|
font-family: ${({theme:e})=>e.font.mono};
|
|
87
87
|
}
|
|
88
|
-
`;function de(e){let t={};for(let n of U)t[`w.${n.id}`]=String(e.weights[n.id]);for(let n of W)t[n.id]=String(e[n.id]);return t.rtkEnabled=String(e.rtkEnabled),t.autoCacheEnabled=String(e.autoCacheEnabled),t.ponytailMode=e.ponytailMode,t.bodyLoggingEnabled=String(e.bodyLoggingEnabled),t.bodyLoggingCaptureStreamChunks=String(e.bodyLoggingCaptureStreamChunks),t}function fe(e){let t={};for(let n of U){let r=(e[`w.${n.id}`]??``).trim(),i=Number(r);if(r.length===0||!Number.isFinite(i))return{ok:!1,problem:`${n.label} must be a number.`};t[n.id]=i}let n={};for(let t of W){let r=(e[t.id]??``).trim(),i=Number(r);if(r.length===0||!Number.isInteger(i)||i<t.min)return{ok:!1,problem:`${t.label} must be a whole number of ${t.min} or more.`};n[t.id]=i}return n.maxAttempts>10?{ok:!1,problem:`Attempts per request cannot exceed 10.`}:{ok:!0,settings:{weights:t,...n,rtkEnabled:e.rtkEnabled===`true`,autoCacheEnabled:e.autoCacheEnabled===`true`,ponytailMode:e.ponytailMode!==void 0&&Object.hasOwn(H,e.ponytailMode)?e.ponytailMode:`off`,bodyLoggingEnabled:e.bodyLoggingEnabled===`true`,bodyLoggingCaptureStreamChunks:e.bodyLoggingCaptureStreamChunks===`true`}}}function pe(){let e=t(),n=i(),a=r(),[o,s]=O({}),[u,x]=O(null),[E,D]=O(!1);ee(()=>{e.data!==void 0&&s(de(e.data))},[e.data]);let j=Math.max(1e-4,...U.map(e=>Math.abs(Number(o[`w.${e.id}`])||0)));return A(te,{children:[k(b,{legend:`Settings`,title:`Routing and retention`,summary:`Applied to every request the gateway routes. Changes take effect on the next request; nothing restarts.`,actions:k(p,{type:`button`,$variant:`primary`,disabled:a.isPending||e.isLoading,onClick:()=>{D(!1);let e=fe(o);if(!e.ok){x(e.problem);return}x(null),a.mutate(e.settings,{onSuccess:()=>D(!0),onError:e=>x(f(e))})},children:a.isPending?`Saving…`:`Save changes`})}),e.isError?k(h,{legend:`Settings`,children:k(m,{error:e.error,onRetry:()=>void e.refetch()})}):e.isLoading?k(h,{legend:`Settings`,children:k(g,{rows:6})}):A(l,{$gap:4,children:[k(h,{legend:`Scoring weights`,meta:`relative to each other`,footer:A(c,{children:[k(y,{children:`Score is the sum of each term times its weight, then multiplied by the account and target weights.`}),k(v,{})]}),children:k(G,{children:U.map(e=>{let t=Number(o[`w.${e.id}`])||0;return A(K,{children:[k(w,{label:e.label,children:t=>k(C,{...t,type:`number`,step:.5,value:o[`w.${e.id}`]??``,onChange:t=>s({...o,[`w.${e.id}`]:t.target.value})})}),k(T,{fraction:Math.abs(t)/j,height:4,tone:`var(--accent)`,label:`${e.label} weight ${t}`}),k(q,{children:e.blurb})]},e.id)})})}),k(h,{legend:`Limits`,children:k(G,{children:W.map(e=>k(K,{children:k(w,{label:e.label,hint:e.hint,children:t=>A(c,{$gap:2,children:[k(C,{...t,type:`number`,min:e.min,step:e.step,value:o[e.id]??``,onChange:t=>s({...o,[e.id]:t.target.value})}),k(y,{children:e.unit})]})})},e.id))})}),A(_,{$min:`380px`,$stretch:!0,children:[k(h,{legend:`Request handling`,meta:`applied before dispatch`,children:A(J,{children:[k(Q,{label:`Enable RTK compression`,checked:o.rtkEnabled===`true`,onCheckedChange:e=>s({...o,rtkEnabled:String(e)}),children:`Compresses recognized historical tool results. Confirmed non-shell tools are excluded; unknown-origin results may be compressed only when a detector recognizes shell output. Lossy.`}),k(Q,{label:`Add a cache breakpoint when a client sends none`,checked:o.autoCacheEnabled===`true`,onCheckedChange:e=>s({...o,autoCacheEnabled:String(e)}),children:`Marks the end of the system prompt on Anthropic requests carrying no breakpoint of their own. Requests that mark one are untouched.`}),k(ce,{label:`Lazy senior dev mode`,blurb:`Appends the ponytail ruleset, about 1,240 tokens, to every system prompt. A request already carrying it is left alone.`,children:e=>k(S,{...e,value:o.ponytailMode??`off`,onChange:e=>s({...o,ponytailMode:e.target.value}),children:Object.entries(H).map(([e,t])=>k(`option`,{value:e,children:t},e))})})]})}),k(h,{legend:`Request and response bodies`,meta:n.data===!0?`permitted by the environment`:`not permitted`,children:A(l,{$gap:2,children:[n.data===!0?null:A(ue,{children:[`This gateway started without `,k(`code`,{children:`OMNI_BODY_LOGGING_ALLOWED`}),`, so nothing below can record anything. Set it in the installation's `,k(`code`,{children:`.env`}),` and restart first.`]}),A(J,{children:[k(Q,{label:`Capture request and response bodies`,checked:o.bodyLoggingEnabled===`true`,disabled:n.data!==!0,onCheckedChange:e=>s({...o,bodyLoggingEnabled:String(e)}),children:`Stores what each client sent and each provider returned, encrypted beside the database. Tokens and keys are masked; headers are never captured. Expires on the
|
|
88
|
+
`;function de(e){let t={};for(let n of U)t[`w.${n.id}`]=String(e.weights[n.id]);for(let n of W)t[n.id]=String(e[n.id]);return t.rtkEnabled=String(e.rtkEnabled),t.autoCacheEnabled=String(e.autoCacheEnabled),t.ponytailMode=e.ponytailMode,t.bodyLoggingEnabled=String(e.bodyLoggingEnabled),t.bodyLoggingCaptureStreamChunks=String(e.bodyLoggingCaptureStreamChunks),t}function fe(e){let t={};for(let n of U){let r=(e[`w.${n.id}`]??``).trim(),i=Number(r);if(r.length===0||!Number.isFinite(i))return{ok:!1,problem:`${n.label} must be a number.`};t[n.id]=i}let n={};for(let t of W){let r=(e[t.id]??``).trim(),i=Number(r);if(r.length===0||!Number.isInteger(i)||i<t.min)return{ok:!1,problem:`${t.label} must be a whole number of ${t.min} or more.`};if(t.max!==void 0&&i>t.max)return{ok:!1,problem:`${t.label} cannot exceed ${t.max}.`};n[t.id]=i}return n.maxAttempts>10?{ok:!1,problem:`Attempts per request cannot exceed 10.`}:{ok:!0,settings:{weights:t,...n,rtkEnabled:e.rtkEnabled===`true`,autoCacheEnabled:e.autoCacheEnabled===`true`,ponytailMode:e.ponytailMode!==void 0&&Object.hasOwn(H,e.ponytailMode)?e.ponytailMode:`off`,bodyLoggingEnabled:e.bodyLoggingEnabled===`true`,bodyLoggingCaptureStreamChunks:e.bodyLoggingCaptureStreamChunks===`true`}}}function pe(){let e=t(),n=i(),a=r(),[o,s]=O({}),[u,x]=O(null),[E,D]=O(!1);ee(()=>{e.data!==void 0&&s(de(e.data))},[e.data]);let j=Math.max(1e-4,...U.map(e=>Math.abs(Number(o[`w.${e.id}`])||0)));return A(te,{children:[k(b,{legend:`Settings`,title:`Routing and retention`,summary:`Applied to every request the gateway routes. Changes take effect on the next request; nothing restarts.`,actions:k(p,{type:`button`,$variant:`primary`,disabled:a.isPending||e.isLoading,onClick:()=>{D(!1);let e=fe(o);if(!e.ok){x(e.problem);return}x(null),a.mutate(e.settings,{onSuccess:()=>D(!0),onError:e=>x(f(e))})},children:a.isPending?`Saving…`:`Save changes`})}),e.isError?k(h,{legend:`Settings`,children:k(m,{error:e.error,onRetry:()=>void e.refetch()})}):e.isLoading?k(h,{legend:`Settings`,children:k(g,{rows:6})}):A(l,{$gap:4,children:[k(h,{legend:`Scoring weights`,meta:`relative to each other`,footer:A(c,{children:[k(y,{children:`Score is the sum of each term times its weight, then multiplied by the account and target weights.`}),k(v,{})]}),children:k(G,{children:U.map(e=>{let t=Number(o[`w.${e.id}`])||0;return A(K,{children:[k(w,{label:e.label,children:t=>k(C,{...t,type:`number`,step:.5,value:o[`w.${e.id}`]??``,onChange:t=>s({...o,[`w.${e.id}`]:t.target.value})})}),k(T,{fraction:Math.abs(t)/j,height:4,tone:`var(--accent)`,label:`${e.label} weight ${t}`}),k(q,{children:e.blurb})]},e.id)})})}),k(h,{legend:`Limits`,children:k(G,{children:W.map(e=>k(K,{children:k(w,{label:e.label,hint:e.hint,children:t=>A(c,{$gap:2,children:[k(C,{...t,type:`number`,min:e.min,max:e.max,step:e.step,value:o[e.id]??``,onChange:t=>s({...o,[e.id]:t.target.value})}),k(y,{children:e.unit})]})})},e.id))})}),A(_,{$min:`380px`,$stretch:!0,children:[k(h,{legend:`Request handling`,meta:`applied before dispatch`,children:A(J,{children:[k(Q,{label:`Enable RTK compression`,checked:o.rtkEnabled===`true`,onCheckedChange:e=>s({...o,rtkEnabled:String(e)}),children:`Compresses recognized historical tool results. Confirmed non-shell tools are excluded; unknown-origin results may be compressed only when a detector recognizes shell output. Lossy.`}),k(Q,{label:`Add a cache breakpoint when a client sends none`,checked:o.autoCacheEnabled===`true`,onCheckedChange:e=>s({...o,autoCacheEnabled:String(e)}),children:`Marks the end of the system prompt on Anthropic requests carrying no breakpoint of their own. Requests that mark one are untouched.`}),k(ce,{label:`Lazy senior dev mode`,blurb:`Appends the ponytail ruleset, about 1,240 tokens, to every system prompt. A request already carrying it is left alone.`,children:e=>k(S,{...e,value:o.ponytailMode??`off`,onChange:e=>s({...o,ponytailMode:e.target.value}),children:Object.entries(H).map(([e,t])=>k(`option`,{value:e,children:t},e))})})]})}),k(h,{legend:`Request and response bodies`,meta:n.data===!0?`permitted by the environment`:`not permitted`,children:A(l,{$gap:2,children:[n.data===!0?null:A(ue,{children:[`This gateway started without `,k(`code`,{children:`OMNI_BODY_LOGGING_ALLOWED`}),`, so nothing below can record anything. Set it in the installation's `,k(`code`,{children:`.env`}),` and restart first.`]}),A(J,{children:[k(Q,{label:`Capture request and response bodies`,checked:o.bodyLoggingEnabled===`true`,disabled:n.data!==!0,onCheckedChange:e=>s({...o,bodyLoggingEnabled:String(e)}),children:`Stores what each client sent and each provider returned, encrypted beside the database. Tokens and keys are masked; headers are never captured. Expires on the body retention window above, never later than the request log.`}),k(Q,{label:`Also keep raw stream frames`,checked:o.bodyLoggingCaptureStreamChunks===`true`,disabled:n.data!==!0||o.bodyLoggingEnabled!==`true`,onCheckedChange:e=>s({...o,bodyLoggingCaptureStreamChunks:String(e)}),children:`Also keeps the raw SSE frames of each attempt. The most expensive thing capture stores.`})]})]})})]}),u===null?null:k(le,{role:`alert`,children:u}),E&&u===null?k($,{role:`status`,children:`Settings saved.`}):null,A(_,{$min:`380px`,$stretch:!0,children:[k(V,{}),k(ne,{})]}),k(h,{legend:`Known limits`,children:A(l,{$gap:2,children:[A(c,{$gap:2,$align:`start`,children:[k(d,{$dim:!0,children:`rate limits`}),k(q,{children:`Counted per gateway process and reset when it restarts. Not shared across instances.`})]}),A(c,{$gap:2,$align:`start`,children:[k(d,{$dim:!0,children:`logs`}),k(q,{children:`Request rows record routing and token counts only. Prompts and responses only when body capture is on, to a separate encrypted store. Credentials to neither.`})]})]})})]})]})}var me=pe;export{me as component};
|
|
@@ -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-BYDVTknB.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-DEALADtD.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-BhkdR1f4.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-facio1_r.js","assets/_app.database-CqSoTi2l.js","assets/_app.keys-Dq5O0AG9.js","assets/_app.logs-PjRK5wqy.js","assets/_app.models-BfmeeB5e.js","assets/_app.settings-CdSQyweb.js","assets/_app.usage--5qFtU1W.js","assets/_app.plugins._pluginId-cCDDM_D_.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-DEALADtD.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-BhkdR1f4.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-facio1_r.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-CdSQyweb.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-cCDDM_D_.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-BYDVTknB.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-BYDVTknB.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">
|