fix(dashboard): show enriched network details
CI / validate (push) Successful in 5m39s
Release / release (push) Successful in 7m15s

This commit is contained in:
dmg
2026-08-02 08:05:57 -04:00
parent aa0b757814
commit 24808b0f8c
12 changed files with 106 additions and 14 deletions
+33
View File
@@ -6,6 +6,17 @@ function objectValue(value: unknown): UnknownMap | null {
: null;
}
function stringValue(value: unknown) {
return typeof value === "string" && value.trim() ? value.trim() : null;
}
function proxyValue(value: unknown) {
if (typeof value === "boolean") return value;
if (typeof value === "string" && value.toLowerCase() === "yes") return true;
if (typeof value === "string" && value.toLowerCase() === "no") return false;
return null;
}
function coordinate(value: unknown) {
if (typeof value === "number" && Number.isFinite(value)) return value;
if (typeof value === "string" && value.trim() && Number.isFinite(Number(value))) return Number(value);
@@ -18,6 +29,28 @@ export interface ParsedUserLocation {
label: string;
}
export interface ParsedUserNetwork {
asn: string | null;
provider: string | null;
connectionType: string | null;
proxy: boolean | null;
}
export function parseUserNetwork(value: unknown): ParsedUserNetwork {
const intelligence = objectValue(value);
const network = objectValue(intelligence?.network);
const providerResponse = objectValue(intelligence?.rawResponse);
const legacyDetails = Object.values(providerResponse ?? {})
.map(objectValue)
.find((details) => details && ("type" in details || "proxy" in details));
return {
asn: stringValue(network?.asn),
provider: stringValue(network?.provider),
connectionType: stringValue(network?.connectionType) ?? stringValue(legacyDetails?.type),
proxy: proxyValue(network?.proxy) ?? proxyValue(legacyDetails?.proxy),
};
}
export function parseUserLocation(value: unknown): ParsedUserLocation | null {
const intelligence = objectValue(value);
const location = objectValue(intelligence?.location);