/** * Copyright (c) 2021 OpenLens Authors * * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in * the Software without restriction, including without limitation the rights to * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * the Software, and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ import type { ClusterId } from "../cluster-types"; /** * Grab the `ClusterId` out of a host that was generated by `getClusterFrameUrl`, or nothing * @param host The host section of a URL * @returns The `ClusterId` part of the host, or `undefined` */ export function getClusterIdFromHost(host: string): ClusterId | undefined { // e.g host == "%clusterId.localhost:45345" const subDomains = host.split(":")[0].split("."); return subDomains.slice(-2, -1)[0]; // ClusterId or undefined } /** * Get the OpenLens backend routing host for a given `ClusterId` * @param clusterId The ID to put in front of the current host * @returns a new URL host section */ export function getClusterFrameUrl(clusterId: ClusterId) { return `//${clusterId}.${location.host}`; } /** * Get the result of `getClusterIdFromHost` from the current `location.host` */ export function getHostedClusterId(): ClusterId | undefined { return getClusterIdFromHost(location.host); } /** * Returns true only if code is running within a cluster iframe context */ export function isClusterPageContext(): boolean { if (typeof window === "undefined") return false; return !!getClusterIdFromHost(window.location.host); }