Files
FloatingIsland/app/composables/useSolarNetwork.ts
2025-09-20 17:18:13 +08:00

46 lines
1.4 KiB
TypeScript

// Solar Network aka the api client
import { keysToCamel, keysToSnake } from "~/utils/transformKeys"
export const useSolarNetwork = () => {
const apiBase = useSolarNetworkUrl()
return $fetch.create({
baseURL: apiBase,
credentials: "include",
// Add Authorization header with Bearer token
onRequest: ({ options }) => {
// Get token from user store
const userStore = useUserStore()
const token = userStore.token
if (token) {
if (!options.headers) {
options.headers = new Headers()
}
if (options.headers instanceof Headers) {
options.headers.set("Authorization", `Bearer ${token}`)
} else {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
;(options.headers as any)["Authorization"] = `Bearer ${token}`
}
}
// Transform request data from camelCase to snake_case
if (options.body && typeof options.body === "object") {
options.body = keysToSnake(options.body)
}
},
// Transform response keys from snake_case to camelCase
onResponse: ({ response }) => {
if (response._data) {
response._data = keysToCamel(response._data)
}
}
})
}
export const useSolarNetworkUrl = (withoutProxy = false) => {
const config = useRuntimeConfig()
return (config.public.development && !withoutProxy) ? "/api" : config.public.apiBase
}