fix(presence): stabilize instance identity

This commit is contained in:
Peter Steinberger
2025-12-12 16:47:07 +00:00
parent 88936b6216
commit debcf19199
7 changed files with 93 additions and 12 deletions

View File

@@ -16,6 +16,13 @@ const entries = new Map<string, SystemPresence>();
const TTL_MS = 5 * 60 * 1000; // 5 minutes
const MAX_ENTRIES = 200;
function normalizePresenceKey(key: string | undefined): string | undefined {
if (!key) return undefined;
const trimmed = key.trim();
if (!trimmed) return undefined;
return trimmed.toLowerCase();
}
function resolvePrimaryIPv4(): string | undefined {
const nets = os.networkInterfaces();
const prefer = ["en0", "eth0"];
@@ -116,9 +123,9 @@ export function updateSystemPresence(payload: SystemPresencePayload) {
ensureSelfPresence();
const parsed = parsePresence(payload.text);
const key =
payload.instanceId?.toLowerCase() ||
parsed.instanceId?.toLowerCase() ||
parsed.host?.toLowerCase() ||
normalizePresenceKey(payload.instanceId) ||
normalizePresenceKey(parsed.instanceId) ||
normalizePresenceKey(parsed.host) ||
parsed.ip ||
parsed.text.slice(0, 64) ||
os.hostname().toLowerCase();
@@ -144,7 +151,9 @@ export function updateSystemPresence(payload: SystemPresencePayload) {
export function upsertPresence(key: string, presence: Partial<SystemPresence>) {
ensureSelfPresence();
const existing = entries.get(key) ?? ({} as SystemPresence);
const normalizedKey =
normalizePresenceKey(key) ?? os.hostname().toLowerCase();
const existing = entries.get(normalizedKey) ?? ({} as SystemPresence);
const merged: SystemPresence = {
...existing,
...presence,
@@ -156,7 +165,7 @@ export function upsertPresence(key: string, presence: Partial<SystemPresence>) {
presence.mode ?? existing.mode ?? "unknown"
}`,
};
entries.set(key, merged);
entries.set(normalizedKey, merged);
}
export function listSystemPresence(): SystemPresence[] {