@ezbot-ai/javascript-sdk
Version:
The easiest way to interact with ezbot via JS (node and browser)
61 lines • 5.04 kB
JavaScript
;
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==