import { localGet } from "./api.js";
import { recentErrors } from "./errorLog.js";
export async function collectDiagnostics() {
const [buildInfo, feInfo] = await Promise.allSettled([
localGet("/api/build-info"),
localGet("/static/build-info.json"),
]);
return {
timestamp: new Date().toISOString(),
appVersion: settledValue(buildInfo)?.version ?? null,
serverBuildHash: settledValue(buildInfo)?.build_hash ?? null,
spaBundleHash: settledValue(feInfo)?.hash ?? null,
route: location.hash || location.pathname,
...terminalTarget(),
userAgent: navigator.userAgent,
recentErrors: recentErrors(),
};
}
function terminalTarget() {
const m = /^#\/s\/(?:([^/]+)\/)?([^/]+)$/.exec(location.hash);
if (!m) return { node: null, session: null };
return {
node: m[1] ? decodeURIComponent(m[1]) : null,
session: decodeURIComponent(m[2]),
};
}
function settledValue(settled) {
return settled.status === "fulfilled" ? settled.value : null;
}