From ae4a2fe1150542cc5bb89678f71031bb6bc7d386 Mon Sep 17 00:00:00 2001 From: Niklas Jensen Date: Fri, 23 Jan 2026 15:27:44 +0100 Subject: [PATCH] Implement apstatus fetch on svelte site + protobuf decode --- app/scripts/compile_protos.js | 2 +- app/src/lib/api.ts | 5 +++++ app/src/lib/types/models.ts | 7 ------- app/src/routes/wifi/ap/Accesspoint.svelte | 18 ++++++++++-------- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/app/scripts/compile_protos.js b/app/scripts/compile_protos.js index 1886935..d5522a8 100644 --- a/app/scripts/compile_protos.js +++ b/app/scripts/compile_protos.js @@ -17,7 +17,7 @@ const pluginPath = path.join(projectRoot, 'node_modules', '.bin', 'protoc-gen-ts_proto.cmd') : path.join(projectRoot, 'node_modules', '.bin', 'protoc-gen-ts_proto') -const protoFiles = ['filesystem.proto', 'message.proto'] +const protoFiles = ['filesystem.proto', 'message.proto', "api.proto"] const tsProtoOpts = ['useExactTypes=false', 'outputExtensions=true', 'outputSchema=true'].join(',') diff --git a/app/src/lib/api.ts b/app/src/lib/api.ts index 40b126b..00009f2 100644 --- a/app/src/lib/api.ts +++ b/app/src/lib/api.ts @@ -1,6 +1,8 @@ import { get } from 'svelte/store' import { Err, Ok, type Result } from './utilities' import { apiLocation } from './stores/location-store' +import type { MessageFns } from './platform_shared/filesystem' +import { Response } from './platform_shared/api' export const api = { get(endpoint: string, params?: RequestInit) { @@ -60,6 +62,9 @@ async function sendRequest( if (contentType && contentType.includes('application/json')) { const data = await response.json() return Ok.new(data as TResponse) + } else if (contentType && contentType.includes('application/x-protobuf')) { + let data: Response = Response.decode(await response.bytes()); + return Ok.new(data as TResponse) } else { // Handle empty object as response return Ok.new(null as TResponse) diff --git a/app/src/lib/types/models.ts b/app/src/lib/types/models.ts index 2305deb..adfb7fc 100644 --- a/app/src/lib/types/models.ts +++ b/app/src/lib/types/models.ts @@ -71,13 +71,6 @@ export type NetworkItem = { encryption_type: number } -export type ApStatus = { - status: number - ip_address: number - mac_address: string - station_num: number -} - export type ApSettings = { provision_mode: number ssid: string diff --git a/app/src/routes/wifi/ap/Accesspoint.svelte b/app/src/routes/wifi/ap/Accesspoint.svelte index 0b32ea9..5995c65 100644 --- a/app/src/routes/wifi/ap/Accesspoint.svelte +++ b/app/src/routes/wifi/ap/Accesspoint.svelte @@ -6,14 +6,16 @@ import SettingsCard from '$lib/components/SettingsCard.svelte' import { notifications } from '$lib/components/toasts/notifications' import Spinner from '$lib/components/Spinner.svelte' - import type { ApSettings, ApStatus } from '$lib/types/models' + import { type ApSettings } from '$lib/types/models' import { api } from '$lib/api' import { ipToUint32, uint32ToIp, isValidIpString } from '$lib/utilities' import { AP, Devices, Home, MAC } from '$lib/components/icons' import StatusItem from '$lib/components/StatusItem.svelte' + import { APStatus, Response } from '$lib/platform_shared/api' + import { input } from '$lib/stores' let apSettings: ApSettings | null = $state(null) - let apStatus: ApStatus | null = $state(null) + let apStatus: APStatus | null = $state(null) let ipDisplay = $state({ local_ip: '', @@ -24,13 +26,13 @@ let formField: Record = $state({}) async function getAPStatus() { - const result = await api.get('/api/ap/status') + const result = await api.get('/api/ap/status') if (result.isErr()) { console.error('Error:', result.inner) return } - apStatus = result.inner - return apStatus + + apStatus = result.inner.apStatus! } async function getAPSettings() { @@ -181,15 +183,15 @@ - + {/if}