type InstanceIdentity = { serverId: number; routerId: string | null } export function deriveOspfRouterIdentity(instances: InstanceIdentity[]) { const devices = new Map; unknown: boolean }>() for(const instance of instances) { const id=String(instance.serverId), value=instance.routerId?.trim() const entry=devices.get(id) ?? {ids:new Set(),unknown:false} const parts=value?.split(".") if(!value || value === "0.0.0.0" || !parts || parts.length!==4 || parts.some(part=>!/^\d{1,3}$/.test(part) || Number(part)>255)) entry.unknown=true else entry.ids.add(value) devices.set(id,entry) } const routerIds: Record = {} for(const [device,entry] of devices) if(!entry.unknown && entry.ids.size===1)routerIds[device]=[...entry.ids][0] const reverse = new Map() for(const [device,id] of Object.entries(routerIds)) reverse.set(id,reverse.has(id) && reverse.get(id)!==device ? null : device) const serverByRouterId: Record = {} for(const [id,device] of reverse) if(device!==null)serverByRouterId[id]=device return {routerIds,serverByRouterId} }