openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
28 lines (27 loc) • 1.3 kB
JavaScript
//#region src/gateway/control-plane-audit.ts
function normalizePart(value, fallback) {
if (typeof value !== "string") return fallback;
const normalized = value.trim();
return normalized.length > 0 ? normalized : fallback;
}
/** Extracts audit identity from a possibly missing or partially connected client. */
function resolveControlPlaneActor(client) {
return {
actor: normalizePart(client?.connect?.client?.id, "unknown-actor"),
deviceId: normalizePart(client?.connect?.device?.id, "unknown-device"),
clientIp: normalizePart(client?.clientIp, "unknown-ip"),
connId: normalizePart(client?.connId, "unknown-conn")
};
}
/** Formats actor identity as compact key/value text for structured gateway logs. */
function formatControlPlaneActor(actor) {
return `actor=${actor.actor} device=${actor.deviceId} ip=${actor.clientIp} conn=${actor.connId}`;
}
/** Summarizes changed config/state paths without letting audit logs grow unbounded. */
function summarizeChangedPaths(paths, maxPaths = 8) {
if (paths.length === 0) return "<none>";
if (paths.length <= maxPaths) return paths.join(",");
return `${paths.slice(0, maxPaths).join(",")},+${paths.length - maxPaths} more`;
}
//#endregion
export { resolveControlPlaneActor as n, summarizeChangedPaths as r, formatControlPlaneActor as t };