Support desktop API base URL override

This commit is contained in:
Amer Agovic
2026-05-10 17:56:11 -05:00
parent 08f277486a
commit 8960e40db4
2 changed files with 40 additions and 3 deletions
+18 -1
View File
@@ -52,6 +52,23 @@ class APIClient {
);
}
/**
* Resolve an endpoint against the configured API base URL
* @param {string} endpoint
* @returns {string}
*/
resolveURL(endpoint = '') {
return `${this.baseURL}${endpoint}`;
}
/**
* Replace the configured API base URL for future requests.
* @param {string} baseURL
*/
setBaseURL(baseURL = '/api') {
this.baseURL = baseURL || '/api';
}
/**
* Make API request
* @param {string} endpoint
@@ -59,7 +76,7 @@ class APIClient {
* @returns {Promise<Response>}
*/
async request(endpoint, options = {}) {
const url = `${this.baseURL}${endpoint}`;
const url = this.resolveURL(endpoint);
const config = this._applyRequestInterceptors({
...options,
headers: {
+22 -2
View File
@@ -4,6 +4,7 @@
*/
import { getProvider } from './storage.js';
import { api as apiClient } from './api.js';
// Private storage instance for config
const storage = getProvider('kv', 'config');
@@ -119,12 +120,31 @@ function resolveDevHostFlag(appConfig) {
return false;
}
function resolveDesktopApiBaseURL() {
if (typeof window === 'undefined') {
return null;
}
const bridgeBase = window.__bfaceDesktop?.apiBaseUrl;
if (typeof bridgeBase === 'string' && bridgeBase.trim()) {
return bridgeBase.trim();
}
return null;
}
/**
* Initialize environment config
* @param {Object} appConfig - Configuration from profile
*/
export function initEnv(appConfig) {
const api = appConfig.api || {};
const resolvedApiBaseURL =
resolveDesktopApiBaseURL()
|| appConfig.backend?.base_url
|| api.base_url
|| api.baseURL
|| '/api';
config = {
APP_NAME: appConfig.id || appConfig.name,
APP_DISPLAY_NAME: appConfig.displayName || appConfig.short_name || appConfig.name,
@@ -133,7 +153,7 @@ export function initEnv(appConfig) {
THEME_COLOR: appConfig.theme_color || appConfig.themeColor || '#000000',
UI_SHELL: appConfig.ui_shell || appConfig.uiShell || 'EmptyShell',
STORAGE_BACKEND: appConfig.storage?.backend || 'localStorage',
API_BASE_URL: api.base_url || api.baseURL || '/api',
API_BASE_URL: resolvedApiBaseURL,
MODULES: appConfig.modules || [],
SECURITY_CONFIG: appConfig.security || {},
LOCALE: appConfig.locale || null,
@@ -141,6 +161,7 @@ export function initEnv(appConfig) {
// Store full profile for advanced access
_profile: appConfig
};
apiClient.setBaseURL(resolvedApiBaseURL);
}
function resolveSystemLocale() {
@@ -484,4 +505,3 @@ export function isProduction() {
}
return !isDevelopment();
}