nomnomtokens 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -10
- package/dist/index.js +4208 -3455
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/web/nitro.json +1 -1
- package/web/public/_nuxt/4C_a23zt.js +1 -0
- package/web/public/_nuxt/B1jhn8zK.js +1 -0
- package/web/public/_nuxt/B2aHje2L.js +1 -0
- package/web/public/_nuxt/BAfR3Wl32.js +1 -0
- package/web/public/_nuxt/BMSLzLlT.js +1 -0
- package/web/public/_nuxt/BOKlFKrX.js +1 -0
- package/web/public/_nuxt/Ba6z8j_4.js +1 -0
- package/web/public/_nuxt/{B1O-ibEy.js → Bag9D5rq.js} +2 -2
- package/web/public/_nuxt/Bia8fJFj.js +1 -0
- package/web/public/_nuxt/{tqUqm2f-.js → Bprokln-.js} +1 -1
- package/web/public/_nuxt/C51OzH6V.js +1 -0
- package/web/public/_nuxt/C9MiT_Wm.js +96 -0
- package/web/public/_nuxt/CDzUujek.js +2 -0
- package/web/public/_nuxt/CIHIOSzn.js +1 -0
- package/web/public/_nuxt/CIKwfDBl.js +1 -0
- package/web/public/_nuxt/COwSpxrx.js +1 -0
- package/web/public/_nuxt/CZSbzIi-.js +1 -0
- package/web/public/_nuxt/CfBMjq8x.js +1 -0
- package/web/public/_nuxt/Ch3y3mGJ.js +1 -0
- package/web/public/_nuxt/{B7bAnU98.js → CkRZsevx.js} +1 -1
- package/web/public/_nuxt/Cq1Sq3Go.js +1 -0
- package/web/public/_nuxt/CsN_oUfs.js +1 -0
- package/web/public/_nuxt/CvIugsJe2.js +1 -0
- package/web/public/_nuxt/D49wVVwm2.js +1 -0
- package/web/public/_nuxt/D4C6J8YV.js +1 -0
- package/web/public/_nuxt/D7Ph0tZD.js +1 -0
- package/web/public/_nuxt/D9Mxq5ER.js +1 -0
- package/web/public/_nuxt/D9j6aFUy.js +1 -0
- package/web/public/_nuxt/DMgad8mU.js +1 -0
- package/web/public/_nuxt/DPnm6zS2.js +1 -0
- package/web/public/_nuxt/DQEnwY-5.js +1 -0
- package/web/public/_nuxt/Dh50_bkx.js +1 -0
- package/web/public/_nuxt/DhJW7zb9.js +1 -0
- package/web/public/_nuxt/DnTwjl0_2.js +47 -0
- package/web/public/_nuxt/DsH8sTHf.js +1 -0
- package/web/public/_nuxt/Dy30RUCD2.js +1 -0
- package/web/public/_nuxt/OU1MVgXQ.js +1 -0
- package/web/public/_nuxt/W3KL_OjU.js +1 -0
- package/web/public/_nuxt/{BgvEQa6E.js → ZjfInHdu.js} +2 -2
- package/web/public/_nuxt/builds/latest.json +1 -1
- package/web/public/_nuxt/builds/meta/e90c8a2d-9e50-4b58-8019-6b1bf4c8fc6d.json +1 -0
- package/web/public/_nuxt/cbxnBwm6.js +1 -0
- package/web/public/_nuxt/entry.MbqNBIeH.css +2 -0
- package/web/public/_nuxt/m3-Vaz25.js +1 -0
- package/web/server/chunks/_/filters.mjs +1 -1
- package/web/server/chunks/build/{Badge-C0eTW_zX.mjs → Badge-BmQgPqZ1.mjs} +2 -2
- package/web/server/chunks/build/{Badge-C0eTW_zX.mjs.map → Badge-BmQgPqZ1.mjs.map} +1 -1
- package/web/server/chunks/build/{Button-7BTto1uR.mjs → Button-DnpDAHT3.mjs} +2 -2
- package/web/server/chunks/build/{Button-7BTto1uR.mjs.map → Button-DnpDAHT3.mjs.map} +1 -1
- package/web/server/chunks/build/Card-Be4cmWue.mjs +30 -0
- package/web/server/chunks/build/Card-Be4cmWue.mjs.map +1 -0
- package/web/server/chunks/build/{CardAction-M7nFIGyX.mjs → CardAction-CkY0xYx3.mjs} +2 -2
- package/web/server/chunks/build/{CardAction-M7nFIGyX.mjs.map → CardAction-CkY0xYx3.mjs.map} +1 -1
- package/web/server/chunks/build/{CardTitle-D9ve_H9E.mjs → CardContent-C_IMqI8K.mjs} +26 -26
- package/web/server/chunks/build/CardContent-C_IMqI8K.mjs.map +1 -0
- package/web/server/chunks/build/{EmptyState-DWgJMVCI.mjs → EmptyState-FUeBWCT0.mjs} +2 -2
- package/web/server/chunks/build/{EmptyState-DWgJMVCI.mjs.map → EmptyState-FUeBWCT0.mjs.map} +1 -1
- package/web/server/chunks/build/{FilterBar-vwbfttN7.mjs → FilterBar-BlEsJ5dy.mjs} +5 -5
- package/web/server/chunks/build/{FilterBar-vwbfttN7.mjs.map → FilterBar-BlEsJ5dy.mjs.map} +1 -1
- package/web/server/chunks/build/{Progress-BckzQSF5.mjs → Progress-BUpfE9Os.mjs} +2 -2
- package/web/server/chunks/build/{Progress-BckzQSF5.mjs.map → Progress-BUpfE9Os.mjs.map} +1 -1
- package/web/server/chunks/build/Skeleton-BidW2_bw.mjs +28 -0
- package/web/server/chunks/build/Skeleton-BidW2_bw.mjs.map +1 -0
- package/web/server/chunks/build/{Sparkline-Cxifh2uK.mjs → Sparkline-CaCRq45J.mjs} +6 -5
- package/web/server/chunks/build/Sparkline-CaCRq45J.mjs.map +1 -0
- package/web/server/chunks/build/{TableCell-BZwItbY_.mjs → TableCell-xM3CadYu.mjs} +2 -2
- package/web/server/chunks/build/{TableCell-BZwItbY_.mjs.map → TableCell-xM3CadYu.mjs.map} +1 -1
- package/web/server/chunks/build/{Tooltip-BVTXdgMT.mjs → Tooltip-BZX3jLtj.mjs} +16 -4
- package/web/server/chunks/build/Tooltip-BZX3jLtj.mjs.map +1 -0
- package/web/server/chunks/build/{_id_-BKmH0aHH.mjs → _id_-BvccBwzH.mjs} +14 -11
- package/web/server/chunks/build/_id_-BvccBwzH.mjs.map +1 -0
- package/web/server/chunks/build/alerts-6wBAzQHU.mjs +159 -0
- package/web/server/chunks/build/alerts-6wBAzQHU.mjs.map +1 -0
- package/web/server/chunks/build/{fetch-Debw9R9i.mjs → asyncData-CMa0z9Yw.mjs} +8 -129
- package/web/server/chunks/build/asyncData-CMa0z9Yw.mjs.map +1 -0
- package/web/server/chunks/build/default-BokiYQNv.mjs +847 -0
- package/web/server/chunks/build/default-BokiYQNv.mjs.map +1 -0
- package/web/server/chunks/build/error-404-DPRNxhXC.mjs +2 -2
- package/web/server/chunks/build/error-500-DXGrtqsW.mjs +2 -2
- package/web/server/chunks/build/export-BhfwmSMl.mjs +184 -0
- package/web/server/chunks/build/export-BhfwmSMl.mjs.map +1 -0
- package/web/server/chunks/build/fetch-DJ9NNbFP.mjs +131 -0
- package/web/server/chunks/build/fetch-DJ9NNbFP.mjs.map +1 -0
- package/web/server/chunks/build/import-CO3NEu0P.mjs +233 -0
- package/web/server/chunks/build/import-CO3NEu0P.mjs.map +1 -0
- package/web/server/chunks/build/{limits-CnRLojCD.mjs → limits-CX9zBSqw.mjs} +15 -12
- package/web/server/chunks/build/limits-CX9zBSqw.mjs.map +1 -0
- package/web/server/chunks/build/nuxt-link-mYiLFsJs.mjs +2 -2
- package/web/server/chunks/build/{pages-DlIWqsLr.mjs → pages-DyXqJyPq.mjs} +140 -15
- package/web/server/chunks/build/pages-DyXqJyPq.mjs.map +1 -0
- package/web/server/chunks/build/{providers-DOMeWSDZ.mjs → providers-Ca7keu2G.mjs} +17 -14
- package/web/server/chunks/build/providers-Ca7keu2G.mjs.map +1 -0
- package/web/server/chunks/build/scopes-E5z80S19.mjs +1348 -0
- package/web/server/chunks/build/scopes-E5z80S19.mjs.map +1 -0
- package/web/server/chunks/build/{sessions-peyhKv2_.mjs → sessions-CESRiCOS.mjs} +14 -11
- package/web/server/chunks/build/sessions-CESRiCOS.mjs.map +1 -0
- package/web/server/chunks/build/{timeline-P2RrZyBs.mjs → timeline-d27OlbZN.mjs} +16 -13
- package/web/server/chunks/build/timeline-d27OlbZN.mjs.map +1 -0
- package/web/server/chunks/build/useFormat-NkyUqeik.mjs +71 -0
- package/web/server/chunks/build/useFormat-NkyUqeik.mjs.map +1 -0
- package/web/server/chunks/build/{useStats-Dor6kLek.mjs → useStats-CmYzpdbE.mjs} +11 -3
- package/web/server/chunks/build/useStats-CmYzpdbE.mjs.map +1 -0
- package/web/server/chunks/nitro/nitro.mjs +739 -195
- package/web/server/chunks/nitro/nitro.mjs.map +1 -1
- package/web/server/chunks/routes/api/alerts.get.mjs +24 -0
- package/web/server/chunks/routes/api/alerts.get.mjs.map +1 -0
- package/web/server/chunks/routes/api/alerts.put.mjs +27 -0
- package/web/server/chunks/routes/api/alerts.put.mjs.map +1 -0
- package/web/server/chunks/routes/api/events/stream.get.mjs +3 -3
- package/web/server/chunks/routes/api/export.get.mjs +36 -0
- package/web/server/chunks/routes/api/export.get.mjs.map +1 -0
- package/web/server/chunks/routes/api/import/csv.post.mjs +65 -0
- package/web/server/chunks/routes/api/import/csv.post.mjs.map +1 -0
- package/web/server/chunks/routes/api/ingest.post.mjs +3 -3
- package/web/server/chunks/routes/api/meta.get.mjs +3 -3
- package/web/server/chunks/routes/api/stats/heatmap.get.mjs +2 -2
- package/web/server/chunks/routes/api/stats/limits.get.mjs +3 -3
- package/web/server/chunks/routes/api/stats/providers.get.mjs +3 -3
- package/web/server/chunks/routes/api/stats/scopes.get.mjs +3 -3
- package/web/server/chunks/routes/api/stats/series.get.mjs +3 -3
- package/web/server/chunks/routes/api/stats/session/_id_.get.mjs +3 -3
- package/web/server/chunks/routes/api/stats/sessions.get.mjs +3 -3
- package/web/server/chunks/routes/api/stats/summary.get.mjs +3 -3
- package/web/server/chunks/routes/renderer.mjs +2 -2
- package/web/server/chunks/virtual/entry.mjs +26 -11
- package/web/server/chunks/virtual/precomputed.mjs +1 -1
- package/web/server/chunks/virtual/precomputed.mjs.map +1 -1
- package/web/server/index.mjs +3 -3
- package/web/public/_nuxt/075nz0Lp.js +0 -1
- package/web/public/_nuxt/BDF8cO8j.js +0 -1
- package/web/public/_nuxt/BGnU88BC.js +0 -1
- package/web/public/_nuxt/BPhzhJvP.js +0 -1
- package/web/public/_nuxt/BgaLDD2o.js +0 -1
- package/web/public/_nuxt/BioUjjBz.js +0 -1
- package/web/public/_nuxt/BlvSknce.js +0 -1
- package/web/public/_nuxt/Bn14i44R.js +0 -1
- package/web/public/_nuxt/BnfUOzcc.js +0 -1
- package/web/public/_nuxt/Bv0odo9W.js +0 -1
- package/web/public/_nuxt/Bxx0Z5z6.js +0 -1
- package/web/public/_nuxt/CiWIPYVi.js +0 -1
- package/web/public/_nuxt/CqSNCP5f.js +0 -1
- package/web/public/_nuxt/Ctg1e1JV.js +0 -1
- package/web/public/_nuxt/Cu3rIkF2.js +0 -47
- package/web/public/_nuxt/Cutk9Ewh.js +0 -1
- package/web/public/_nuxt/DCVp7cZB.js +0 -96
- package/web/public/_nuxt/DCnkQFS0.js +0 -1
- package/web/public/_nuxt/DJbGqyvB.js +0 -1
- package/web/public/_nuxt/DMT7tA5C.js +0 -1
- package/web/public/_nuxt/M0pG6UQn.js +0 -1
- package/web/public/_nuxt/RlymLGHS.js +0 -1
- package/web/public/_nuxt/TmkSb4nj.js +0 -1
- package/web/public/_nuxt/_S09PGd-.js +0 -1
- package/web/public/_nuxt/builds/meta/63ad5f37-5b40-456d-8f53-69ff57b4903c.json +0 -1
- package/web/public/_nuxt/cHkFs-ms.js +0 -1
- package/web/public/_nuxt/entry.DTNjKx6y.css +0 -2
- package/web/public/_nuxt/fjfS4ymU.js +0 -1
- package/web/public/_nuxt/moFy8lON.js +0 -2
- package/web/public/_nuxt/oT-x2NdZ.js +0 -1
- package/web/server/chunks/build/CardTitle-D9ve_H9E.mjs.map +0 -1
- package/web/server/chunks/build/Sparkline-Cxifh2uK.mjs.map +0 -1
- package/web/server/chunks/build/Tooltip-BVTXdgMT.mjs.map +0 -1
- package/web/server/chunks/build/_id_-BKmH0aHH.mjs.map +0 -1
- package/web/server/chunks/build/default-C8deLrP0.mjs +0 -556
- package/web/server/chunks/build/default-C8deLrP0.mjs.map +0 -1
- package/web/server/chunks/build/fetch-Debw9R9i.mjs.map +0 -1
- package/web/server/chunks/build/limits-CnRLojCD.mjs.map +0 -1
- package/web/server/chunks/build/pages-DlIWqsLr.mjs.map +0 -1
- package/web/server/chunks/build/providers-DOMeWSDZ.mjs.map +0 -1
- package/web/server/chunks/build/scopes-Bagepvnf.mjs +0 -794
- package/web/server/chunks/build/scopes-Bagepvnf.mjs.map +0 -1
- package/web/server/chunks/build/sessions-peyhKv2_.mjs.map +0 -1
- package/web/server/chunks/build/timeline-P2RrZyBs.mjs.map +0 -1
- package/web/server/chunks/build/useFormat-BfI0x0lv.mjs +0 -119
- package/web/server/chunks/build/useFormat-BfI0x0lv.mjs.map +0 -1
- package/web/server/chunks/build/useStats-Dor6kLek.mjs.map +0 -1
- /package/web/public/_nuxt/{BDNMzG2s.js → BDNMzG2s2.js} +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import process from 'node:process';globalThis._importMeta_=globalThis._importMeta_||{url:"file:///_entry.js",env:process.env};import
|
|
1
|
+
import process from 'node:process';globalThis._importMeta_=globalThis._importMeta_||{url:"file:///_entry.js",env:process.env};import { promises, existsSync, mkdirSync, readFileSync, writeFileSync, createReadStream, readdirSync } from 'node:fs';
|
|
2
|
+
import { resolve as resolve$1, dirname as dirname$1, join } from 'node:path';
|
|
3
|
+
import http, { Server as Server$1 } from 'node:http';
|
|
2
4
|
import https, { Server } from 'node:https';
|
|
3
5
|
import { EventEmitter } from 'node:events';
|
|
4
6
|
import { Buffer as Buffer$1 } from 'node:buffer';
|
|
5
|
-
import { promises, existsSync, mkdirSync, createReadStream, readdirSync, readFileSync } from 'node:fs';
|
|
6
|
-
import { resolve as resolve$1, dirname as dirname$1, join } from 'node:path';
|
|
7
7
|
import { createHash } from 'node:crypto';
|
|
8
8
|
import { homedir } from 'node:os';
|
|
9
9
|
import Database from 'better-sqlite3';
|
|
@@ -796,6 +796,84 @@ function isError(input) {
|
|
|
796
796
|
return input?.constructor?.__h3_error__ === true;
|
|
797
797
|
}
|
|
798
798
|
|
|
799
|
+
function parse(multipartBodyBuffer, boundary) {
|
|
800
|
+
let lastline = "";
|
|
801
|
+
let state = 0 /* INIT */;
|
|
802
|
+
let buffer = [];
|
|
803
|
+
const allParts = [];
|
|
804
|
+
let currentPartHeaders = [];
|
|
805
|
+
for (let i = 0; i < multipartBodyBuffer.length; i++) {
|
|
806
|
+
const prevByte = i > 0 ? multipartBodyBuffer[i - 1] : null;
|
|
807
|
+
const currByte = multipartBodyBuffer[i];
|
|
808
|
+
const newLineChar = currByte === 10 || currByte === 13;
|
|
809
|
+
if (!newLineChar) {
|
|
810
|
+
lastline += String.fromCodePoint(currByte);
|
|
811
|
+
}
|
|
812
|
+
const newLineDetected = currByte === 10 && prevByte === 13;
|
|
813
|
+
if (0 /* INIT */ === state && newLineDetected) {
|
|
814
|
+
if ("--" + boundary === lastline) {
|
|
815
|
+
state = 1 /* READING_HEADERS */;
|
|
816
|
+
}
|
|
817
|
+
lastline = "";
|
|
818
|
+
} else if (1 /* READING_HEADERS */ === state && newLineDetected) {
|
|
819
|
+
if (lastline.length > 0) {
|
|
820
|
+
const i2 = lastline.indexOf(":");
|
|
821
|
+
if (i2 > 0) {
|
|
822
|
+
const name = lastline.slice(0, i2).toLowerCase();
|
|
823
|
+
const value = lastline.slice(i2 + 1).trim();
|
|
824
|
+
currentPartHeaders.push([name, value]);
|
|
825
|
+
}
|
|
826
|
+
} else {
|
|
827
|
+
state = 2 /* READING_DATA */;
|
|
828
|
+
buffer = [];
|
|
829
|
+
}
|
|
830
|
+
lastline = "";
|
|
831
|
+
} else if (2 /* READING_DATA */ === state) {
|
|
832
|
+
if (lastline.length > boundary.length + 4) {
|
|
833
|
+
lastline = "";
|
|
834
|
+
}
|
|
835
|
+
if ("--" + boundary === lastline) {
|
|
836
|
+
const j = buffer.length - lastline.length;
|
|
837
|
+
const part = buffer.slice(0, j - 1);
|
|
838
|
+
allParts.push(process$1(part, currentPartHeaders));
|
|
839
|
+
buffer = [];
|
|
840
|
+
currentPartHeaders = [];
|
|
841
|
+
lastline = "";
|
|
842
|
+
state = 3 /* READING_PART_SEPARATOR */;
|
|
843
|
+
} else {
|
|
844
|
+
buffer.push(currByte);
|
|
845
|
+
}
|
|
846
|
+
if (newLineDetected) {
|
|
847
|
+
lastline = "";
|
|
848
|
+
}
|
|
849
|
+
} else if (3 /* READING_PART_SEPARATOR */ === state && newLineDetected) {
|
|
850
|
+
state = 1 /* READING_HEADERS */;
|
|
851
|
+
}
|
|
852
|
+
}
|
|
853
|
+
return allParts;
|
|
854
|
+
}
|
|
855
|
+
function process$1(data, headers) {
|
|
856
|
+
const dataObj = {};
|
|
857
|
+
const contentDispositionHeader = headers.find((h) => h[0] === "content-disposition")?.[1] || "";
|
|
858
|
+
for (const i of contentDispositionHeader.split(";")) {
|
|
859
|
+
const s = i.split("=");
|
|
860
|
+
if (s.length !== 2) {
|
|
861
|
+
continue;
|
|
862
|
+
}
|
|
863
|
+
const key = (s[0] || "").trim();
|
|
864
|
+
if (key === "name" || key === "filename") {
|
|
865
|
+
const _value = (s[1] || "").trim().replace(/"/g, "");
|
|
866
|
+
dataObj[key] = Buffer.from(_value, "latin1").toString("utf8");
|
|
867
|
+
}
|
|
868
|
+
}
|
|
869
|
+
const contentType = headers.find((h) => h[0] === "content-type")?.[1] || "";
|
|
870
|
+
if (contentType) {
|
|
871
|
+
dataObj.type = contentType;
|
|
872
|
+
}
|
|
873
|
+
dataObj.data = Buffer.from(data);
|
|
874
|
+
return dataObj;
|
|
875
|
+
}
|
|
876
|
+
|
|
799
877
|
function getQuery(event) {
|
|
800
878
|
return getQuery$1(event.path || "");
|
|
801
879
|
}
|
|
@@ -962,6 +1040,21 @@ async function readBody(event, options = {}) {
|
|
|
962
1040
|
request[ParsedBodySymbol] = parsed;
|
|
963
1041
|
return parsed;
|
|
964
1042
|
}
|
|
1043
|
+
async function readMultipartFormData(event) {
|
|
1044
|
+
const contentType = getRequestHeader(event, "content-type");
|
|
1045
|
+
if (!contentType || !contentType.startsWith("multipart/form-data")) {
|
|
1046
|
+
return;
|
|
1047
|
+
}
|
|
1048
|
+
const boundary = contentType.match(/boundary=([^;]*)(;|$)/i)?.[1];
|
|
1049
|
+
if (!boundary) {
|
|
1050
|
+
return;
|
|
1051
|
+
}
|
|
1052
|
+
const body = await readRawBody(event, false);
|
|
1053
|
+
if (!body) {
|
|
1054
|
+
return;
|
|
1055
|
+
}
|
|
1056
|
+
return parse(body, boundary);
|
|
1057
|
+
}
|
|
965
1058
|
function getRequestWebStream(event) {
|
|
966
1059
|
if (!PayloadMethods$1.includes(event.method)) {
|
|
967
1060
|
return;
|
|
@@ -1210,6 +1303,7 @@ const setHeaders = setResponseHeaders;
|
|
|
1210
1303
|
function setResponseHeader(event, name, value) {
|
|
1211
1304
|
event.node.res.setHeader(name, value);
|
|
1212
1305
|
}
|
|
1306
|
+
const setHeader = setResponseHeader;
|
|
1213
1307
|
function appendResponseHeader(event, name, value) {
|
|
1214
1308
|
let current = event.node.res.getHeader(name);
|
|
1215
1309
|
if (!current) {
|
|
@@ -4267,7 +4361,7 @@ function _expandFromEnv(value) {
|
|
|
4267
4361
|
const _inlineRuntimeConfig = {
|
|
4268
4362
|
"app": {
|
|
4269
4363
|
"baseURL": "/",
|
|
4270
|
-
"buildId": "
|
|
4364
|
+
"buildId": "e90c8a2d-9e50-4b58-8019-6b1bf4c8fc6d",
|
|
4271
4365
|
"buildAssetsDir": "/_nuxt/",
|
|
4272
4366
|
"cdnURL": ""
|
|
4273
4367
|
},
|
|
@@ -5038,6 +5132,155 @@ function moodFor(usedPct) {
|
|
|
5038
5132
|
return "overstuffed";
|
|
5039
5133
|
}
|
|
5040
5134
|
|
|
5135
|
+
const CSV_HEADERS = [
|
|
5136
|
+
"timestamp",
|
|
5137
|
+
"provider",
|
|
5138
|
+
"kind",
|
|
5139
|
+
"session_id",
|
|
5140
|
+
"project",
|
|
5141
|
+
"scope_hash",
|
|
5142
|
+
"model",
|
|
5143
|
+
"cost_usd",
|
|
5144
|
+
"tokens",
|
|
5145
|
+
"input_tokens",
|
|
5146
|
+
"output_tokens",
|
|
5147
|
+
"cache_create",
|
|
5148
|
+
"cache_create_1h",
|
|
5149
|
+
"cache_read"
|
|
5150
|
+
];
|
|
5151
|
+
function csvCell(value) {
|
|
5152
|
+
if (value === null || value === void 0) return "";
|
|
5153
|
+
const s = String(value);
|
|
5154
|
+
if (/[",\n\r]/.test(s)) return `"${s.replace(/"/g, '""')}"`;
|
|
5155
|
+
return s;
|
|
5156
|
+
}
|
|
5157
|
+
function formatExportCsv(rows) {
|
|
5158
|
+
const lines = [CSV_HEADERS.join(",")];
|
|
5159
|
+
for (const r of rows) {
|
|
5160
|
+
lines.push([
|
|
5161
|
+
csvCell(new Date(r.ts).toISOString()),
|
|
5162
|
+
csvCell(r.provider),
|
|
5163
|
+
csvCell(r.kind),
|
|
5164
|
+
csvCell(r.sessionId),
|
|
5165
|
+
csvCell(r.project),
|
|
5166
|
+
csvCell(r.scopeHash),
|
|
5167
|
+
csvCell(r.model),
|
|
5168
|
+
csvCell(r.costUsd),
|
|
5169
|
+
csvCell(r.tokens),
|
|
5170
|
+
csvCell(r.qtyIn),
|
|
5171
|
+
csvCell(r.qtyOut),
|
|
5172
|
+
csvCell(r.qtyCacheCreate),
|
|
5173
|
+
csvCell(r.qtyCacheCreate1h),
|
|
5174
|
+
csvCell(r.qtyCacheRead)
|
|
5175
|
+
].join(","));
|
|
5176
|
+
}
|
|
5177
|
+
return `${lines.join("\n")}
|
|
5178
|
+
`;
|
|
5179
|
+
}
|
|
5180
|
+
function formatExportJson(rows) {
|
|
5181
|
+
return `${JSON.stringify(rows.map((r) => ({
|
|
5182
|
+
timestamp: new Date(r.ts).toISOString(),
|
|
5183
|
+
ts: r.ts,
|
|
5184
|
+
provider: r.provider,
|
|
5185
|
+
kind: r.kind,
|
|
5186
|
+
sessionId: r.sessionId,
|
|
5187
|
+
project: r.project,
|
|
5188
|
+
scopeHash: r.scopeHash,
|
|
5189
|
+
model: r.model,
|
|
5190
|
+
costUsd: r.costUsd,
|
|
5191
|
+
tokens: r.tokens,
|
|
5192
|
+
inputTokens: r.qtyIn,
|
|
5193
|
+
outputTokens: r.qtyOut,
|
|
5194
|
+
cacheCreate: r.qtyCacheCreate,
|
|
5195
|
+
cacheCreate1h: r.qtyCacheCreate1h,
|
|
5196
|
+
cacheRead: r.qtyCacheRead
|
|
5197
|
+
})), null, 2)}
|
|
5198
|
+
`;
|
|
5199
|
+
}
|
|
5200
|
+
|
|
5201
|
+
function parsePricesFile(text) {
|
|
5202
|
+
const raw = JSON.parse(text);
|
|
5203
|
+
if (!raw || typeof raw !== "object") throw new Error("prices file must be a JSON object");
|
|
5204
|
+
const obj = raw;
|
|
5205
|
+
const modelsRaw = obj.models && typeof obj.models === "object" && !Array.isArray(obj.models) ? obj.models : obj;
|
|
5206
|
+
const models = {};
|
|
5207
|
+
for (const [key, value] of Object.entries(modelsRaw)) {
|
|
5208
|
+
if (key === "updatedAt" || key === "source" || key === "models") continue;
|
|
5209
|
+
if (!value || typeof value !== "object") continue;
|
|
5210
|
+
const v = value;
|
|
5211
|
+
if (typeof v.input !== "number" || typeof v.output !== "number") {
|
|
5212
|
+
throw new Error(`model ${key}: need numeric input and output (USD per 1M tokens)`);
|
|
5213
|
+
}
|
|
5214
|
+
models[key] = {
|
|
5215
|
+
input: v.input,
|
|
5216
|
+
output: v.output,
|
|
5217
|
+
...typeof v.cacheWrite5m === "number" ? { cacheWrite5m: v.cacheWrite5m } : {},
|
|
5218
|
+
...typeof v.cacheWrite1h === "number" ? { cacheWrite1h: v.cacheWrite1h } : {},
|
|
5219
|
+
...typeof v.cacheRead === "number" ? { cacheRead: v.cacheRead } : {}
|
|
5220
|
+
};
|
|
5221
|
+
}
|
|
5222
|
+
return {
|
|
5223
|
+
updatedAt: typeof obj.updatedAt === "string" ? obj.updatedAt : void 0,
|
|
5224
|
+
source: typeof obj.source === "string" ? obj.source : void 0,
|
|
5225
|
+
models
|
|
5226
|
+
};
|
|
5227
|
+
}
|
|
5228
|
+
function priceTableFromFile(file) {
|
|
5229
|
+
return makePriceTable(file?.models ?? {});
|
|
5230
|
+
}
|
|
5231
|
+
|
|
5232
|
+
const DEFAULT_ALERTS_CONFIG = {
|
|
5233
|
+
limitPct: 80,
|
|
5234
|
+
dailyUsd: null,
|
|
5235
|
+
webhook: null,
|
|
5236
|
+
desktopNotify: false
|
|
5237
|
+
};
|
|
5238
|
+
function parseAlertsConfig(raw) {
|
|
5239
|
+
const base = { ...DEFAULT_ALERTS_CONFIG };
|
|
5240
|
+
if (!raw || typeof raw !== "object") return base;
|
|
5241
|
+
const o = raw;
|
|
5242
|
+
if (o.limitPct === null) base.limitPct = null;
|
|
5243
|
+
else if (typeof o.limitPct === "number" && Number.isFinite(o.limitPct)) {
|
|
5244
|
+
base.limitPct = Math.min(100, Math.max(0, o.limitPct));
|
|
5245
|
+
}
|
|
5246
|
+
if (o.dailyUsd === null) base.dailyUsd = null;
|
|
5247
|
+
else if (typeof o.dailyUsd === "number" && Number.isFinite(o.dailyUsd) && o.dailyUsd >= 0) {
|
|
5248
|
+
base.dailyUsd = o.dailyUsd;
|
|
5249
|
+
}
|
|
5250
|
+
if (o.webhook === null) base.webhook = null;
|
|
5251
|
+
else if (typeof o.webhook === "string" && o.webhook.trim()) base.webhook = o.webhook.trim();
|
|
5252
|
+
if (typeof o.desktopNotify === "boolean") base.desktopNotify = o.desktopNotify;
|
|
5253
|
+
return base;
|
|
5254
|
+
}
|
|
5255
|
+
function evaluateAlerts(config, input) {
|
|
5256
|
+
const hits = [];
|
|
5257
|
+
if (config.limitPct !== null) {
|
|
5258
|
+
for (const lim of input.limits) {
|
|
5259
|
+
if (lim.usedPct >= config.limitPct) {
|
|
5260
|
+
hits.push({
|
|
5261
|
+
id: `limit:${lim.provider}:${lim.window}`,
|
|
5262
|
+
kind: "limit",
|
|
5263
|
+
message: `${lim.provider} ${lim.window} window at ${lim.usedPct.toFixed(1)}% (threshold ${config.limitPct}%)`,
|
|
5264
|
+
value: lim.usedPct,
|
|
5265
|
+
threshold: config.limitPct,
|
|
5266
|
+
provider: lim.provider,
|
|
5267
|
+
window: lim.window
|
|
5268
|
+
});
|
|
5269
|
+
}
|
|
5270
|
+
}
|
|
5271
|
+
}
|
|
5272
|
+
if (config.dailyUsd !== null && input.todayCostUsd >= config.dailyUsd) {
|
|
5273
|
+
hits.push({
|
|
5274
|
+
id: "daily:usd",
|
|
5275
|
+
kind: "daily",
|
|
5276
|
+
message: `Today's spend $${input.todayCostUsd.toFixed(2)} (threshold $${config.dailyUsd.toFixed(2)})`,
|
|
5277
|
+
value: input.todayCostUsd,
|
|
5278
|
+
threshold: config.dailyUsd
|
|
5279
|
+
});
|
|
5280
|
+
}
|
|
5281
|
+
return hits;
|
|
5282
|
+
}
|
|
5283
|
+
|
|
5041
5284
|
class Repo {
|
|
5042
5285
|
constructor(sqlite) {
|
|
5043
5286
|
this.sqlite = sqlite;
|
|
@@ -5394,6 +5637,104 @@ class Queries {
|
|
|
5394
5637
|
bounds() {
|
|
5395
5638
|
return this.sqlite.prepare("SELECT MIN(ts) AS first, MAX(ts) AS last, COUNT(*) AS events FROM events").get();
|
|
5396
5639
|
}
|
|
5640
|
+
/**
|
|
5641
|
+
* Flat event rows for CSV/JSON export. Joins the local scope label when known.
|
|
5642
|
+
* Caps at `limit` so a mistaken "all time" dump cannot OOM the process.
|
|
5643
|
+
*/
|
|
5644
|
+
exportEvents(f = {}, limit = 1e5) {
|
|
5645
|
+
const w = buildWhere(f);
|
|
5646
|
+
const params = { ...w.params, limit };
|
|
5647
|
+
return this.sqlite.prepare(`
|
|
5648
|
+
SELECT
|
|
5649
|
+
e.id AS id,
|
|
5650
|
+
e.ts AS ts,
|
|
5651
|
+
e.provider AS provider,
|
|
5652
|
+
e.kind AS kind,
|
|
5653
|
+
e.session_id AS sessionId,
|
|
5654
|
+
e.scope_hash AS scopeHash,
|
|
5655
|
+
s.label AS project,
|
|
5656
|
+
e.unit_label AS model,
|
|
5657
|
+
e.cost_usd AS costUsd,
|
|
5658
|
+
e.qty_total AS tokens,
|
|
5659
|
+
e.qty_json AS qtyJson,
|
|
5660
|
+
e.meta_json AS metaJson
|
|
5661
|
+
FROM events e
|
|
5662
|
+
LEFT JOIN scopes s ON s.scope_hash = e.scope_hash
|
|
5663
|
+
${w.sql}
|
|
5664
|
+
ORDER BY e.ts ASC
|
|
5665
|
+
LIMIT @limit
|
|
5666
|
+
`).all(params).map((row) => {
|
|
5667
|
+
const r = row;
|
|
5668
|
+
const qty = JSON.parse(r.qtyJson);
|
|
5669
|
+
return {
|
|
5670
|
+
id: r.id,
|
|
5671
|
+
ts: r.ts,
|
|
5672
|
+
provider: r.provider,
|
|
5673
|
+
kind: r.kind,
|
|
5674
|
+
sessionId: r.sessionId,
|
|
5675
|
+
scopeHash: r.scopeHash,
|
|
5676
|
+
project: r.project,
|
|
5677
|
+
model: r.model,
|
|
5678
|
+
costUsd: r.costUsd,
|
|
5679
|
+
tokens: r.tokens,
|
|
5680
|
+
qtyIn: qty.in ?? 0,
|
|
5681
|
+
qtyOut: qty.out ?? 0,
|
|
5682
|
+
qtyCacheCreate: qty.cacheCreate ?? 0,
|
|
5683
|
+
qtyCacheCreate1h: qty.cacheCreate1h ?? 0,
|
|
5684
|
+
qtyCacheRead: qty.cacheRead ?? 0,
|
|
5685
|
+
meta: JSON.parse(r.metaJson)
|
|
5686
|
+
};
|
|
5687
|
+
});
|
|
5688
|
+
}
|
|
5689
|
+
}
|
|
5690
|
+
|
|
5691
|
+
function defaultPricesPath() {
|
|
5692
|
+
return join(defaultDataDir(), "prices.json");
|
|
5693
|
+
}
|
|
5694
|
+
function loadPriceTable(path = defaultPricesPath()) {
|
|
5695
|
+
if (!existsSync(path)) {
|
|
5696
|
+
return { prices: priceTableFromFile(null), file: null, path };
|
|
5697
|
+
}
|
|
5698
|
+
try {
|
|
5699
|
+
const file = parsePricesFile(readFileSync(path, "utf8"));
|
|
5700
|
+
return { prices: priceTableFromFile(file), file, path };
|
|
5701
|
+
} catch {
|
|
5702
|
+
return { prices: priceTableFromFile(null), file: null, path };
|
|
5703
|
+
}
|
|
5704
|
+
}
|
|
5705
|
+
|
|
5706
|
+
function defaultAlertsPath() {
|
|
5707
|
+
return join(defaultDataDir(), "alerts.json");
|
|
5708
|
+
}
|
|
5709
|
+
function loadAlertsConfig(path = defaultAlertsPath()) {
|
|
5710
|
+
if (!existsSync(path)) {
|
|
5711
|
+
return { config: { ...DEFAULT_ALERTS_CONFIG }, path, exists: false };
|
|
5712
|
+
}
|
|
5713
|
+
try {
|
|
5714
|
+
const raw = JSON.parse(readFileSync(path, "utf8"));
|
|
5715
|
+
return { config: parseAlertsConfig(raw), path, exists: true };
|
|
5716
|
+
} catch {
|
|
5717
|
+
return { config: { ...DEFAULT_ALERTS_CONFIG }, path, exists: false };
|
|
5718
|
+
}
|
|
5719
|
+
}
|
|
5720
|
+
function saveAlertsConfig(config, path = defaultAlertsPath()) {
|
|
5721
|
+
mkdirSync(defaultDataDir(), { recursive: true });
|
|
5722
|
+
writeFileSync(path, `${JSON.stringify(config, null, 2)}
|
|
5723
|
+
`, "utf8");
|
|
5724
|
+
}
|
|
5725
|
+
function checkAlerts(q, config, now = Date.now()) {
|
|
5726
|
+
const cfg = config ?? loadAlertsConfig().config;
|
|
5727
|
+
const todayCostUsd = q.totals({ from: bucketStart(now, "day"), kind: "tokens" }).costUsd;
|
|
5728
|
+
const limits = q.limitWindows().map((w) => {
|
|
5729
|
+
const snapshots = q.limitSnapshots(w.provider, w.window, now - 14 * 24 * 36e5);
|
|
5730
|
+
const forecast = forecastLimit(snapshots, now);
|
|
5731
|
+
return forecast ? { provider: forecast.provider, window: forecast.window, usedPct: forecast.usedPct } : null;
|
|
5732
|
+
}).filter((x) => x !== null);
|
|
5733
|
+
return {
|
|
5734
|
+
config: cfg,
|
|
5735
|
+
hits: evaluateAlerts(cfg, { todayCostUsd, limits }),
|
|
5736
|
+
todayCostUsd
|
|
5737
|
+
};
|
|
5397
5738
|
}
|
|
5398
5739
|
|
|
5399
5740
|
let handle = null;
|
|
@@ -6401,12 +6742,143 @@ class CursorAdapter {
|
|
|
6401
6742
|
}
|
|
6402
6743
|
}
|
|
6403
6744
|
|
|
6404
|
-
function
|
|
6405
|
-
|
|
6745
|
+
function parseCsv(text) {
|
|
6746
|
+
const rows = [];
|
|
6747
|
+
let row = [];
|
|
6748
|
+
let field = "";
|
|
6749
|
+
let quoted = false;
|
|
6750
|
+
for (let i = 0; i < text.length; i++) {
|
|
6751
|
+
const c = text[i];
|
|
6752
|
+
if (quoted) {
|
|
6753
|
+
if (c === '"') {
|
|
6754
|
+
if (text[i + 1] === '"') {
|
|
6755
|
+
field += '"';
|
|
6756
|
+
i++;
|
|
6757
|
+
} else quoted = false;
|
|
6758
|
+
} else field += c;
|
|
6759
|
+
continue;
|
|
6760
|
+
}
|
|
6761
|
+
if (c === '"') quoted = true;
|
|
6762
|
+
else if (c === ",") {
|
|
6763
|
+
row.push(field);
|
|
6764
|
+
field = "";
|
|
6765
|
+
} else if (c === "\n" || c === "\r") {
|
|
6766
|
+
if (c === "\r" && text[i + 1] === "\n") i++;
|
|
6767
|
+
row.push(field);
|
|
6768
|
+
field = "";
|
|
6769
|
+
if (row.length > 1 || row[0] !== "") rows.push(row);
|
|
6770
|
+
row = [];
|
|
6771
|
+
} else field += c;
|
|
6772
|
+
}
|
|
6773
|
+
if (field !== "" || row.length > 0) {
|
|
6774
|
+
row.push(field);
|
|
6775
|
+
rows.push(row);
|
|
6776
|
+
}
|
|
6777
|
+
return rows;
|
|
6778
|
+
}
|
|
6779
|
+
const TS_KEYS = ["ts", "timestamp", "date", "time", "created_at", "day"];
|
|
6780
|
+
const COST_KEYS = ["cost", "cost_usd", "costusd", "amount", "usd", "spend"];
|
|
6781
|
+
const MODEL_KEYS = ["model", "sku", "unit", "unit_label", "resource"];
|
|
6782
|
+
const SCOPE_KEYS = ["project", "scope", "workspace", "repo", "folder"];
|
|
6783
|
+
const SESSION_KEYS = ["session", "session_id", "conversation", "request_group"];
|
|
6784
|
+
const QTY_KEYS = {
|
|
6785
|
+
in: ["input_tokens", "input", "prompt_tokens", "in"],
|
|
6786
|
+
out: ["output_tokens", "output", "completion_tokens", "out"],
|
|
6787
|
+
cacheCreate: ["cache_creation_input_tokens", "cache_write", "cache_create"],
|
|
6788
|
+
cacheRead: ["cache_read_input_tokens", "cache_read"],
|
|
6789
|
+
minutes: ["minutes", "duration_minutes"],
|
|
6790
|
+
requests: ["requests", "calls", "count"]
|
|
6791
|
+
};
|
|
6792
|
+
function normalise(header) {
|
|
6793
|
+
return header.trim().toLowerCase().replace(/[\s-]+/g, "_");
|
|
6794
|
+
}
|
|
6795
|
+
function findColumn(headers, candidates) {
|
|
6796
|
+
for (const candidate of candidates) {
|
|
6797
|
+
const i = headers.indexOf(candidate);
|
|
6798
|
+
if (i !== -1) return i;
|
|
6799
|
+
}
|
|
6800
|
+
return -1;
|
|
6801
|
+
}
|
|
6802
|
+
function toNumber(v) {
|
|
6803
|
+
if (!v) return 0;
|
|
6804
|
+
const cleaned = v.replace(/[^0-9.\-eE]/g, "");
|
|
6805
|
+
const n = Number.parseFloat(cleaned);
|
|
6806
|
+
return Number.isFinite(n) ? n : 0;
|
|
6807
|
+
}
|
|
6808
|
+
async function hashRow(cells) {
|
|
6809
|
+
return scopeHash(cells.join("\0"));
|
|
6810
|
+
}
|
|
6811
|
+
async function importCsv(text, opts = {}) {
|
|
6812
|
+
const rows = parseCsv(text);
|
|
6813
|
+
if (rows.length < 2) return [];
|
|
6814
|
+
const provider = opts.provider ?? "csv";
|
|
6815
|
+
const kind = opts.kind ?? "tokens";
|
|
6816
|
+
const prices = opts.prices ?? defaultPrices;
|
|
6817
|
+
const headers = rows[0].map(normalise);
|
|
6818
|
+
const body = rows.slice(1);
|
|
6819
|
+
const col = {
|
|
6820
|
+
ts: opts.columns?.ts ? headers.indexOf(normalise(opts.columns.ts)) : findColumn(headers, TS_KEYS),
|
|
6821
|
+
cost: opts.columns?.cost ? headers.indexOf(normalise(opts.columns.cost)) : findColumn(headers, COST_KEYS),
|
|
6822
|
+
model: opts.columns?.model ? headers.indexOf(normalise(opts.columns.model)) : findColumn(headers, MODEL_KEYS),
|
|
6823
|
+
scope: opts.columns?.scope ? headers.indexOf(normalise(opts.columns.scope)) : findColumn(headers, SCOPE_KEYS),
|
|
6824
|
+
session: opts.columns?.session ? headers.indexOf(normalise(opts.columns.session)) : findColumn(headers, SESSION_KEYS)
|
|
6825
|
+
};
|
|
6826
|
+
if (col.ts === -1) {
|
|
6827
|
+
throw new Error(
|
|
6828
|
+
`CSV has no recognisable timestamp column. Looked for: ${TS_KEYS.join(", ")}. Found: ${headers.join(", ")}. Pass columns.ts to name it explicitly.`
|
|
6829
|
+
);
|
|
6830
|
+
}
|
|
6831
|
+
const qtyCols = [];
|
|
6832
|
+
for (const [key, candidates] of Object.entries(QTY_KEYS)) {
|
|
6833
|
+
const override = opts.columns?.qty?.[key];
|
|
6834
|
+
const i = override ? headers.indexOf(normalise(override)) : findColumn(headers, candidates);
|
|
6835
|
+
if (i !== -1) qtyCols.push([key, i]);
|
|
6836
|
+
}
|
|
6837
|
+
const records = [];
|
|
6838
|
+
const seenScopes = /* @__PURE__ */ new Set();
|
|
6839
|
+
for (const cells of body) {
|
|
6840
|
+
const tsRaw = cells[col.ts];
|
|
6841
|
+
const ts = tsRaw ? Date.parse(tsRaw) : Number.NaN;
|
|
6842
|
+
if (!Number.isFinite(ts)) continue;
|
|
6843
|
+
const qty = {};
|
|
6844
|
+
for (const [key, i] of qtyCols) qty[key] = toNumber(cells[i]);
|
|
6845
|
+
const model = col.model !== -1 ? cells[col.model] ?? null : null;
|
|
6846
|
+
const scopeLabelValue = col.scope !== -1 ? cells[col.scope] : void 0;
|
|
6847
|
+
const hash = scopeLabelValue ? await scopeHash(scopeLabelValue) : "csv-import";
|
|
6848
|
+
if (scopeLabelValue && !seenScopes.has(hash)) {
|
|
6849
|
+
seenScopes.add(hash);
|
|
6850
|
+
records.push({ type: "scope", scopeHash: hash, label: scopeLabelValue, provider });
|
|
6851
|
+
}
|
|
6852
|
+
const explicitCost = col.cost !== -1 ? toNumber(cells[col.cost]) : null;
|
|
6853
|
+
const event = {
|
|
6854
|
+
// hashing the whole row makes re-importing the same export idempotent
|
|
6855
|
+
id: `${provider}:${await hashRow(cells)}`,
|
|
6856
|
+
ts,
|
|
6857
|
+
provider,
|
|
6858
|
+
kind,
|
|
6859
|
+
sessionId: col.session !== -1 ? cells[col.session] ?? null : null,
|
|
6860
|
+
scopeHash: hash,
|
|
6861
|
+
unitLabel: model,
|
|
6862
|
+
qty,
|
|
6863
|
+
costUsd: explicitCost !== null && explicitCost !== 0 ? explicitCost : costOf(model, qty, prices),
|
|
6864
|
+
meta: {}
|
|
6865
|
+
};
|
|
6866
|
+
records.push({ type: "event", event });
|
|
6867
|
+
}
|
|
6868
|
+
return records;
|
|
6406
6869
|
}
|
|
6407
|
-
|
|
6870
|
+
|
|
6871
|
+
function allAdapters(opts = {}) {
|
|
6872
|
+
const prices = opts.prices;
|
|
6873
|
+
return [
|
|
6874
|
+
new ClaudeCodeAdapter({ prices }),
|
|
6875
|
+
new CursorAdapter({ prices }),
|
|
6876
|
+
new CodexAdapter({ prices })
|
|
6877
|
+
];
|
|
6878
|
+
}
|
|
6879
|
+
async function detectAdapters(opts = {}) {
|
|
6408
6880
|
const found = [];
|
|
6409
|
-
for (const adapter of allAdapters()) {
|
|
6881
|
+
for (const adapter of allAdapters(opts)) {
|
|
6410
6882
|
if (await adapter.detect()) found.push(adapter);
|
|
6411
6883
|
}
|
|
6412
6884
|
return found;
|
|
@@ -6415,7 +6887,8 @@ async function detectAdapters() {
|
|
|
6415
6887
|
const _tolCGru6ORo9RnI_NJIuE_VvAmdkQavU2Y9IpSCD4 = defineNitroPlugin((nitro) => {
|
|
6416
6888
|
if (process.env.NOMNOMTOKENS_NO_WATCH === "1") return;
|
|
6417
6889
|
const stops = [];
|
|
6418
|
-
|
|
6890
|
+
const { prices } = loadPriceTable();
|
|
6891
|
+
void detectAdapters({ prices }).then((adapters) => {
|
|
6419
6892
|
for (const adapter of adapters) {
|
|
6420
6893
|
if (!adapter.watch) continue;
|
|
6421
6894
|
stops.push(
|
|
@@ -6437,292 +6910,355 @@ const plugins = [
|
|
|
6437
6910
|
];
|
|
6438
6911
|
|
|
6439
6912
|
const assets = {
|
|
6913
|
+
"/_nuxt/4C_a23zt.js": {
|
|
6914
|
+
"type": "text/javascript; charset=utf-8",
|
|
6915
|
+
"etag": "\"16a2-Gdsy29q0zMrP+lLHFcGnZHiJbz4\"",
|
|
6916
|
+
"mtime": "2026-08-07T20:13:31.614Z",
|
|
6917
|
+
"size": 5794,
|
|
6918
|
+
"path": "../public/_nuxt/4C_a23zt.js"
|
|
6919
|
+
},
|
|
6920
|
+
"/_nuxt/B1jhn8zK.js": {
|
|
6921
|
+
"type": "text/javascript; charset=utf-8",
|
|
6922
|
+
"etag": "\"7e9-qGrGSSmgSzb+xKWSbHHfyGDKO2s\"",
|
|
6923
|
+
"mtime": "2026-08-07T20:13:31.614Z",
|
|
6924
|
+
"size": 2025,
|
|
6925
|
+
"path": "../public/_nuxt/B1jhn8zK.js"
|
|
6926
|
+
},
|
|
6440
6927
|
"/favicon.svg": {
|
|
6441
6928
|
"type": "image/svg+xml",
|
|
6442
6929
|
"etag": "\"263-juunZqrRwMD1/tfqspKdbqgLuek\"",
|
|
6443
|
-
"mtime": "2026-08-
|
|
6930
|
+
"mtime": "2026-08-07T20:13:31.619Z",
|
|
6444
6931
|
"size": 611,
|
|
6445
6932
|
"path": "../public/favicon.svg"
|
|
6446
6933
|
},
|
|
6447
|
-
"/_nuxt/
|
|
6934
|
+
"/_nuxt/BAfR3Wl32.js": {
|
|
6448
6935
|
"type": "text/javascript; charset=utf-8",
|
|
6449
|
-
"etag": "\"
|
|
6450
|
-
"mtime": "2026-08-
|
|
6451
|
-
"size":
|
|
6452
|
-
"path": "../public/_nuxt/
|
|
6936
|
+
"etag": "\"d71-2Q0jBWPkETEZr/VFEiejroUFCA0\"",
|
|
6937
|
+
"mtime": "2026-08-07T20:13:31.614Z",
|
|
6938
|
+
"size": 3441,
|
|
6939
|
+
"path": "../public/_nuxt/BAfR3Wl32.js"
|
|
6453
6940
|
},
|
|
6454
|
-
"/_nuxt/
|
|
6941
|
+
"/_nuxt/B2aHje2L.js": {
|
|
6455
6942
|
"type": "text/javascript; charset=utf-8",
|
|
6456
|
-
"etag": "\"
|
|
6457
|
-
"mtime": "2026-08-
|
|
6458
|
-
"size":
|
|
6459
|
-
"path": "../public/_nuxt/
|
|
6460
|
-
},
|
|
6461
|
-
"/_nuxt/B1O-ibEy.js": {
|
|
6462
|
-
"type": "text/javascript; charset=utf-8",
|
|
6463
|
-
"etag": "\"27a2a-1cN4KVJtW9Xo7AmS2oIznMsTcWs\"",
|
|
6464
|
-
"mtime": "2026-08-07T17:04:22.372Z",
|
|
6465
|
-
"size": 162346,
|
|
6466
|
-
"path": "../public/_nuxt/B1O-ibEy.js"
|
|
6943
|
+
"etag": "\"fa2-UgkB8XZUGrGw7XvxEcxYq9J/vvo\"",
|
|
6944
|
+
"mtime": "2026-08-07T20:13:31.614Z",
|
|
6945
|
+
"size": 4002,
|
|
6946
|
+
"path": "../public/_nuxt/B2aHje2L.js"
|
|
6467
6947
|
},
|
|
6468
|
-
"/_nuxt/
|
|
6948
|
+
"/_nuxt/BMSLzLlT.js": {
|
|
6469
6949
|
"type": "text/javascript; charset=utf-8",
|
|
6470
|
-
"etag": "\"
|
|
6471
|
-
"mtime": "2026-08-
|
|
6472
|
-
"size":
|
|
6473
|
-
"path": "../public/_nuxt/
|
|
6950
|
+
"etag": "\"1d50-ZBP+gIQegZzzPv/cFYg6FWxeHP8\"",
|
|
6951
|
+
"mtime": "2026-08-07T20:13:31.614Z",
|
|
6952
|
+
"size": 7504,
|
|
6953
|
+
"path": "../public/_nuxt/BMSLzLlT.js"
|
|
6474
6954
|
},
|
|
6475
|
-
"/_nuxt/
|
|
6955
|
+
"/_nuxt/BDNMzG2s2.js": {
|
|
6476
6956
|
"type": "text/javascript; charset=utf-8",
|
|
6477
6957
|
"etag": "\"54-MasMfSk/A98C3Gn9uIOxtFxkWNw\"",
|
|
6478
|
-
"mtime": "2026-08-
|
|
6958
|
+
"mtime": "2026-08-07T20:13:31.614Z",
|
|
6479
6959
|
"size": 84,
|
|
6480
|
-
"path": "../public/_nuxt/
|
|
6960
|
+
"path": "../public/_nuxt/BDNMzG2s2.js"
|
|
6481
6961
|
},
|
|
6482
|
-
"/_nuxt/
|
|
6962
|
+
"/_nuxt/BOKlFKrX.js": {
|
|
6483
6963
|
"type": "text/javascript; charset=utf-8",
|
|
6484
|
-
"etag": "\"
|
|
6485
|
-
"mtime": "2026-08-
|
|
6486
|
-
"size":
|
|
6487
|
-
"path": "../public/_nuxt/
|
|
6964
|
+
"etag": "\"2f9-mpAJAzDbm3lWDNE2Us/ynG6SplU\"",
|
|
6965
|
+
"mtime": "2026-08-07T20:13:31.614Z",
|
|
6966
|
+
"size": 761,
|
|
6967
|
+
"path": "../public/_nuxt/BOKlFKrX.js"
|
|
6488
6968
|
},
|
|
6489
|
-
"/_nuxt/
|
|
6969
|
+
"/_nuxt/Ba6z8j_4.js": {
|
|
6490
6970
|
"type": "text/javascript; charset=utf-8",
|
|
6491
|
-
"etag": "\"
|
|
6492
|
-
"mtime": "2026-08-
|
|
6493
|
-
"size":
|
|
6494
|
-
"path": "../public/_nuxt/
|
|
6971
|
+
"etag": "\"580-XaU3KnhVwIuj73p6gumS/zGKKFo\"",
|
|
6972
|
+
"mtime": "2026-08-07T20:13:31.614Z",
|
|
6973
|
+
"size": 1408,
|
|
6974
|
+
"path": "../public/_nuxt/Ba6z8j_4.js"
|
|
6495
6975
|
},
|
|
6496
|
-
"/_nuxt/
|
|
6976
|
+
"/_nuxt/Bag9D5rq.js": {
|
|
6497
6977
|
"type": "text/javascript; charset=utf-8",
|
|
6498
|
-
"etag": "\"
|
|
6499
|
-
"mtime": "2026-08-
|
|
6500
|
-
"size":
|
|
6501
|
-
"path": "../public/_nuxt/
|
|
6978
|
+
"etag": "\"27a2a-Q3/39nbR7m5qjPz9T2wtmzzeOf8\"",
|
|
6979
|
+
"mtime": "2026-08-07T20:13:31.614Z",
|
|
6980
|
+
"size": 162346,
|
|
6981
|
+
"path": "../public/_nuxt/Bag9D5rq.js"
|
|
6502
6982
|
},
|
|
6503
|
-
"/_nuxt/
|
|
6983
|
+
"/_nuxt/Bia8fJFj.js": {
|
|
6504
6984
|
"type": "text/javascript; charset=utf-8",
|
|
6505
|
-
"etag": "\"
|
|
6506
|
-
"mtime": "2026-08-
|
|
6507
|
-
"size":
|
|
6508
|
-
"path": "../public/_nuxt/
|
|
6985
|
+
"etag": "\"49e-cs/mViJSj2L2nQ5PEJMj29SJ4Zo\"",
|
|
6986
|
+
"mtime": "2026-08-07T20:13:31.614Z",
|
|
6987
|
+
"size": 1182,
|
|
6988
|
+
"path": "../public/_nuxt/Bia8fJFj.js"
|
|
6509
6989
|
},
|
|
6510
|
-
"/_nuxt/
|
|
6990
|
+
"/_nuxt/Bprokln-.js": {
|
|
6511
6991
|
"type": "text/javascript; charset=utf-8",
|
|
6512
|
-
"etag": "\"
|
|
6513
|
-
"mtime": "2026-08-
|
|
6514
|
-
"size":
|
|
6515
|
-
"path": "../public/_nuxt/
|
|
6992
|
+
"etag": "\"618-oypP50jwTlr4oE71O9fz+WNyiJ0\"",
|
|
6993
|
+
"mtime": "2026-08-07T20:13:31.614Z",
|
|
6994
|
+
"size": 1560,
|
|
6995
|
+
"path": "../public/_nuxt/Bprokln-.js"
|
|
6516
6996
|
},
|
|
6517
|
-
"/_nuxt/
|
|
6997
|
+
"/_nuxt/C9MiT_Wm.js": {
|
|
6518
6998
|
"type": "text/javascript; charset=utf-8",
|
|
6519
|
-
"etag": "\"
|
|
6520
|
-
"mtime": "2026-08-
|
|
6521
|
-
"size":
|
|
6522
|
-
"path": "../public/_nuxt/
|
|
6999
|
+
"etag": "\"b9bc-rXOdAMXkECl1vE2WM4YUQWAU8Zw\"",
|
|
7000
|
+
"mtime": "2026-08-07T20:13:31.615Z",
|
|
7001
|
+
"size": 47548,
|
|
7002
|
+
"path": "../public/_nuxt/C9MiT_Wm.js"
|
|
6523
7003
|
},
|
|
6524
|
-
"/_nuxt/
|
|
7004
|
+
"/_nuxt/CIHIOSzn.js": {
|
|
6525
7005
|
"type": "text/javascript; charset=utf-8",
|
|
6526
|
-
"etag": "\"
|
|
6527
|
-
"mtime": "2026-08-
|
|
6528
|
-
"size":
|
|
6529
|
-
"path": "../public/_nuxt/
|
|
7006
|
+
"etag": "\"1f00-HDIEoZ+eo9wBDoPnRWHyU9wWODM\"",
|
|
7007
|
+
"mtime": "2026-08-07T20:13:31.615Z",
|
|
7008
|
+
"size": 7936,
|
|
7009
|
+
"path": "../public/_nuxt/CIHIOSzn.js"
|
|
6530
7010
|
},
|
|
6531
|
-
"/_nuxt/
|
|
7011
|
+
"/_nuxt/CIKwfDBl.js": {
|
|
6532
7012
|
"type": "text/javascript; charset=utf-8",
|
|
6533
|
-
"etag": "\"
|
|
6534
|
-
"mtime": "2026-08-
|
|
6535
|
-
"size":
|
|
6536
|
-
"path": "../public/_nuxt/
|
|
7013
|
+
"etag": "\"7f0-wUsYxcgvf7ndY4zX+3rRY+iAN1w\"",
|
|
7014
|
+
"mtime": "2026-08-07T20:13:31.615Z",
|
|
7015
|
+
"size": 2032,
|
|
7016
|
+
"path": "../public/_nuxt/CIKwfDBl.js"
|
|
6537
7017
|
},
|
|
6538
|
-
"/_nuxt/
|
|
7018
|
+
"/_nuxt/COwSpxrx.js": {
|
|
6539
7019
|
"type": "text/javascript; charset=utf-8",
|
|
6540
|
-
"etag": "\"
|
|
6541
|
-
"mtime": "2026-08-
|
|
6542
|
-
"size":
|
|
6543
|
-
"path": "../public/_nuxt/
|
|
7020
|
+
"etag": "\"187-TcW/UYquWHNJBJSnbqbjRgokGkU\"",
|
|
7021
|
+
"mtime": "2026-08-07T20:13:31.615Z",
|
|
7022
|
+
"size": 391,
|
|
7023
|
+
"path": "../public/_nuxt/COwSpxrx.js"
|
|
6544
7024
|
},
|
|
6545
|
-
"/_nuxt/
|
|
7025
|
+
"/_nuxt/CZSbzIi-.js": {
|
|
6546
7026
|
"type": "text/javascript; charset=utf-8",
|
|
6547
|
-
"etag": "\"
|
|
6548
|
-
"mtime": "2026-08-
|
|
6549
|
-
"size":
|
|
6550
|
-
"path": "../public/_nuxt/
|
|
7027
|
+
"etag": "\"e5b-ivAZQIl89+55PFCmpn4ZVTeqlI8\"",
|
|
7028
|
+
"mtime": "2026-08-07T20:13:31.615Z",
|
|
7029
|
+
"size": 3675,
|
|
7030
|
+
"path": "../public/_nuxt/CZSbzIi-.js"
|
|
6551
7031
|
},
|
|
6552
|
-
"/_nuxt/
|
|
7032
|
+
"/_nuxt/CDzUujek.js": {
|
|
6553
7033
|
"type": "text/javascript; charset=utf-8",
|
|
6554
|
-
"etag": "\"
|
|
6555
|
-
"mtime": "2026-08-
|
|
6556
|
-
"size":
|
|
6557
|
-
"path": "../public/_nuxt/
|
|
7034
|
+
"etag": "\"d71b-/uLxwcfdeJjVK88AGXUIJhPI7mo\"",
|
|
7035
|
+
"mtime": "2026-08-07T20:13:31.615Z",
|
|
7036
|
+
"size": 55067,
|
|
7037
|
+
"path": "../public/_nuxt/CDzUujek.js"
|
|
6558
7038
|
},
|
|
6559
|
-
"/_nuxt/
|
|
7039
|
+
"/_nuxt/CfBMjq8x.js": {
|
|
6560
7040
|
"type": "text/javascript; charset=utf-8",
|
|
6561
|
-
"etag": "\"
|
|
6562
|
-
"mtime": "2026-08-
|
|
6563
|
-
"size":
|
|
6564
|
-
"path": "../public/_nuxt/
|
|
7041
|
+
"etag": "\"c5b-E7xZQ6J4MEdqhDJpzqfNW8Ck3bI\"",
|
|
7042
|
+
"mtime": "2026-08-07T20:13:31.615Z",
|
|
7043
|
+
"size": 3163,
|
|
7044
|
+
"path": "../public/_nuxt/CfBMjq8x.js"
|
|
6565
7045
|
},
|
|
6566
|
-
"/_nuxt/
|
|
7046
|
+
"/_nuxt/Ch3y3mGJ.js": {
|
|
6567
7047
|
"type": "text/javascript; charset=utf-8",
|
|
6568
|
-
"etag": "\"
|
|
6569
|
-
"mtime": "2026-08-
|
|
6570
|
-
"size":
|
|
6571
|
-
"path": "../public/_nuxt/
|
|
7048
|
+
"etag": "\"89-m1vODV+ILC80Lvb9yLA9lJez8Yg\"",
|
|
7049
|
+
"mtime": "2026-08-07T20:13:31.615Z",
|
|
7050
|
+
"size": 137,
|
|
7051
|
+
"path": "../public/_nuxt/Ch3y3mGJ.js"
|
|
6572
7052
|
},
|
|
6573
|
-
"/_nuxt/
|
|
7053
|
+
"/_nuxt/CkRZsevx.js": {
|
|
6574
7054
|
"type": "text/javascript; charset=utf-8",
|
|
6575
|
-
"etag": "\"
|
|
6576
|
-
"mtime": "2026-08-
|
|
6577
|
-
"size":
|
|
6578
|
-
"path": "../public/_nuxt/
|
|
7055
|
+
"etag": "\"1bba-38HUFiDLkDdlz+/v9Pw+R//K39o\"",
|
|
7056
|
+
"mtime": "2026-08-07T20:13:31.615Z",
|
|
7057
|
+
"size": 7098,
|
|
7058
|
+
"path": "../public/_nuxt/CkRZsevx.js"
|
|
6579
7059
|
},
|
|
6580
|
-
"/_nuxt/
|
|
7060
|
+
"/_nuxt/C51OzH6V.js": {
|
|
6581
7061
|
"type": "text/javascript; charset=utf-8",
|
|
6582
|
-
"etag": "\"
|
|
6583
|
-
"mtime": "2026-08-
|
|
6584
|
-
"size":
|
|
6585
|
-
"path": "../public/_nuxt/
|
|
7062
|
+
"etag": "\"14e-2XHOwYK6yKvv3u/CtAwyVxzMscg\"",
|
|
7063
|
+
"mtime": "2026-08-07T20:13:31.615Z",
|
|
7064
|
+
"size": 334,
|
|
7065
|
+
"path": "../public/_nuxt/C51OzH6V.js"
|
|
6586
7066
|
},
|
|
6587
|
-
"/_nuxt/
|
|
7067
|
+
"/_nuxt/Cq1Sq3Go.js": {
|
|
6588
7068
|
"type": "text/javascript; charset=utf-8",
|
|
6589
|
-
"etag": "\"
|
|
6590
|
-
"mtime": "2026-08-
|
|
6591
|
-
"size":
|
|
6592
|
-
"path": "../public/_nuxt/
|
|
7069
|
+
"etag": "\"8e3-6Jz0mfjFUwf4/vztcAUFCCQS17k\"",
|
|
7070
|
+
"mtime": "2026-08-07T20:13:31.615Z",
|
|
7071
|
+
"size": 2275,
|
|
7072
|
+
"path": "../public/_nuxt/Cq1Sq3Go.js"
|
|
6593
7073
|
},
|
|
6594
|
-
"/_nuxt/
|
|
7074
|
+
"/_nuxt/CsN_oUfs.js": {
|
|
6595
7075
|
"type": "text/javascript; charset=utf-8",
|
|
6596
|
-
"etag": "\"2416-
|
|
6597
|
-
"mtime": "2026-08-
|
|
7076
|
+
"etag": "\"2416-KWow0zCR3ozDXJgGJaubEXJpIww\"",
|
|
7077
|
+
"mtime": "2026-08-07T20:13:31.615Z",
|
|
6598
7078
|
"size": 9238,
|
|
6599
|
-
"path": "../public/_nuxt/
|
|
7079
|
+
"path": "../public/_nuxt/CsN_oUfs.js"
|
|
6600
7080
|
},
|
|
6601
|
-
"/_nuxt/
|
|
7081
|
+
"/_nuxt/CvIugsJe2.js": {
|
|
6602
7082
|
"type": "text/javascript; charset=utf-8",
|
|
6603
|
-
"etag": "\"
|
|
6604
|
-
"mtime": "2026-08-
|
|
6605
|
-
"size":
|
|
6606
|
-
"path": "../public/_nuxt/
|
|
7083
|
+
"etag": "\"12d0-Fzh8ftK2kBd6YkC5S0SrKTbkfE8\"",
|
|
7084
|
+
"mtime": "2026-08-07T20:13:31.615Z",
|
|
7085
|
+
"size": 4816,
|
|
7086
|
+
"path": "../public/_nuxt/CvIugsJe2.js"
|
|
6607
7087
|
},
|
|
6608
|
-
"/_nuxt/
|
|
7088
|
+
"/_nuxt/D4C6J8YV.js": {
|
|
6609
7089
|
"type": "text/javascript; charset=utf-8",
|
|
6610
|
-
"etag": "\"
|
|
6611
|
-
"mtime": "2026-08-
|
|
6612
|
-
"size":
|
|
6613
|
-
"path": "../public/_nuxt/
|
|
7090
|
+
"etag": "\"824-/8gRX19zb6EmVkCWzsl0xT/8K10\"",
|
|
7091
|
+
"mtime": "2026-08-07T20:13:31.615Z",
|
|
7092
|
+
"size": 2084,
|
|
7093
|
+
"path": "../public/_nuxt/D4C6J8YV.js"
|
|
6614
7094
|
},
|
|
6615
|
-
"/_nuxt/
|
|
7095
|
+
"/_nuxt/D49wVVwm2.js": {
|
|
6616
7096
|
"type": "text/javascript; charset=utf-8",
|
|
6617
|
-
"etag": "\"
|
|
6618
|
-
"mtime": "2026-08-
|
|
6619
|
-
"size":
|
|
6620
|
-
"path": "../public/_nuxt/
|
|
7097
|
+
"etag": "\"ece-0kq3eXx5luZospE2DGG/0xV9uBs\"",
|
|
7098
|
+
"mtime": "2026-08-07T20:13:31.615Z",
|
|
7099
|
+
"size": 3790,
|
|
7100
|
+
"path": "../public/_nuxt/D49wVVwm2.js"
|
|
6621
7101
|
},
|
|
6622
|
-
"/_nuxt/
|
|
7102
|
+
"/_nuxt/D7Ph0tZD.js": {
|
|
6623
7103
|
"type": "text/javascript; charset=utf-8",
|
|
6624
|
-
"etag": "\"
|
|
6625
|
-
"mtime": "2026-08-
|
|
7104
|
+
"etag": "\"21e-I+1AEB4oYBPoNJ6rI2apwo7wC0k\"",
|
|
7105
|
+
"mtime": "2026-08-07T20:13:31.615Z",
|
|
7106
|
+
"size": 542,
|
|
7107
|
+
"path": "../public/_nuxt/D7Ph0tZD.js"
|
|
7108
|
+
},
|
|
7109
|
+
"/_nuxt/D9Mxq5ER.js": {
|
|
7110
|
+
"type": "text/javascript; charset=utf-8",
|
|
7111
|
+
"etag": "\"540-8Rbl5uPJu7ZeuYT0kyGqXUZrHEk\"",
|
|
7112
|
+
"mtime": "2026-08-07T20:13:31.615Z",
|
|
7113
|
+
"size": 1344,
|
|
7114
|
+
"path": "../public/_nuxt/D9Mxq5ER.js"
|
|
7115
|
+
},
|
|
7116
|
+
"/_nuxt/D9j6aFUy.js": {
|
|
7117
|
+
"type": "text/javascript; charset=utf-8",
|
|
7118
|
+
"etag": "\"7ed-tzlB7uAWjEwAhWyWR8wPZa9tXxo\"",
|
|
7119
|
+
"mtime": "2026-08-07T20:13:31.616Z",
|
|
6626
7120
|
"size": 2029,
|
|
6627
|
-
"path": "../public/_nuxt/
|
|
7121
|
+
"path": "../public/_nuxt/D9j6aFUy.js"
|
|
6628
7122
|
},
|
|
6629
|
-
"/_nuxt/
|
|
7123
|
+
"/_nuxt/DMgad8mU.js": {
|
|
6630
7124
|
"type": "text/javascript; charset=utf-8",
|
|
6631
|
-
"etag": "\"
|
|
6632
|
-
"mtime": "2026-08-
|
|
6633
|
-
"size":
|
|
6634
|
-
"path": "../public/_nuxt/
|
|
7125
|
+
"etag": "\"18ef-NHuAdslmwNckjjVzqI1N9Ak++g0\"",
|
|
7126
|
+
"mtime": "2026-08-07T20:13:31.616Z",
|
|
7127
|
+
"size": 6383,
|
|
7128
|
+
"path": "../public/_nuxt/DMgad8mU.js"
|
|
6635
7129
|
},
|
|
6636
|
-
"/_nuxt/
|
|
7130
|
+
"/_nuxt/DPnm6zS2.js": {
|
|
6637
7131
|
"type": "text/javascript; charset=utf-8",
|
|
6638
|
-
"etag": "\"
|
|
6639
|
-
"mtime": "2026-08-
|
|
6640
|
-
"size":
|
|
6641
|
-
"path": "../public/_nuxt/
|
|
7132
|
+
"etag": "\"1370-EmKYXWKDi46qLnX3h2uYemInbhY\"",
|
|
7133
|
+
"mtime": "2026-08-07T20:13:31.616Z",
|
|
7134
|
+
"size": 4976,
|
|
7135
|
+
"path": "../public/_nuxt/DPnm6zS2.js"
|
|
6642
7136
|
},
|
|
6643
|
-
"/_nuxt/
|
|
7137
|
+
"/_nuxt/DQEnwY-5.js": {
|
|
6644
7138
|
"type": "text/javascript; charset=utf-8",
|
|
6645
|
-
"etag": "\"
|
|
6646
|
-
"mtime": "2026-08-
|
|
6647
|
-
"size":
|
|
6648
|
-
"path": "../public/_nuxt/
|
|
7139
|
+
"etag": "\"8d26-4y5vziLk1+UPgTkMOV2mi5+VVCY\"",
|
|
7140
|
+
"mtime": "2026-08-07T20:13:31.616Z",
|
|
7141
|
+
"size": 36134,
|
|
7142
|
+
"path": "../public/_nuxt/DQEnwY-5.js"
|
|
6649
7143
|
},
|
|
6650
|
-
"/_nuxt/
|
|
6651
|
-
"type": "text/
|
|
6652
|
-
"etag": "\"
|
|
6653
|
-
"mtime": "2026-08-
|
|
6654
|
-
"size":
|
|
6655
|
-
"path": "../public/_nuxt/
|
|
7144
|
+
"/_nuxt/Dh50_bkx.js": {
|
|
7145
|
+
"type": "text/javascript; charset=utf-8",
|
|
7146
|
+
"etag": "\"4a5-akgzK9EAYBoW3swdJpgoKxckqi4\"",
|
|
7147
|
+
"mtime": "2026-08-07T20:13:31.616Z",
|
|
7148
|
+
"size": 1189,
|
|
7149
|
+
"path": "../public/_nuxt/Dh50_bkx.js"
|
|
7150
|
+
},
|
|
7151
|
+
"/_nuxt/DhJW7zb9.js": {
|
|
7152
|
+
"type": "text/javascript; charset=utf-8",
|
|
7153
|
+
"etag": "\"76a-YTgbHgkOKVrfM+XNfNcTeRAVYMc\"",
|
|
7154
|
+
"mtime": "2026-08-07T20:13:31.616Z",
|
|
7155
|
+
"size": 1898,
|
|
7156
|
+
"path": "../public/_nuxt/DhJW7zb9.js"
|
|
7157
|
+
},
|
|
7158
|
+
"/_nuxt/DnTwjl0_2.js": {
|
|
7159
|
+
"type": "text/javascript; charset=utf-8",
|
|
7160
|
+
"etag": "\"41f8-tJbOq6RAI34v3Tqdj28vXtIw3SI\"",
|
|
7161
|
+
"mtime": "2026-08-07T20:13:31.616Z",
|
|
7162
|
+
"size": 16888,
|
|
7163
|
+
"path": "../public/_nuxt/DnTwjl0_2.js"
|
|
7164
|
+
},
|
|
7165
|
+
"/_nuxt/DsH8sTHf.js": {
|
|
7166
|
+
"type": "text/javascript; charset=utf-8",
|
|
7167
|
+
"etag": "\"6f-p/ll3FTpWtsKgPbN/KytJQO35yM\"",
|
|
7168
|
+
"mtime": "2026-08-07T20:13:31.616Z",
|
|
7169
|
+
"size": 111,
|
|
7170
|
+
"path": "../public/_nuxt/DsH8sTHf.js"
|
|
7171
|
+
},
|
|
7172
|
+
"/_nuxt/Dy30RUCD2.js": {
|
|
7173
|
+
"type": "text/javascript; charset=utf-8",
|
|
7174
|
+
"etag": "\"b9c-EI1a61YBvNEPTWBPRlFdCdoi43E\"",
|
|
7175
|
+
"mtime": "2026-08-07T20:13:31.616Z",
|
|
7176
|
+
"size": 2972,
|
|
7177
|
+
"path": "../public/_nuxt/Dy30RUCD2.js"
|
|
7178
|
+
},
|
|
7179
|
+
"/_nuxt/OU1MVgXQ.js": {
|
|
7180
|
+
"type": "text/javascript; charset=utf-8",
|
|
7181
|
+
"etag": "\"73f3-wvRm1X8oKEkjhkUAvk5FKwdVxrc\"",
|
|
7182
|
+
"mtime": "2026-08-07T20:13:31.616Z",
|
|
7183
|
+
"size": 29683,
|
|
7184
|
+
"path": "../public/_nuxt/OU1MVgXQ.js"
|
|
7185
|
+
},
|
|
7186
|
+
"/_nuxt/W3KL_OjU.js": {
|
|
7187
|
+
"type": "text/javascript; charset=utf-8",
|
|
7188
|
+
"etag": "\"49a-IlEKB1HUCJDHxsQ/6XObVS2oIlk\"",
|
|
7189
|
+
"mtime": "2026-08-07T20:13:31.616Z",
|
|
7190
|
+
"size": 1178,
|
|
7191
|
+
"path": "../public/_nuxt/W3KL_OjU.js"
|
|
7192
|
+
},
|
|
7193
|
+
"/_nuxt/ZjfInHdu.js": {
|
|
7194
|
+
"type": "text/javascript; charset=utf-8",
|
|
7195
|
+
"etag": "\"1546d-/nqDPAOkHqo8ZmcBoKCMMweknpg\"",
|
|
7196
|
+
"mtime": "2026-08-07T20:13:31.616Z",
|
|
7197
|
+
"size": 87149,
|
|
7198
|
+
"path": "../public/_nuxt/ZjfInHdu.js"
|
|
7199
|
+
},
|
|
7200
|
+
"/_nuxt/cbxnBwm6.js": {
|
|
7201
|
+
"type": "text/javascript; charset=utf-8",
|
|
7202
|
+
"etag": "\"55d3-4d7PrifkW021IgPIcN8fTyaa5Cs\"",
|
|
7203
|
+
"mtime": "2026-08-07T20:13:31.616Z",
|
|
7204
|
+
"size": 21971,
|
|
7205
|
+
"path": "../public/_nuxt/cbxnBwm6.js"
|
|
6656
7206
|
},
|
|
6657
7207
|
"/_nuxt/error-404.DQm6ppno.css": {
|
|
6658
7208
|
"type": "text/css; charset=utf-8",
|
|
6659
7209
|
"etag": "\"97d-FG4/ymMxDV3N4Wib4jaedpcpUas\"",
|
|
6660
|
-
"mtime": "2026-08-
|
|
7210
|
+
"mtime": "2026-08-07T20:13:31.616Z",
|
|
6661
7211
|
"size": 2429,
|
|
6662
7212
|
"path": "../public/_nuxt/error-404.DQm6ppno.css"
|
|
6663
7213
|
},
|
|
6664
7214
|
"/_nuxt/error-500.hK5lsCWo.css": {
|
|
6665
7215
|
"type": "text/css; charset=utf-8",
|
|
6666
7216
|
"etag": "\"772-paB/udv1S+kQN9EogSBT92Rxqtk\"",
|
|
6667
|
-
"mtime": "2026-08-
|
|
7217
|
+
"mtime": "2026-08-07T20:13:31.616Z",
|
|
6668
7218
|
"size": 1906,
|
|
6669
7219
|
"path": "../public/_nuxt/error-500.hK5lsCWo.css"
|
|
6670
7220
|
},
|
|
6671
|
-
"/_nuxt/
|
|
6672
|
-
"type": "text/
|
|
6673
|
-
"etag": "\"
|
|
6674
|
-
"mtime": "2026-08-
|
|
6675
|
-
"size":
|
|
6676
|
-
"path": "../public/_nuxt/
|
|
7221
|
+
"/_nuxt/entry.MbqNBIeH.css": {
|
|
7222
|
+
"type": "text/css; charset=utf-8",
|
|
7223
|
+
"etag": "\"a0d4-jgA2Xq4EwVzzCQmkAQcCfhQbYpE\"",
|
|
7224
|
+
"mtime": "2026-08-07T20:13:31.616Z",
|
|
7225
|
+
"size": 41172,
|
|
7226
|
+
"path": "../public/_nuxt/entry.MbqNBIeH.css"
|
|
6677
7227
|
},
|
|
6678
7228
|
"/_nuxt/limits.DDC9tNkw.css": {
|
|
6679
7229
|
"type": "text/css; charset=utf-8",
|
|
6680
7230
|
"etag": "\"1c4-oC4V27VSMJdZ8WFkX5ufVEpiO4c\"",
|
|
6681
|
-
"mtime": "2026-08-
|
|
7231
|
+
"mtime": "2026-08-07T20:13:31.616Z",
|
|
6682
7232
|
"size": 452,
|
|
6683
7233
|
"path": "../public/_nuxt/limits.DDC9tNkw.css"
|
|
6684
7234
|
},
|
|
6685
|
-
"/_nuxt/
|
|
7235
|
+
"/_nuxt/m3-Vaz25.js": {
|
|
6686
7236
|
"type": "text/javascript; charset=utf-8",
|
|
6687
|
-
"etag": "\"
|
|
6688
|
-
"mtime": "2026-08-
|
|
6689
|
-
"size":
|
|
6690
|
-
"path": "../public/_nuxt/
|
|
6691
|
-
},
|
|
6692
|
-
"/_nuxt/oT-x2NdZ.js": {
|
|
6693
|
-
"type": "text/javascript; charset=utf-8",
|
|
6694
|
-
"etag": "\"2f9-clgl3ZTqADgH5udOX6JOOMoYtRc\"",
|
|
6695
|
-
"mtime": "2026-08-07T17:04:22.374Z",
|
|
6696
|
-
"size": 761,
|
|
6697
|
-
"path": "../public/_nuxt/oT-x2NdZ.js"
|
|
7237
|
+
"etag": "\"187-70j459K4ZB4jJ3GKFrPIRoXhZnk\"",
|
|
7238
|
+
"mtime": "2026-08-07T20:13:31.616Z",
|
|
7239
|
+
"size": 391,
|
|
7240
|
+
"path": "../public/_nuxt/m3-Vaz25.js"
|
|
6698
7241
|
},
|
|
6699
7242
|
"/_nuxt/timeline.7J8JHjUo.css": {
|
|
6700
7243
|
"type": "text/css; charset=utf-8",
|
|
6701
7244
|
"etag": "\"1e7-Fq3WEG7R6cHFxT4blW68gHJifao\"",
|
|
6702
|
-
"mtime": "2026-08-
|
|
7245
|
+
"mtime": "2026-08-07T20:13:31.616Z",
|
|
6703
7246
|
"size": 487,
|
|
6704
7247
|
"path": "../public/_nuxt/timeline.7J8JHjUo.css"
|
|
6705
7248
|
},
|
|
6706
|
-
"/_nuxt/tqUqm2f-.js": {
|
|
6707
|
-
"type": "text/javascript; charset=utf-8",
|
|
6708
|
-
"etag": "\"618-18lRDTjo3N4WMU9dLUOhhqnLj+4\"",
|
|
6709
|
-
"mtime": "2026-08-07T17:04:22.374Z",
|
|
6710
|
-
"size": 1560,
|
|
6711
|
-
"path": "../public/_nuxt/tqUqm2f-.js"
|
|
6712
|
-
},
|
|
6713
7249
|
"/_nuxt/builds/latest.json": {
|
|
6714
7250
|
"type": "application/json",
|
|
6715
|
-
"etag": "\"47-
|
|
6716
|
-
"mtime": "2026-08-
|
|
7251
|
+
"etag": "\"47-sC8RqrOY7M0DC9j4t5gjDejZHAU\"",
|
|
7252
|
+
"mtime": "2026-08-07T20:13:31.594Z",
|
|
6717
7253
|
"size": 71,
|
|
6718
7254
|
"path": "../public/_nuxt/builds/latest.json"
|
|
6719
7255
|
},
|
|
6720
|
-
"/_nuxt/builds/meta/
|
|
7256
|
+
"/_nuxt/builds/meta/e90c8a2d-9e50-4b58-8019-6b1bf4c8fc6d.json": {
|
|
6721
7257
|
"type": "application/json",
|
|
6722
|
-
"etag": "\"58-
|
|
6723
|
-
"mtime": "2026-08-
|
|
7258
|
+
"etag": "\"58-B95DJ55bzpv5CbEtXtcsLFDTOtk\"",
|
|
7259
|
+
"mtime": "2026-08-07T20:13:31.589Z",
|
|
6724
7260
|
"size": 88,
|
|
6725
|
-
"path": "../public/_nuxt/builds/meta/
|
|
7261
|
+
"path": "../public/_nuxt/builds/meta/e90c8a2d-9e50-4b58-8019-6b1bf4c8fc6d.json"
|
|
6726
7262
|
}
|
|
6727
7263
|
};
|
|
6728
7264
|
|
|
@@ -6935,7 +7471,11 @@ const _UMv9ev = eventHandler((event) => {
|
|
|
6935
7471
|
|
|
6936
7472
|
const _SxA8c9 = defineEventHandler(() => {});
|
|
6937
7473
|
|
|
7474
|
+
const _lazy_PrjIMf = () => import('../routes/api/alerts.get.mjs');
|
|
7475
|
+
const _lazy_JZETJi = () => import('../routes/api/alerts.put.mjs');
|
|
6938
7476
|
const _lazy_63GEIj = () => import('../routes/api/events/stream.get.mjs');
|
|
7477
|
+
const _lazy_WdtCZI = () => import('../routes/api/export.get.mjs');
|
|
7478
|
+
const _lazy_1N10nf = () => import('../routes/api/import/csv.post.mjs');
|
|
6939
7479
|
const _lazy_h2UJK_ = () => import('../routes/api/ingest.post.mjs');
|
|
6940
7480
|
const _lazy_IWmWUQ = () => import('../routes/api/meta.get.mjs');
|
|
6941
7481
|
const _lazy_Wbkntj = () => import('../routes/api/stats/heatmap.get.mjs');
|
|
@@ -6950,7 +7490,11 @@ const _lazy_5OiMq8 = () => import('../routes/renderer.mjs').then(function (n) {
|
|
|
6950
7490
|
|
|
6951
7491
|
const handlers = [
|
|
6952
7492
|
{ route: '', handler: _UMv9ev, lazy: false, middleware: true, method: undefined },
|
|
7493
|
+
{ route: '/api/alerts', handler: _lazy_PrjIMf, lazy: true, middleware: false, method: "get" },
|
|
7494
|
+
{ route: '/api/alerts', handler: _lazy_JZETJi, lazy: true, middleware: false, method: "put" },
|
|
6953
7495
|
{ route: '/api/events/stream', handler: _lazy_63GEIj, lazy: true, middleware: false, method: "get" },
|
|
7496
|
+
{ route: '/api/export', handler: _lazy_WdtCZI, lazy: true, middleware: false, method: "get" },
|
|
7497
|
+
{ route: '/api/import/csv', handler: _lazy_1N10nf, lazy: true, middleware: false, method: "post" },
|
|
6954
7498
|
{ route: '/api/ingest', handler: _lazy_h2UJK_, lazy: true, middleware: false, method: "post" },
|
|
6955
7499
|
{ route: '/api/meta', handler: _lazy_IWmWUQ, lazy: true, middleware: false, method: "get" },
|
|
6956
7500
|
{ route: '/api/stats/heatmap', handler: _lazy_Wbkntj, lazy: true, middleware: false, method: "get" },
|
|
@@ -7418,5 +7962,5 @@ trapUnhandledNodeErrors();
|
|
|
7418
7962
|
setupGracefulShutdown(listener, nitroApp);
|
|
7419
7963
|
const nodeServer = {};
|
|
7420
7964
|
|
|
7421
|
-
export { $fetch as $,
|
|
7965
|
+
export { $fetch as $, currentWindowSnapshots as A, moodFor as B, costPerKLines as C, cacheHitRate as D, getRouterParam as E, bucketStart as F, useRuntimeConfig as G, encodePath as H, joinRelativeURL as I, defineRenderHandler as J, destr as K, getRouteRules as L, relative as M, joinURL as N, getResponseStatusText as O, getResponseStatus as P, useNitroApp as Q, defu as R, parseURL as S, decodePath as T, withQuery as U, hasProtocol as V, isScriptProtocol as W, sanitizeStatusCode as X, parseQuery as Y, withTrailingSlash as Z, withoutTrailingSlash as _, defaultAlertsPath as a, nodeServer as a0, createEventStream as b, checkAlerts as c, defineEventHandler as d, buildFrame as e, subscribe as f, getQuery as g, formatExportJson as h, formatExportCsv as i, setHeader as j, getHeader as k, loadAlertsConfig as l, readMultipartFormData as m, createError$1 as n, readRawBody as o, parseAlertsConfig as p, queries as q, readBody as r, saveAlertsConfig as s, loadPriceTable as t, importCsv as u, repo as v, notifyIngest as w, parseStatusline as x, store as y, forecastLimit as z };
|
|
7422
7966
|
//# sourceMappingURL=nitro.mjs.map
|