SPB Git forge
2commits 1branches 0releases
492.0 KBsize
maindefault branch
2 h agolast push
TypeScript 96.1% CSS 3.1% JavaScript 0.8%
1.1 KB · 44 lines typescript
Raw Blame History
1export interface TailscaleDevice {2  id: string;3  name: string;4  hostname: string;5  addresses: string[];6  os: string;7  online: boolean;8  lastSeen: string;9  clientVersion: string;10}1112export async function getTailscaleDevices(): Promise<TailscaleDevice[]> {13  const apiKey = process.env.TAILSCALE_API_KEY;14  const tailnet = process.env.TAILSCALE_TAILNET;1516  if (!apiKey || apiKey.startsWith("tskey-api-XXXX")) {17    return [];18  }1920  const res = await fetch(`https://api.tailscale.com/api/v2/tailnet/${tailnet}/devices`, {21    headers: {22      Authorization: `Bearer ${apiKey}`,23    },24    next: { revalidate: 30 },25  });2627  if (!res.ok) {28    console.error("Tailscale API error:", res.status, await res.text());29    return [];30  }3132  const data = await res.json();33  return (data.devices || []).map((d: Record<string, unknown>) => ({34    id: d.id,35    name: d.name,36    hostname: d.hostname,37    addresses: d.addresses || [],38    os: d.os,39    online: d.connectedToControl ?? d.online ?? false,40    lastSeen: d.lastSeen,41    clientVersion: d.clientVersion || "",42  }));43}44