Fixes switching and unlocking password-protected remote instances Stores SSH forwarded host client tokens from saved UI passwords Avoids unnecessary auth churn when no runtime headers are configured
53 lines
2.0 KiB
TypeScript
53 lines
2.0 KiB
TypeScript
import { getRuntimeExtraHeadersSync, refreshLocalRuntimeUrlAuthToken, refreshRuntimeUrlAuthToken, setRuntimeBearerToken, setRuntimeExtraHeaders } from '@openchamber/ui/lib/runtime-auth';
|
|
import { installRuntimeFetchBridge } from '@openchamber/ui/lib/runtime-fetch';
|
|
import { initializeRuntimeEndpoint } from '@openchamber/ui/lib/runtime-switch';
|
|
import { configureRuntimeUrlResolver } from '@openchamber/ui/lib/runtime-url';
|
|
import { createWebAPIs } from './api';
|
|
|
|
const sameOrigin = (left: string, right: string): boolean => {
|
|
if (!left || !right) return false;
|
|
try {
|
|
return new URL(left).origin === new URL(right).origin;
|
|
} catch {
|
|
return false;
|
|
}
|
|
};
|
|
|
|
declare global {
|
|
interface Window {
|
|
__OPENCHAMBER_API_BASE_URL__?: string;
|
|
__OPENCHAMBER_CLIENT_TOKEN__?: string;
|
|
__OPENCHAMBER_RUNTIME_HEADERS__?: Record<string, string>;
|
|
__OPENCHAMBER_LOCAL_ORIGIN__?: string;
|
|
}
|
|
}
|
|
|
|
export const createConfiguredWebAPIs = () => {
|
|
const apiBaseUrl = typeof window.__OPENCHAMBER_API_BASE_URL__ === 'string'
|
|
? window.__OPENCHAMBER_API_BASE_URL__.trim()
|
|
: '';
|
|
const clientToken = typeof window.__OPENCHAMBER_CLIENT_TOKEN__ === 'string'
|
|
? window.__OPENCHAMBER_CLIENT_TOKEN__.trim()
|
|
: '';
|
|
const localOrigin = typeof window.__OPENCHAMBER_LOCAL_ORIGIN__ === 'string'
|
|
? window.__OPENCHAMBER_LOCAL_ORIGIN__.trim()
|
|
: '';
|
|
|
|
const urls = configureRuntimeUrlResolver({
|
|
apiBaseUrl: apiBaseUrl || undefined,
|
|
realtimeBaseUrl: apiBaseUrl || undefined,
|
|
});
|
|
initializeRuntimeEndpoint({
|
|
apiBaseUrl,
|
|
runtimeKey: sameOrigin(apiBaseUrl, localOrigin) ? 'local' : null,
|
|
});
|
|
setRuntimeBearerToken(clientToken || null);
|
|
setRuntimeExtraHeaders(window.__OPENCHAMBER_RUNTIME_HEADERS__ || null);
|
|
void refreshRuntimeUrlAuthToken(apiBaseUrl || undefined).catch(() => {});
|
|
if (localOrigin && !sameOrigin(apiBaseUrl, localOrigin) && Object.keys(getRuntimeExtraHeadersSync()).length > 0) {
|
|
void refreshLocalRuntimeUrlAuthToken(localOrigin).catch(() => {});
|
|
}
|
|
installRuntimeFetchBridge();
|
|
return createWebAPIs({ urls });
|
|
};
|