feat: create type-safe API object for Headscale

This commit is contained in:
Aarnav Tale
2025-11-04 21:05:22 -05:00
parent 1c0561edb8
commit a68aedc297
27 changed files with 1378 additions and 80 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
import { ActionFunctionArgs, data } from 'react-router';
import { LoadContext } from '~/server';
import ResponseError from '~/server/headscale/api-error';
import ResponseError from '~/server/headscale/api/error';
import { Capabilities } from '~/server/web/roles';
import { data400, data403 } from '~/utils/res';
+1 -1
View File
@@ -1,6 +1,6 @@
import { LoaderFunctionArgs } from 'react-router';
import { LoadContext } from '~/server';
import ResponseError from '~/server/headscale/api-error';
import ResponseError from '~/server/headscale/api/error';
import { Capabilities } from '~/server/web/roles';
import { data403 } from '~/utils/res';
+1 -1
View File
@@ -1,6 +1,6 @@
import { ActionFunctionArgs, data, redirect } from 'react-router';
import { LoadContext } from '~/server';
import ResponseError from '~/server/headscale/api-error';
import ResponseError from '~/server/headscale/api/error';
import { Key } from '~/types';
import log from '~/utils/log';
+2 -5
View File
@@ -6,7 +6,6 @@ import Link from '~/components/Link';
import Tooltip from '~/components/Tooltip';
import type { LoadContext } from '~/server';
import { Capabilities } from '~/server/web/roles';
import type { Machine, User } from '~/types';
import cn from '~/utils/cn';
import { mapNodes } from '~/utils/node-info';
import MachineRow from './components/machine-row';
@@ -40,10 +39,8 @@ export async function loader({
Capabilities.write_machines,
);
const [{ nodes }, { users }] = await Promise.all([
context.client.get<{ nodes: Machine[] }>('v1/node', session.api_key),
context.client.get<{ users: User[] }>('v1/user', session.api_key),
]);
const api = context.hsApi.getRuntimeClient(session.api_key);
const [nodes, users] = await Promise.all([api.getNodes(), api.getUsers()]);
let magic: string | undefined;
if (context.hs.readable()) {