UNPKG

@ezbot-ai/javascript-sdk

Version:

The easiest way to interact with ezbot via JS (node and browser)

61 lines 5.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createCrossDomainLinkChecker = exports.isCrossDomainLink = void 0; /** * Checks if a link is a cross-domain link that should be tracked. * * @param linkElement - The anchor element to check * @param allowedDomains - List of allowed domains for cross-domain tracking * @returns boolean indicating if this is a cross-domain link to an allowed domain */ function isCrossDomainLink(linkElement, allowedDomains) { // Get the current location's hostname and port const currentHostname = window.location.hostname; const currentPort = window.location.port; // Create a URL object from the link's href try { const linkUrl = new URL(linkElement.href); // 1. Check if hostname and port on linkElement and location are a match const isSameDomain = linkUrl.hostname === currentHostname && linkUrl.port === currentPort; if (isSameDomain) { // 2. If they are a match, return false (no cross-domain linking needed) return false; } // 3. Check if the linkElement hostname is in the allowed list // 4 & 5. Check if the link's hostname is in the allowed domains list return allowedDomains.some((domain) => { // Remove protocol if present in the domain const cleanDomain = domain.replace(/^https?:\/\//, ''); // Create a combined hostname:port string from the link URL for comparison const linkHostWithPort = linkUrl.port ? linkUrl.hostname + ':' + linkUrl.port : linkUrl.hostname; // Check if the link matches domain in various ways const exactMatch = linkHostWithPort === cleanDomain; const hostnameOnlyMatch = linkUrl.hostname === cleanDomain; const subdomainMatch = linkUrl.hostname.endsWith('.' + cleanDomain) || (cleanDomain.includes(':') && linkHostWithPort.endsWith('.' + cleanDomain.split(':')[0] + ':' + cleanDomain.split(':')[1])); return exactMatch || hostnameOnlyMatch || subdomainMatch; }); } catch (e) { // If the href is invalid, return false return false; } } exports.isCrossDomainLink = isCrossDomainLink; /** * Creates a cross-domain link checker function that only requires the linkElement parameter. * The allowed domains are captured in the closure. * * @param allowedDomains - List of allowed domains for cross-domain tracking * @returns A function that takes only a linkElement and checks if it's a cross-domain link */ function createCrossDomainLinkChecker(allowedDomains) { return (linkElement) => { return isCrossDomainLink(linkElement, allowedDomains); }; } exports.createCrossDomainLinkChecker = createCrossDomainLinkChecker; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvc3NEb21haW5MaW5rZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3V0aWxzL2Nyb3NzRG9tYWluTGlua2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOzs7Ozs7R0FNRztBQUNILFNBQWdCLGlCQUFpQixDQUMvQixXQUEwRCxFQUMxRCxjQUFpQztJQUVqQywrQ0FBK0M7SUFDL0MsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7SUFDakQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFFekMsMkNBQTJDO0lBQzNDLElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUxQyx3RUFBd0U7UUFDeEUsTUFBTSxZQUFZLEdBQ2hCLE9BQU8sQ0FBQyxRQUFRLEtBQUssZUFBZSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDO1FBRXZFLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsd0VBQXdFO1lBQ3hFLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELDhEQUE4RDtRQUM5RCxxRUFBcUU7UUFDckUsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDcEMsMkNBQTJDO1lBQzNDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRXZELDBFQUEwRTtZQUMxRSxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxJQUFJO2dCQUNuQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDLElBQUk7Z0JBQ3ZDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBRXJCLG1EQUFtRDtZQUNuRCxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsS0FBSyxXQUFXLENBQUM7WUFDcEQsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsUUFBUSxLQUFLLFdBQVcsQ0FBQztZQUMzRCxNQUFNLGNBQWMsR0FDbEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQztnQkFDNUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztvQkFDeEIsZ0JBQWdCLENBQUMsUUFBUSxDQUN2QixHQUFHLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDbEUsQ0FBQyxDQUFDO1lBRVAsT0FBTyxVQUFVLElBQUksaUJBQWlCLElBQUksY0FBYyxDQUFDO1FBQzNELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCx1Q0FBdUM7UUFDdkMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQWhERCw4Q0FnREM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQiw0QkFBNEIsQ0FDMUMsY0FBaUM7SUFFakMsT0FBTyxDQUNMLFdBQTBELEVBQ2pELEVBQUU7UUFDWCxPQUFPLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUN4RCxDQUFDLENBQUM7QUFDSixDQUFDO0FBUkQsb0VBUUMifQ==