@shopify/hydrogen-react
Version:
React components, hooks, and utilities for creating custom Shopify storefronts
171 lines (170 loc) • 6.05 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const analyticsConstants = require("./analytics-constants.js");
const analyticsUtils = require("./analytics-utils.js");
const analyticsSchemaTrekkieStorefrontPageView = require("./analytics-schema-trekkie-storefront-page-view.js");
const analyticsSchemaCustomStorefrontCustomerTracking = require("./analytics-schema-custom-storefront-customer-tracking.js");
const trackingUtils = require("./tracking-utils.js");
function sendShopifyAnalytics(event, shopDomain) {
const { eventName, payload } = event;
if (!payload.hasUserConsent) return Promise.resolve();
let events = [];
const pageViewPayload = payload;
if (eventName === analyticsConstants.AnalyticsEventName.PAGE_VIEW) {
events = events.concat(
analyticsSchemaTrekkieStorefrontPageView.pageView(pageViewPayload),
analyticsSchemaCustomStorefrontCustomerTracking.pageView(pageViewPayload)
);
} else if (eventName === analyticsConstants.AnalyticsEventName.ADD_TO_CART) {
events = events.concat(
analyticsSchemaCustomStorefrontCustomerTracking.addToCart(payload)
);
} else if (eventName === analyticsConstants.AnalyticsEventName.PAGE_VIEW_2) {
events = events.concat(
analyticsSchemaTrekkieStorefrontPageView.pageView(pageViewPayload),
analyticsSchemaCustomStorefrontCustomerTracking.pageView2(pageViewPayload)
);
} else if (eventName === analyticsConstants.AnalyticsEventName.COLLECTION_VIEW) {
events = events.concat(analyticsSchemaCustomStorefrontCustomerTracking.collectionView(pageViewPayload));
} else if (eventName === analyticsConstants.AnalyticsEventName.PRODUCT_VIEW) {
events = events.concat(analyticsSchemaCustomStorefrontCustomerTracking.productView(pageViewPayload));
} else if (eventName === analyticsConstants.AnalyticsEventName.SEARCH_VIEW) {
events = events.concat(analyticsSchemaCustomStorefrontCustomerTracking.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 (false) ;
});
} catch (error) {
return Promise.resolve();
}
}
function getClientBrowserParameters() {
if (analyticsUtils.errorIfServer("getClientBrowserParameters")) {
return {
uniqueToken: "",
visitToken: "",
url: "",
path: "",
search: "",
referrer: "",
title: "",
userAgent: "",
navigationType: "",
navigationApi: ""
};
}
const [navigationType, navigationApi] = getNavigationType();
const trackingValues = trackingUtils.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"];
}
exports.getClientBrowserParameters = getClientBrowserParameters;
exports.sendShopifyAnalytics = sendShopifyAnalytics;
//# sourceMappingURL=analytics.js.map