UNPKG

tracker-api

Version:

A comprehensive JavaScript/TypeScript library for user behavior tracking and analytics

518 lines 19.5 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TrackerEnum = exports.AnalyticsClient = exports.UserClient = exports.TrackingClient = exports.APIKeyClient = exports.WebsiteClient = exports.CustomerClient = exports.TrackingAPI = void 0; exports.init = init; exports.getTracker = getTracker; exports.createTracker = createTracker; exports.track = track; exports.trackBatch = trackBatch; exports.trackPageView = trackPageView; exports.trackClick = trackClick; exports.trackInput = trackInput; exports.trackSubmit = trackSubmit; exports.trackScroll = trackScroll; exports.trackHover = trackHover; exports.trackChange = trackChange; exports.trackFocus = trackFocus; exports.trackBlur = trackBlur; exports.trackKeydown = trackKeydown; exports.trackKeyup = trackKeyup; exports.trackMouseenter = trackMouseenter; exports.trackMouseleave = trackMouseleave; exports.trackZoom = trackZoom; exports.trackLoginFormSubmit = trackLoginFormSubmit; exports.trackSignupFormSubmit = trackSignupFormSubmit; exports.trackSearchQuerySubmit = trackSearchQuerySubmit; exports.trackAddToCart = trackAddToCart; exports.trackRemoveFromCart = trackRemoveFromCart; exports.trackPurchase = trackPurchase; exports.trackContactFormSubmit = trackContactFormSubmit; exports.trackNewsletterSubscribe = trackNewsletterSubscribe; exports.trackOpenModal = trackOpenModal; exports.trackCloseModal = trackCloseModal; exports.trackViewProduct = trackViewProduct; exports.trackLinkClick = trackLinkClick; exports.trackCopyLink = trackCopyLink; exports.trackCustomEvent = trackCustomEvent; exports.flush = flush; // index.ts - Main entry point for the tracking library const tracking_api_1 = require("./tracking-api"); const tracker_enum_1 = require("./tracker.enum"); // Singleton instance for global usage let globalTracker = null; /** * Initialize global tracker instance * @param options - Configuration options * @returns Tracker instance */ function init(options = {}) { globalTracker = new tracking_api_1.TrackingAPI(options); return globalTracker; } /** * Get global tracker instance * @returns Global tracker instance */ function getTracker() { if (!globalTracker) { globalTracker = new tracking_api_1.TrackingAPI({ apiKey: process.env.NEXT_PUBLIC_TRACKING_API_KEY, }); } return globalTracker; } /** * Create new tracker instance (không dùng global) * @param options - Configuration options * @returns New tracker instance */ function createTracker(options = {}) { return new tracking_api_1.TrackingAPI(options); } // Convenience functions using global tracker for quick tracking /** * Track a custom event using global tracker */ async function track(eventData, immediate = false) { const tracker = getTracker(); if (!tracker) return null; return await tracker.track(eventData, immediate); } /** * Track multiple events at once using global tracker */ async function trackBatch(events) { const tracker = getTracker(); if (!tracker) return null; return await tracker.trackBatch(events); } // ===== EVENT TYPE SPECIFIC TRACKING FUNCTIONS ===== // Dựa theo TrackerEnum.EventType để tạo các hàm tracking cụ thể /** * Track page view event - TrackerEnum.EventType.pageview */ async function trackPageView(eventData) { const tracker = getTracker(); if (!tracker) return null; const fullEventData = { event_type: tracker_enum_1.TrackerEnum.EventType.pageview, event_name: eventData.event_name || tracker_enum_1.TrackerEnum.EventName.view_product, event_date: eventData.event_date || new Date().toISOString().split("T")[0], event_time: eventData.event_time || new Date().toISOString(), visitor_id: "", // Will be handled by tracking-client ...eventData, }; return await tracker.track(fullEventData); } /** * Track click event - TrackerEnum.EventType.click */ async function trackClick(eventData) { const tracker = getTracker(); if (!tracker) return null; const fullEventData = { event_type: tracker_enum_1.TrackerEnum.EventType.click, event_name: eventData.event_name || tracker_enum_1.TrackerEnum.EventName.button_click, visitor_id: eventData.visitor_id || "", // Will be handled by tracking-client event_date: eventData.event_date || new Date().toISOString().split("T")[0], event_time: eventData.event_time || new Date().toISOString(), ...eventData, }; return await tracker.track(fullEventData); } /** * Track input event - TrackerEnum.EventType.input */ async function trackInput(eventData) { const tracker = getTracker(); if (!tracker) return null; const fullEventData = { event_type: tracker_enum_1.TrackerEnum.EventType.input, event_name: eventData.event_name || tracker_enum_1.TrackerEnum.EventName.form_input_change, visitor_id: eventData.visitor_id || "", // Will be handled by tracking-client event_date: eventData.event_date || new Date().toISOString().split("T")[0], event_time: eventData.event_time || new Date().toISOString(), ...eventData, }; return await tracker.track(fullEventData); } /** * Track submit event - TrackerEnum.EventType.submit */ async function trackSubmit(eventData) { const tracker = getTracker(); if (!tracker) return null; const fullEventData = { event_type: tracker_enum_1.TrackerEnum.EventType.submit, event_name: eventData.event_name || tracker_enum_1.TrackerEnum.EventName.contact_form_submit, visitor_id: eventData.visitor_id || "", // Will be handled by tracking-client event_date: eventData.event_date || new Date().toISOString().split("T")[0], event_time: eventData.event_time || new Date().toISOString(), ...eventData, }; return await tracker.track(fullEventData); } /** * Track scroll event - TrackerEnum.EventType.scroll */ async function trackScroll(eventData) { const tracker = getTracker(); if (!tracker) return null; const fullEventData = { event_type: tracker_enum_1.TrackerEnum.EventType.scroll, event_name: eventData.event_name || tracker_enum_1.TrackerEnum.EventName.scroll_to_bottom, visitor_id: eventData.visitor_id || "", // Will be handled by tracking-client event_date: eventData.event_date || new Date().toISOString().split("T")[0], event_time: eventData.event_time || new Date().toISOString(), ...eventData, }; return await tracker.track(fullEventData); } /** * Track hover event - TrackerEnum.EventType.hover */ async function trackHover(eventData) { const tracker = getTracker(); if (!tracker) return null; const fullEventData = { event_type: tracker_enum_1.TrackerEnum.EventType.hover, event_name: eventData.event_name || "Element Hover", event_date: eventData.event_date || new Date().toISOString().split("T")[0], event_time: eventData.event_time || new Date().toISOString(), visitor_id: "", // Will be handled by tracking-client ...eventData, }; return await tracker.track(fullEventData); } /** * Track change event - TrackerEnum.EventType.change */ async function trackChange(eventData) { const tracker = getTracker(); if (!tracker) return null; const fullEventData = { event_type: tracker_enum_1.TrackerEnum.EventType.change, event_name: eventData.event_name || tracker_enum_1.TrackerEnum.EventName.form_input_change, event_date: eventData.event_date || new Date().toISOString().split("T")[0], event_time: eventData.event_time || new Date().toISOString(), visitor_id: "", // Will be handled by tracking-client ...eventData, }; return await tracker.track(fullEventData); } /** * Track focus event - TrackerEnum.EventType.focus */ async function trackFocus(eventData) { const tracker = getTracker(); if (!tracker) return null; const fullEventData = { event_type: tracker_enum_1.TrackerEnum.EventType.focus, event_name: eventData.event_name || "Element Focus", event_date: eventData.event_date || new Date().toISOString().split("T")[0], event_time: eventData.event_time || new Date().toISOString(), visitor_id: "", // Will be handled by tracking-client ...eventData, }; return await tracker.track(fullEventData); } /** * Track blur event - TrackerEnum.EventType.blur */ async function trackBlur(eventData) { const tracker = getTracker(); if (!tracker) return null; const fullEventData = { event_type: tracker_enum_1.TrackerEnum.EventType.blur, event_name: eventData.event_name || "Element Blur", event_date: eventData.event_date || new Date().toISOString().split("T")[0], event_time: eventData.event_time || new Date().toISOString(), visitor_id: "", // Will be handled by tracking-client ...eventData, }; return await tracker.track(fullEventData); } /** * Track keydown event - TrackerEnum.EventType.keydown */ async function trackKeydown(eventData) { const tracker = getTracker(); if (!tracker) return null; const fullEventData = { event_type: tracker_enum_1.TrackerEnum.EventType.keydown, event_name: eventData.event_name || "Key Press", event_date: eventData.event_date || new Date().toISOString().split("T")[0], event_time: eventData.event_time || new Date().toISOString(), visitor_id: "", // Will be handled by tracking-client ...eventData, }; return await tracker.track(fullEventData); } /** * Track keyup event - TrackerEnum.EventType.keyup */ async function trackKeyup(eventData) { const tracker = getTracker(); if (!tracker) return null; const fullEventData = { event_type: tracker_enum_1.TrackerEnum.EventType.keyup, event_name: eventData.event_name || "Key Release", event_date: eventData.event_date || new Date().toISOString().split("T")[0], event_time: eventData.event_time || new Date().toISOString(), visitor_id: "", // Will be handled by tracking-client ...eventData, }; return await tracker.track(fullEventData); } /** * Track mouseenter event - TrackerEnum.EventType.mouseenter */ async function trackMouseenter(eventData) { const tracker = getTracker(); if (!tracker) return null; const fullEventData = { event_type: tracker_enum_1.TrackerEnum.EventType.mouseenter, event_name: eventData.event_name || "Mouse Enter", event_date: eventData.event_date || new Date().toISOString().split("T")[0], event_time: eventData.event_time || new Date().toISOString(), visitor_id: "", // Will be handled by tracking-client ...eventData, }; return await tracker.track(fullEventData); } /** * Track mouseleave event - TrackerEnum.EventType.mouseleave */ async function trackMouseleave(eventData) { const tracker = getTracker(); if (!tracker) return null; const fullEventData = { event_type: tracker_enum_1.TrackerEnum.EventType.mouseleave, event_name: eventData.event_name || "Mouse Leave", event_date: eventData.event_date || new Date().toISOString().split("T")[0], event_time: eventData.event_time || new Date().toISOString(), visitor_id: "", // Will be handled by tracking-client ...eventData, }; return await tracker.track(fullEventData); } /** * Track zoom event - TrackerEnum.EventType.zoom */ async function trackZoom(eventData) { const tracker = getTracker(); if (!tracker) return null; const fullEventData = { event_type: tracker_enum_1.TrackerEnum.EventType.zoom, event_name: eventData.event_name || "Page Zoom", event_date: eventData.event_date || new Date().toISOString().split("T")[0], event_time: eventData.event_time || new Date().toISOString(), visitor_id: "", // Will be handled by tracking-client ...eventData, }; return await tracker.track(fullEventData); } // ===== BUSINESS SPECIFIC EVENT FUNCTIONS ===== // Các hàm tracking cho business events cụ thể /** * Track login form submission */ async function trackLoginFormSubmit(eventData) { return await trackSubmit({ ...eventData, event_name: tracker_enum_1.TrackerEnum.EventName.login_form_submit, element_selector: eventData.element_selector || tracker_enum_1.TrackerEnum.ElementSelector.login_button, element_text: eventData.element_text || tracker_enum_1.TrackerEnum.ElementText.login, }); } /** * Track signup form submission */ async function trackSignupFormSubmit(eventData) { return await trackSubmit({ ...eventData, event_name: tracker_enum_1.TrackerEnum.EventName.signup_form_submit, element_selector: eventData.element_selector || tracker_enum_1.TrackerEnum.ElementSelector.signup_button, element_text: eventData.element_text || tracker_enum_1.TrackerEnum.ElementText.signup, }); } /** * Track search query submission */ async function trackSearchQuerySubmit(eventData) { return await trackSubmit({ ...eventData, event_name: tracker_enum_1.TrackerEnum.EventName.search_query_submit, element_selector: eventData.element_selector || tracker_enum_1.TrackerEnum.ElementSelector.search_input, element_text: eventData.element_text || tracker_enum_1.TrackerEnum.ElementText.search, }); } /** * Track add to cart action */ async function trackAddToCart(eventData) { return await trackClick({ ...eventData, event_name: tracker_enum_1.TrackerEnum.EventName.add_to_cart, element_selector: eventData.element_selector || tracker_enum_1.TrackerEnum.ElementSelector.add_to_cart_button, element_text: eventData.element_text || tracker_enum_1.TrackerEnum.ElementText.add_to_cart, }); } /** * Track remove from cart action */ async function trackRemoveFromCart(eventData) { return await trackClick({ ...eventData, event_name: tracker_enum_1.TrackerEnum.EventName.remove_from_cart, element_text: eventData.element_text || tracker_enum_1.TrackerEnum.ElementText.remove, }); } /** * Track purchase event */ async function trackPurchase(eventData) { return await trackSubmit({ ...eventData, event_name: tracker_enum_1.TrackerEnum.EventName.purchase, }); } /** * Track contact form submission */ async function trackContactFormSubmit(eventData) { return await trackSubmit({ ...eventData, event_name: tracker_enum_1.TrackerEnum.EventName.contact_form_submit, element_selector: eventData.element_selector || tracker_enum_1.TrackerEnum.ElementSelector.contact_form, }); } /** * Track newsletter subscription */ async function trackNewsletterSubscribe(eventData) { return await trackSubmit({ ...eventData, event_name: tracker_enum_1.TrackerEnum.EventName.newsletter_subscribe, }); } /** * Track modal open */ async function trackOpenModal(eventData) { return await trackClick({ ...eventData, event_name: tracker_enum_1.TrackerEnum.EventName.open_modal, }); } /** * Track modal close */ async function trackCloseModal(eventData) { return await trackClick({ ...eventData, event_name: tracker_enum_1.TrackerEnum.EventName.close_modal, element_selector: eventData.element_selector || tracker_enum_1.TrackerEnum.ElementSelector.modal_close, }); } /** * Track product view */ async function trackViewProduct(eventData) { return await trackPageView({ ...eventData, event_name: tracker_enum_1.TrackerEnum.EventName.view_product, page_title: eventData.page_title || tracker_enum_1.TrackerEnum.PageTitle.product_detail, }); } /** * Track link click */ async function trackLinkClick(eventData) { return await trackClick({ ...eventData, event_name: tracker_enum_1.TrackerEnum.EventName.link_click, element_selector: eventData.element_selector || tracker_enum_1.TrackerEnum.ElementSelector.profile_link, }); } /** * Track copy link action */ async function trackCopyLink(eventData) { return await trackClick({ ...eventData, event_name: tracker_enum_1.TrackerEnum.EventName.copy_link, }); } // ===== BACKWARD COMPATIBILITY ===== // Các hàm cũ cho backward compatibility /** * Track custom event using global tracker (Deprecated - use specific event functions above) * @deprecated Use specific event type functions instead */ async function trackCustomEvent(eventType, pageUrl, sessionId, metadata) { const tracker = getTracker(); if (!tracker) return null; return await tracker.trackCustomEvent(eventType, pageUrl, sessionId, metadata); } /** * Flush pending events using global tracker */ async function flush() { const tracker = getTracker(); if (!tracker) return null; return await tracker.flush(); } // Export main classes and types var tracking_api_2 = require("./tracking-api"); Object.defineProperty(exports, "TrackingAPI", { enumerable: true, get: function () { return tracking_api_2.TrackingAPI; } }); var customer_client_1 = require("./customer-client"); Object.defineProperty(exports, "CustomerClient", { enumerable: true, get: function () { return customer_client_1.CustomerClient; } }); var website_client_1 = require("./website-client"); Object.defineProperty(exports, "WebsiteClient", { enumerable: true, get: function () { return website_client_1.WebsiteClient; } }); var apikey_client_1 = require("./apikey-client"); Object.defineProperty(exports, "APIKeyClient", { enumerable: true, get: function () { return apikey_client_1.APIKeyClient; } }); var tracking_client_1 = require("./tracking-client"); Object.defineProperty(exports, "TrackingClient", { enumerable: true, get: function () { return tracking_client_1.TrackingClient; } }); var user_client_1 = require("./user-client"); Object.defineProperty(exports, "UserClient", { enumerable: true, get: function () { return user_client_1.UserClient; } }); var analytics_client_1 = require("./analytics-client"); Object.defineProperty(exports, "AnalyticsClient", { enumerable: true, get: function () { return analytics_client_1.AnalyticsClient; } }); var tracker_enum_2 = require("./tracker.enum"); Object.defineProperty(exports, "TrackerEnum", { enumerable: true, get: function () { return tracker_enum_2.TrackerEnum; } }); // Export all types __exportStar(require("./types"), exports); //# sourceMappingURL=index.js.map