This repository has been archived on 2026-07-05. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
vynte-connect/src/status.ts
T

67 lines
1.5 KiB
TypeScript

import { GATEWAY_HOST } from './config';
import { NetworkStatus } from './types';
interface NetBirdStatusResponse {
daemonStatus?: string;
management?: {
connected?: boolean;
};
signal?: {
connected?: boolean;
};
peers?: {
connected?: number;
total?: number;
};
}
export function baseStatus(overrides: NetworkStatus): NetworkStatus {
return {
gatewayHost: GATEWAY_HOST,
...overrides,
};
}
export function normalizeStatus(
raw: string,
previousStatus: Partial<NetworkStatus> = {}
): NetworkStatus {
let parsed: NetBirdStatusResponse;
try {
parsed = JSON.parse(raw) as NetBirdStatusResponse;
} catch {
return baseStatus({
state: 'error',
title: 'Connection failed',
message: `${GATEWAY_HOST} status could not be parsed.`,
});
}
const daemonConnected = String(parsed.daemonStatus ?? '')
.toLowerCase()
.includes('connected');
const managementConnected = parsed.management?.connected === true;
const signalConnected = parsed.signal?.connected === true;
const connected =
daemonConnected &&
(managementConnected || signalConnected);
if (connected) {
return baseStatus({
state: 'connected',
title: 'Connected',
message: "You're on the Vynte network.",
connectedSince:
previousStatus.connectedSince ?? Date.now(),
});
}
return baseStatus({
state: 'disconnected',
title: 'Disconnected',
message: 'Click the flame to connect with NetBird.',
});
}