From d2d0d934c2615f6a4fc7224a8c4402512a5990b8 Mon Sep 17 00:00:00 2001 From: Darius Date: Mon, 17 Nov 2025 13:57:08 +0100 Subject: [PATCH] small fix & better error handling for api requests --- .zed/settings.json | 11 +++++++--- src/util/api-homeassistant.ts | 38 ++++++++++++++++++++--------------- src/util/api-tidal.ts | 28 +++++++++++++++++--------- src/util/general.ts | 19 ++++++++++++++++-- 4 files changed, 66 insertions(+), 30 deletions(-) diff --git a/.zed/settings.json b/.zed/settings.json index d95d53b..826d5c0 100644 --- a/.zed/settings.json +++ b/.zed/settings.json @@ -1,6 +1,11 @@ +// Folder-specific settings +// +// For a full list of overridable settings, and general information on folder-specific settings, +// see the documentation: https://zed.dev/docs/configuring-zed#settings-files { "code_actions_on_format": { - "source.organizeImports.biome": true, - "source.fixAll.biome": true - } + "source.organizeImports": true, + "source.fixAll.eslint": true + }, + "format_on_save": "on" } diff --git a/src/util/api-homeassistant.ts b/src/util/api-homeassistant.ts index ab2cc5c..03de620 100644 --- a/src/util/api-homeassistant.ts +++ b/src/util/api-homeassistant.ts @@ -1,5 +1,6 @@ import axios from "axios"; import { Config } from "../config/config.js"; +import { printNetworkError } from "./general.js"; import { logWarning } from "./logger.js"; type HomeAssistantEntity = { @@ -53,10 +54,10 @@ export async function getDeskPosition(): Promise { raw, asBoolean: position === 1, asText: () => { - if (position === 1) return 'standing'; - if (position === 0) return 'sitting'; - return 'unknown'; - } + if (position === 1) return "standing"; + if (position === 0) return "sitting"; + return "unknown"; + }, }; } return null; @@ -87,28 +88,33 @@ export async function getTemperatures(): Promise> { async function sendRequestToHomeAssistantStates( entity_id: string, ): Promise { - const url = `${Config.homeassistant.api_url}states/"${entity_id}` - //logInfo(`sending request to ${url}`) + try { + const url = `${Config.homeassistant.api_url}states/${entity_id}`; - const response = await axios.get( - url, - { + const response = await axios.get(url, { headers: { Authorization: `Bearer ${Config.homeassistant.api_token}`, }, - }, - ); + }); - return response.data; + return response.data; + } catch (error) { + printNetworkError(error); + throw error; + } } async function sendRequestToHomeAssistantWebhook( webhook_id: string, ): Promise { - const url = `${Config.homeassistant.api_url}webhook/${webhook_id}` - //logInfo(`sending request to ${url}`) + try { + const url = `${Config.homeassistant.api_url}webhook/${webhook_id}`; - const response = await axios.post(url); + const response = await axios.post(url); - return response.data; + return response.data; + } catch (error) { + printNetworkError(error); + throw error; + } } diff --git a/src/util/api-tidal.ts b/src/util/api-tidal.ts index 6466078..632fa2f 100644 --- a/src/util/api-tidal.ts +++ b/src/util/api-tidal.ts @@ -1,5 +1,6 @@ import axios from "axios"; import { Config } from "../config/config.js"; +import { printNetworkError } from "./general.js"; import { logWarning } from "./logger.js"; type Song = { @@ -61,21 +62,30 @@ export async function setVolumeToTidal(volume: number): Promise { } async function sendGetRequestToTidal(endpoint: string): Promise { - const response = await axios.get( - `${Config.tidal.host}:${Config.tidal.port}/${endpoint}`, - ); + try { + const url = `${Config.tidal.host}:${Config.tidal.port}/${endpoint}`; - return response.data; + const response = await axios.get(url); + + return response.data; + } catch (error) { + printNetworkError(error); + throw error; + } } async function sendPostRequestToTidal( endpoint: string, data: unknown, ): Promise { - const response = await axios.post( - `${Config.tidal.host}:${Config.tidal.port}/${endpoint}`, - data, - ); + try { + const url = `${Config.tidal.host}:${Config.tidal.port}/${endpoint}`; - return response.data; + const response = await axios.post(url, data); + + return response.data; + } catch (error) { + printNetworkError(error); + throw error; + } } diff --git a/src/util/general.ts b/src/util/general.ts index 80a4e64..f1eee03 100644 --- a/src/util/general.ts +++ b/src/util/general.ts @@ -1,7 +1,8 @@ -import * as readline from "node:readline"; import type { UserIdResolvable } from "@twurple/api"; +import axios from "axios"; +import * as readline from "node:readline"; import { apiClient } from "../core/client.js"; -import { logSuccess, logWarning } from "./logger.js"; +import { logError, logSuccess, logWarning } from "./logger.js"; export async function getUserId(username: string): Promise { const user = await apiClient.users.getUserByName(username); @@ -62,3 +63,17 @@ export function secondsToReadable( "", ); } + +export function printNetworkError(error: unknown) { + if (axios.isAxiosError(error)) { + logError("Axios error details:", { + message: error.message, + status: error.response?.status, + statusText: error.response?.statusText, + data: error.response?.data, + url: error.config?.url, + }); + } else { + logError("Unexpected error:", error); + } +}