Files
Jammy 52636c91ae
Some checks failed
CI / main (push) Has been cancelled
CI / release-e2e (push) Has been cancelled
Track bundled vendor runtime sources
2026-07-07 10:05:50 +08:00

75 lines
1.8 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 主进程异常上报HTTP Beacon
* 仅在 isPackaged非开发模式下上报批量异步发送。
*/
import https from "node:https";
import { isPackaged, platformUUID } from "../../lib/env";
import { AppConfig } from "../../../src/config";
declare const __BUILD_ID__: string;
const BEACON_URL = "https://g.tecmz.com/grow/load.gif";
const BEACON_APP = "aigcpanel";
const sessionId = `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
const buildId = typeof __BUILD_ID__ !== "undefined" ? __BUILD_ID__ : "unknown";
interface BeaconEvent {
et: "error";
path: string;
did: string;
sid: string;
ts: number;
type: string;
bid: string;
props: { msg: string; stack?: string };
}
let pending: BeaconEvent[] = [];
let timer: ReturnType<typeof setTimeout> | null = null;
let _did: string | null = null;
const getDid = (): string => {
if (_did) return _did;
try {
_did = platformUUID() || "unknown";
} catch {
_did = "unknown";
}
return _did;
};
const flush = () => {
if (!pending.length) return;
const events = pending.splice(0);
try {
const encoded = encodeURIComponent(
Buffer.from(JSON.stringify(events)).toString("base64"),
);
const url = `${BEACON_URL}?app=${BEACON_APP}&data=${encoded}`;
https.get(url).on("error", () => {});
} catch {}
};
const schedule = () => {
if (timer) return;
timer = setTimeout(() => {
timer = null;
flush();
}, 3000);
};
export const reportError = (msg: string, stack?: string, path = "/main") => {
if (!isPackaged) return;
pending.push({
et: "error",
path,
did: getDid(),
sid: sessionId,
ts: Date.now(),
type: `app-${AppConfig.version}`,
bid: buildId,
props: { msg, stack },
});
schedule();
};