import { createAPIClient, CookieUtils, Constants, } from "@budibase/frontend-core" import { store } from "./builderStore" import { get } from "svelte/store" import { auth, overview } from "./stores/portal" export const API = createAPIClient({ attachHeaders: headers => { // Attach app ID header from store let appId = get(store).appId || get(overview).selectedAppId if (appId) { headers["x-budibase-app-id"] = appId } // Add csrf token if authenticated const user = get(auth).user if (user?.csrfToken) { headers["x-csrf-token"] = user.csrfToken } }, onError: error => { const { url, message, status, method, handled } = error || {} // Log any errors that we haven't manually handled if (!handled) { console.error("Unhandled error from API client", error) return } // Log all errors to console console.warn(`[Builder] HTTP ${status} on ${method}:${url}\n\t${message}`) // Logout on 403's if (status === 403) { // Remove cookies CookieUtils.removeCookie(Constants.Cookies.Auth) // Reload after removing cookie, go to login if (!url.includes("self") && !url.includes("login")) { location.reload() } } }, })