class GHEClient { static normalizeOrigin(origin) { return typeof origin === 'string' ? origin.trim().toLowerCase() : ''; } static isAllowedOrigin(origin) { var normalized = GHEClient.normalizeOrigin(origin); for (var i = 0; i < GHEClient._allowedOrigins.length; i++) { if (GHEClient.normalizeOrigin(GHEClient._allowedOrigins[i]) === normalized) { return true; } } return false; } static nowMs() { return new Date().getTime(); } static cleanupDedupeCache() { var current = GHEClient.nowMs(); var keys = Object.keys(GHEClient._dedupeCache); for (var i = 0; i < keys.length; i++) { var key = keys[i]; if (GHEClient._dedupeCache[key] <= current) { delete GHEClient._dedupeCache[key]; } } } static buildDedupeKey(msg) { var d = (msg && msg.data) ? msg.data : {}; if (msg && msg.eventType === 'page_view') { return ''; } return [ msg && msg.eventType ? msg.eventType : '', d.eventId || '', d.transactionId || '', d.orderId || '', d.contentId || '', d.contentName || '', d.value || 0, d.currency || '', d.quantity || 0, d.itemCount || 0 ].join('|'); } static isDuplicateMessage(msg) { if (msg && msg.eventType === 'page_view') { return false; } GHEClient.cleanupDedupeCache(); var key = GHEClient.buildDedupeKey(msg); if (!key.replace(/\|/g, '').length) { return false; } var current = GHEClient.nowMs(); var ttlMs = 30 * 60 * 1000; if (GHEClient._dedupeCache[key] && GHEClient._dedupeCache[key] > current) { return true; } GHEClient._dedupeCache[key] = current + ttlMs; return false; } static hasMeta() { return typeof window.fbq === 'function'; } static hasGA4() { return typeof window.gtag === 'function'; } static hasDataLayer() { return Array.isArray(window.dataLayer); } static installBridge() { if (GHEClient._bridgeInstalled) { return; } window.addEventListener('message', function (event) { if (!GHEClient.isAllowedOrigin(event.origin)) { return; } var msg = event.data; if (!msg || msg.source !== 'GHE_EMBED') { return; } if (GHEClient.isDuplicateMessage(msg)) { return; } var data = msg.data || {}; var w = window; switch (msg.eventType) { case 'page_view': { if (GHEClient.hasMeta()) { w.fbq('track', 'PageView'); } if (GHEClient.hasGA4()) { w.gtag('event', 'page_view', { page_title: data.pageTitle || undefined, page_location: data.pageUrl || undefined, page_path: data.pagePath || undefined }); } if (GHEClient.hasDataLayer()) { w.dataLayer.push({ event: 'ghe_page_view', page_title: data.pageTitle || '', page_location: data.pageUrl || '', page_path: data.pagePath || '' }); } break; } case 'view_content': { if (GHEClient.hasMeta()) { w.fbq('track', 'ViewContent', { content_name: data.contentName || '', content_type: data.contentType || 'product', content_category: data.category || '', content_ids: data.contentId ? [data.contentId] : [], value: Number(data.value || 0), currency: data.currency || 'USD' }); } if (GHEClient.hasGA4()) { w.gtag('event', 'view_item', { currency: data.currency || 'USD', value: Number(data.value || 0), items: [{ item_id: data.contentId || '', item_name: data.contentName || '', item_category: data.category || '', item_category2: data.contentType || 'product' }] }); } if (GHEClient.hasDataLayer()) { w.dataLayer.push({ event: 'ghe_view_content', content_id: data.contentId || '', content_name: data.contentName || '', content_type: data.contentType || 'product', category: data.category || '', value: Number(data.value || 0), currency: data.currency || 'USD' }); } break; } case 'add_to_cart': { if (GHEClient.hasMeta()) { w.fbq('track', 'AddToCart', { content_name: data.contentName || '', content_type: data.contentType || 'product', content_ids: data.contentId ? [data.contentId] : [], value: Number(data.value || 0), currency: data.currency || 'USD', num_items: Number(data.quantity || 1) }); } if (GHEClient.hasGA4()) { w.gtag('event', 'add_to_cart', { currency: data.currency || 'USD', value: Number(data.value || 0), items: [{ item_id: data.contentId || '', item_name: data.contentName || '', quantity: Number(data.quantity || 1), price: Number(data.value || 0) }] }); } if (GHEClient.hasDataLayer()) { w.dataLayer.push({ event: 'ghe_add_to_cart', content_id: data.contentId || '', content_name: data.contentName || '', quantity: Number(data.quantity || 1), value: Number(data.value || 0), currency: data.currency || 'USD' }); } break; } case 'begin_checkout': { if (GHEClient.hasMeta()) { w.fbq('track', 'InitiateCheckout', { value: Number(data.value || 0), currency: data.currency || 'USD', num_items: Number(data.itemCount || 0) }); } if (GHEClient.hasGA4()) { w.gtag('event', 'begin_checkout', { currency: data.currency || 'USD', value: Number(data.value || 0) }); } if (GHEClient.hasDataLayer()) { w.dataLayer.push({ event: 'ghe_begin_checkout', order_id: data.orderId || '', item_count: Number(data.itemCount || 0), value: Number(data.value || 0), currency: data.currency || 'USD' }); } break; } case 'purchase': { var eventId = data.eventId || data.transactionId || data.orderId || ''; if (GHEClient.hasMeta()) { if (eventId) { w.fbq('track', 'Purchase', { value: Number(data.value || 0), currency: data.currency || 'USD', num_items: Number(data.itemCount || 0), order_id: data.orderId || '', event_name: data.eventName || '', content_type: 'product', contents: Array.isArray(data.contents) ? data.contents : [] }, { eventID: eventId }); } else { w.fbq('track', 'Purchase', { value: Number(data.value || 0), currency: data.currency || 'USD', num_items: Number(data.itemCount || 0), order_id: data.orderId || '', event_name: data.eventName || '', content_type: 'product', contents: Array.isArray(data.contents) ? data.contents : [] }); } } if (GHEClient.hasGA4()) { w.gtag('event', 'purchase', { transaction_id: data.transactionId || data.orderId || '', currency: data.currency || 'USD', value: Number(data.value || 0), tax: Number(data.tax || 0), shipping: Number(data.shipping || 0) }); } if (GHEClient.hasDataLayer()) { w.dataLayer.push({ event: 'ghe_purchase', event_id: eventId, order_id: data.orderId || '', transaction_id: data.transactionId || '', event_name: data.eventName || '', value: Number(data.value || 0), currency: data.currency || 'USD', tax: Number(data.tax || 0), shipping: Number(data.shipping || 0), item_count: Number(data.itemCount || 0), contents: Array.isArray(data.contents) ? data.contents : [] }); } break; } case 'custom': { var payload = data.payload || {}; var eventName = data.eventName || payload.eventName || ''; var customEventId = data.eventId || data.transactionId || data.orderId || ''; if (!eventName) { return; } if (GHEClient.hasMeta()) { if (customEventId) { w.fbq('trackCustom', eventName, payload, { eventID: customEventId }); } else { w.fbq('trackCustom', eventName, payload); } } if (GHEClient.hasGA4()) { w.gtag('event', eventName, payload); } if (GHEClient.hasDataLayer()) { w.dataLayer.push({ event: 'ghe_custom', ghe_custom_event_name: eventName, payload: payload }); } break; } default: break; } }, false); GHEClient._bridgeInstalled = true; } constructor(APIKey) { this.loadEmbed = function (target, url) { var targetDOM = document.getElementById(target); if (targetDOM == null) { console.error('Unable to locate DOM Target: ', target); return; } //if (this._pixelId && this._pixelId.trim() !== '') { // GHEClient.ensureMetaPixel(this._pixelId); //} //GHEClient.installBridge(); var iframeDOM = document.createElement('iframe'); //Populate the attributes for (var i = 0; i < targetDOM.attributes.length; i++) { //Check for src if (targetDOM.attributes[i].name.toLowerCase() != 'src' && targetDOM.attributes[i].name.toLowerCase() != 'allow') { //Append the attribute iframeDOM.setAttribute(targetDOM.attributes[i].name, targetDOM.attributes[i].value); } } //Add the Origin url += '&parentOrigin=' + encodeURIComponent(window.location.origin); //Look for set values if (this._campaignToken && this._campaignToken.trim() !== '') { url += '&ctc=' + encodeURIComponent(this._campaignToken); } //Set Purchase code if (this._purchaseCode !== null) { //Add the Token to the URL url += '&purchaseCode=' + encodeURIComponent(this._purchaseCode); } //enumerate the items (new URLSearchParams(document.location.search)).forEach(function (value, key) { //Check for the type switch (key.toLowerCase()) { case "ctc": //check for value if (this._campaignToken === null || this._campaignToken.trim() === '') { //Set it url += '&ctc=' + value; } break; case "purchaseCode": if (this._purchaseCode === null || this._purchaseCode.trim() === '') { url += '&purchaseCode=' + value; } break; default: url += '&' + key + '=' + value; break; } }); //Create the URL iframeDOM.setAttribute('src', 'https://gearheadevents.com/Embed/API?APIKey=' + this._apiKey + '&' + url); //Set the allow Attribute iframeDOM.setAttribute('allow', 'payment *'); //Remove old DOM object and replace with new targetDOM.replaceWith(iframeDOM); }; this.Version = '2.0'; this._apiKey = APIKey; this._purchaseCode = ''; this._campaignToken = ''; this._pixelId = ''; var qs = new URLSearchParams(window.location.search); this._campaignToken = qs.get('CTC') || qs.get('ctc') || ''; this._purchaseCode = qs.get('PurchaseCode') || qs.get('purchaseCode') || ''; } SetPurchaseCode(code) { this._purchaseCode = code; return this; } SetCampaignCode(code) { this._campaignToken = code; return this; } SetMetaPixelId(pixelId) { this._pixelId = pixelId; return this; } EmbedEvents(target) { this.loadEmbed(target, ''); } EmbedEvent(target, eventId) { this.loadEmbed(target, 'EventId=' + encodeURIComponent(eventId)); } EmbedItem(target, itemId) { this.loadEmbed(target, 'ItemId=' + encodeURIComponent(itemId)); } } GHEClient._bridgeInstalled = false; GHEClient._pixelInstalled = false; GHEClient._pixelInitIds = {}; GHEClient._dedupeCache = {}; GHEClient._allowedOrigins = [ 'https://demo.gearheadevents.com', 'https://www.demo.gearheadevents.com', 'https://gearheadevents.com', 'https://www.gearheadevents.com', 'https://localhost:44301' ]; //# sourceMappingURL=GHEClient.js.map