UNPKG

@shopify/hydrogen-react

Version:

React components, hooks, and utilities for creating custom Shopify storefronts

173 lines (172 loc) • 5.45 kB
import { AnalyticsEventName } from "./analytics-constants.mjs"; import { errorIfServer } from "./analytics-utils.mjs"; import { pageView } from "./analytics-schema-trekkie-storefront-page-view.mjs"; import { pageView as pageView$1, addToCart, pageView2, collectionView, productView, searchView } from "./analytics-schema-custom-storefront-customer-tracking.mjs"; import { getTrackingValues } from "./tracking-utils.mjs"; function sendShopifyAnalytics(event, shopDomain) { const { eventName, payload } = event; if (!payload.hasUserConsent) return Promise.resolve(); let events = []; const pageViewPayload = payload; if (eventName === AnalyticsEventName.PAGE_VIEW) { events = events.concat( pageView(pageViewPayload), pageView$1(pageViewPayload) ); } else if (eventName === AnalyticsEventName.ADD_TO_CART) { events = events.concat( addToCart(payload) ); } else if (eventName === AnalyticsEventName.PAGE_VIEW_2) { events = events.concat( pageView(pageViewPayload), pageView2(pageViewPayload) ); } else if (eventName === AnalyticsEventName.COLLECTION_VIEW) { events = events.concat(collectionView(pageViewPayload)); } else if (eventName === AnalyticsEventName.PRODUCT_VIEW) { events = events.concat(productView(pageViewPayload)); } else if (eventName === AnalyticsEventName.SEARCH_VIEW) { events = events.concat(searchView(pageViewPayload)); } if (events.length) { return sendToShopify(events, shopDomain); } else { return Promise.resolve(); } } function isLighthouseUserAgent() { if (typeof window === "undefined" || !window.navigator) return false; return /Chrome-Lighthouse/.test(window.navigator.userAgent); } const ERROR_MESSAGE = "sendShopifyAnalytics request is unsuccessful"; function sendToShopify(events, shopDomain) { if (isLighthouseUserAgent()) { return Promise.resolve(); } const eventsToBeSent = { events, metadata: { event_sent_at_ms: Date.now() } }; try { return fetch( shopDomain ? `https://${shopDomain}/.well-known/shopify/monorail/unstable/produce_batch` : "https://monorail-edge.shopifysvc.com/unstable/produce_batch", { method: "post", headers: { "content-type": "text/plain" }, body: JSON.stringify(eventsToBeSent) } ).then((response) => { if (!response.ok) { throw new Error("Response failed"); } return response.text(); }).then((data) => { if (data) { const jsonResponse = JSON.parse(data); jsonResponse.result.forEach((eventResponse) => { if (eventResponse.status !== 200) { console.error(ERROR_MESSAGE, "\n\n", eventResponse.message); } }); } }).catch((err) => { console.error(ERROR_MESSAGE, err); if (true) { throw new Error(ERROR_MESSAGE); } }); } catch (error) { return Promise.resolve(); } } function getClientBrowserParameters() { if (errorIfServer("getClientBrowserParameters")) { return { uniqueToken: "", visitToken: "", url: "", path: "", search: "", referrer: "", title: "", userAgent: "", navigationType: "", navigationApi: "" }; } const [navigationType, navigationApi] = getNavigationType(); const trackingValues = getTrackingValues(); return { uniqueToken: trackingValues.uniqueToken, visitToken: trackingValues.visitToken, url: location.href, path: location.pathname, search: location.search, referrer: document.referrer, title: document.title, userAgent: navigator.userAgent, navigationType, navigationApi }; } function getNavigationTypeExperimental() { try { const navigationEntries = (performance == null ? void 0 : performance.getEntriesByType) && (performance == null ? void 0 : performance.getEntriesByType("navigation")); if (navigationEntries && navigationEntries[0]) { const rawType = window.performance.getEntriesByType( "navigation" )[0]["type"]; const navType = rawType && rawType.toString(); return navType; } } catch (err) { } return void 0; } function getNavigationTypeLegacy() { var _a, _b; try { if (PerformanceNavigation && ((_a = performance == null ? void 0 : performance.navigation) == null ? void 0 : _a.type) !== null && ((_b = performance == null ? void 0 : performance.navigation) == null ? void 0 : _b.type) !== void 0) { const rawType = performance.navigation.type; switch (rawType) { case PerformanceNavigation.TYPE_NAVIGATE: return "navigate"; case PerformanceNavigation.TYPE_RELOAD: return "reload"; case PerformanceNavigation.TYPE_BACK_FORWARD: return "back_forward"; default: return `unknown: ${rawType}`; } } } catch (err) { } return void 0; } function getNavigationType() { try { let navApi = "PerformanceNavigationTiming"; let navType = getNavigationTypeExperimental(); if (!navType) { navType = getNavigationTypeLegacy(); navApi = "performance.navigation"; } if (navType) { return [navType, navApi]; } else { return ["unknown", "unknown"]; } } catch (err) { } return ["error", "error"]; } export { getClientBrowserParameters, sendShopifyAnalytics }; //# sourceMappingURL=analytics.mjs.map