function get_url_root(): string | null {
const meta_url_root = document.head.querySelector("meta[name='url-root']");
if (meta_url_root instanceof HTMLMetaElement) {
return meta_url_root.content.replace(/^\/+|\/+$/g, '');
} else {
try {
return window.localStorage.getItem('url-root');
} catch {
return null;
}
}
}
export const url_root = get_url_root();
export const transport_origin = window.location.origin;
export function calculate_application(): string {
let path = window.location.pathname || "/";
let _url_root = url_root;
if (window.mock?.pathname)
path = window.mock.pathname;
if (window.mock?.url_root)
_url_root = window.mock.url_root;
if (_url_root && path.indexOf('/' + _url_root) === 0)
path = path.replace('/' + _url_root, '') || '/';
if (path.indexOf("/cockpit/") !== 0 && path.indexOf("/cockpit+") !== 0) {
if (path.indexOf("/=") === 0)
path = "/cockpit+" + path.split("/")[1];
else
path = "/cockpit";
}
return path.split("/")[1];
}
export function calculate_url(suffix?: string): string {
if (!suffix)
suffix = "socket";
const window_loc = window.location.toString();
let _url_root = url_root;
if (window.mock?.url)
return window.mock.url;
if (window.mock?.url_root)
_url_root = window.mock.url_root;
let prefix = calculate_application();
if (_url_root)
prefix = _url_root + "/" + prefix;
if (window_loc.indexOf('http:') === 0) {
return "ws://" + window.location.host + "/" + prefix + "/" + suffix;
} else if (window_loc.indexOf('https:') === 0) {
return "wss://" + window.location.host + "/" + prefix + "/" + suffix;
} else {
throw new Error("Cockpit must be used over http or https");
}
}