@cashin/js-sdk 1.0.7 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var x=Object.create;var g=Object.defineProperty;var I=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var P=Object.getPrototypeOf,N=Object.prototype.hasOwnProperty;var E=(t,n)=>{for(var e in n)g(t,e,{get:n[e],enumerable:!0})},y=(t,n,e,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of w(n))!N.call(t,r)&&r!==e&&g(t,r,{get:()=>n[r],enumerable:!(i=I(n,r))||i.enumerable});return t};var b=(t,n,e)=>(e=t!=null?x(P(t)):{},y(n||!t||!t.__esModule?g(e,"default",{value:t,enumerable:!0}):e,t)),A=t=>y(g({},"__esModule",{value:!0}),t);var S={};E(S,{init:()=>k,initShopify:()=>C});module.exports=A(S);var h=require("@jitsu/js");var d="FCPcyGrUKbMlUu65nsX8e2HBCYadBi2b:eE6u4qr1RIUn119gAEliIuzftbpIrbOX",p="https://cmjiyhe5l00003b7ayqcn2bte.d.jitsu.com";function u(t){if(typeof document>"u")return"";if(t.id)return`//*[@id="${t.id}"]`;if(t===document.body)return"/html/body";let n=0,e=t.parentNode?.children;if(e)for(let i=0;i<e.length;i++){let r=e[i];if(r===t)return u(t.parentNode)+"/"+t.tagName.toLowerCase()+"["+(n+1)+"]";r.tagName===t.tagName&&n++}return""}function f(t){if(typeof document>"u")return"";if(t.id)return`#${t.id}`;let n=[],e=t;for(;e&&e!==document.body;){let i=e.tagName.toLowerCase();e.className&&(i+="."+e.className.trim().split(/\s+/).join(".")),n.unshift(i),e=e.parentElement}return n.join(" > ")}function l(t,n,e){if(typeof window>"u")return;t.page();let i=window.location.pathname,r=()=>{i!==window.location.pathname&&(i=window.location.pathname,t.page())};window.addEventListener("popstate",r);let s=a=>{let o=history[a];history[a]=function(...c){o.apply(this,c),r()}};s("pushState"),s("replaceState"),document.addEventListener("click",a=>{let o=a.target,c=o.getBoundingClientRect(),T={tagName:o.tagName,id:o.id||void 0,className:o.className||void 0,text:o.textContent?.substring(0,100),xpath:n(o),cssSelector:e(o),href:o.href||void 0,coordinates:{x:a.clientX,y:a.clientY},elementPosition:{top:c.top,left:c.left,width:c.width,height:c.height}};t.track("click",{"click-meta":JSON.stringify(T)})})}function m(t){let n={setContext(e,i){t.setContextProperty(e,i)},getContext(e){return t.getContextProperty(e)},analytics:t};return new Proxy(n,{get(e,i){if(i in e)return e[i];let r=t[i];return typeof r=="function"?r.bind(t):r}})}function k(t,n={}){let{autoTrack:e=!0,cookieName:i="__eventn_id"}=n,r=(0,h.jitsuAnalytics)({writeKey:d,host:p,cookieNames:{anonymousId:i}});return r.setContextProperty("partnerKey",t),e&&l(r,u,f),m(r)}async function C(t,n={}){let{autoTrack:e=!0}=n,{jitsuAnalytics:i}=await import("@jitsu/js"),r=n.cookieName||"__eventn_id",s=null;if(n.getCookie)try{s=await n.getCookie(r)}catch{}if(!s&&(s=`session_${Date.now()}_${Math.random().toString(36).substring(2,15)}`,n.setCookie))try{await n.setCookie(r,s,"path=/; max-age=31536000")}catch{}let a=i({writeKey:d,host:p,cookieNames:{anonymousId:r}});return a.setAnonymousId(s),a.setContextProperty("partnerKey",t),e&&l(a,u,f),m(a)}0&&(module.exports={init,initShopify});
1
+ "use strict";var T=Object.create;var l=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var I=Object.getPrototypeOf,b=Object.prototype.hasOwnProperty;var P=(e,n)=>{for(var t in n)l(e,t,{get:n[t],enumerable:!0})},h=(e,n,t,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of E(n))!b.call(e,r)&&r!==t&&l(e,r,{get:()=>n[r],enumerable:!(o=x(n,r))||o.enumerable});return e};var N=(e,n,t)=>(t=e!=null?T(I(e)):{},h(n||!e||!e.__esModule?l(t,"default",{value:e,enumerable:!0}):t,e)),S=e=>h(l({},"__esModule",{value:!0}),e);var H={};P(H,{init:()=>w,initShopify:()=>C});module.exports=S(H);var k=require("@jitsu/js");var m="FCPcyGrUKbMlUu65nsX8e2HBCYadBi2b:eE6u4qr1RIUn119gAEliIuzftbpIrbOX",u="https://cmjiyhe5l00003b7ayqcn2bte.d.jitsu.com",A="AQSGdfl95aaMHWdQ3kg";function d(e){if(typeof document>"u")return"";if(e.id)return`//*[@id="${e.id}"]`;if(e===document.body)return"/html/body";let n=0,t=e.parentNode?.children;if(t)for(let o=0;o<t.length;o++){let r=t[o];if(r===e)return d(e.parentNode)+"/"+e.tagName.toLowerCase()+"["+(n+1)+"]";r.tagName===e.tagName&&n++}return""}function p(e){if(typeof document>"u")return"";if(e.id)return`#${e.id}`;let n=[],t=e;for(;t&&t!==document.body;){let o=t.tagName.toLowerCase();t.className&&(o+="."+t.className.trim().split(/\s+/).join(".")),n.unshift(o),t=t.parentElement}return n.join(" > ")}function f(e,n,t){if(typeof window>"u")return;e.page();let o=window.location.pathname,r=()=>{o!==window.location.pathname&&(o=window.location.pathname,e.page())};window.addEventListener("popstate",r);let i=a=>{let s=history[a];history[a]=function(...c){s.apply(this,c),r()}};i("pushState"),i("replaceState"),document.addEventListener("click",a=>{let s=a.target,c=s.getBoundingClientRect(),v={tagName:s.tagName,id:s.id||void 0,className:s.className||void 0,text:s.textContent?.substring(0,100),xpath:n(s),cssSelector:t(s),href:s.href||void 0,coordinates:{x:a.clientX,y:a.clientY},elementPosition:{top:c.top,left:c.left,width:c.width,height:c.height}};e.track("click",{"click-meta":JSON.stringify(v)})})}function y(e){if(typeof window>"u"||typeof document>"u")return;let n=document.createElement("meta");n.httpEquiv="Delegate-CH",n.content="sec-ch-ua-full-version-list https://cloud.51degrees.com; sec-ch-ua-model https://cloud.51degrees.com; sec-ch-ua-platform https://cloud.51degrees.com; sec-ch-ua-platform-version https://cloud.51degrees.com",document.head.appendChild(n);let t=document.createElement("script");t.src=`https://cloud.51degrees.com/api/v4/${A}.js`,t.async=!0,document.head.appendChild(t);let o=()=>{window.fod?window.fod.complete(r=>{let i=r.device,a={ismobile:i.ismobile,hardwarevendor:i.hardwarevendor,hardwaremodel:i.hardwaremodel,hardwarename:i.hardwarename,devicetype:i.devicetype,platformvendor:i.platformvendor,platformname:i.platformname,platformversion:i.platformversion,browservendor:i.browservendor,browsername:i.browsername,browserversion:i.browserversion};e.setContextProperty("device",a)}):setTimeout(o,100)};o()}function g(e){let n={setContext(t,o){e.setContextProperty(t,o)},getContext(t){return e.getContextProperty(t)},analytics:e};return new Proxy(n,{get(t,o){if(o in t)return t[o];let r=e[o];return typeof r=="function"?r.bind(e):r}})}function w(e,n={}){let{autoTrack:t=!0,cookieName:o="__eventn_id"}=n,r=(0,k.jitsuAnalytics)({writeKey:m,host:u,cookieNames:{anonymousId:o}});return r.setContextProperty("partnerKey",e),y(r),t&&f(r,d,p),g(r)}async function C(e,n={}){let{autoTrack:t=!0}=n,{jitsuAnalytics:o}=await import("@jitsu/js"),r=n.cookieName||"__eventn_id",i=null;if(n.getCookie)try{i=await n.getCookie(r)}catch{}if(!i&&(i=`session_${Date.now()}_${Math.random().toString(36).substring(2,15)}`,n.setCookie))try{await n.setCookie(r,i,"path=/; max-age=31536000")}catch{}let a=o({writeKey:m,host:u,cookieNames:{anonymousId:r}});return a.setAnonymousId(i),a.setContextProperty("partnerKey",e),t&&f(a,d,p),g(a)}0&&(module.exports={init,initShopify});
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts", "../src/base-tracker.ts", "../src/shared.ts", "../src/shopify.ts"],
4
- "sourcesContent": ["// Export types\nexport type { CashinTracker, InitOptions } from './shared';\n\n// Export base tracker (synchronous) implementation as default\nexport { init } from './base-tracker';\n\n// Export Shopify-specific (async) implementation\nexport { init as initShopify } from './shopify';\n", "import { jitsuAnalytics } from '@jitsu/js';\nimport { \n CashinTracker, \n InitOptions, \n WRITE_KEY, \n HOST,\n getXPath,\n getCssSelector,\n setupAutoTracking,\n createTracker\n} from './shared';\n\nexport function init(partnerKey: string, options: InitOptions = {}): CashinTracker {\n const { autoTrack = true, cookieName = '__eventn_id' } = options;\n\n const analytics = jitsuAnalytics({\n writeKey: WRITE_KEY,\n host: HOST,\n cookieNames: { anonymousId: cookieName },\n });\n\n analytics.setContextProperty('partnerKey', partnerKey);\n\n if (autoTrack) {\n setupAutoTracking(analytics, getXPath, getCssSelector);\n }\n\n return createTracker(analytics);\n}\n\n", "import type { AnalyticsInterface } from '@jitsu/js';\n\nexport const WRITE_KEY = 'FCPcyGrUKbMlUu65nsX8e2HBCYadBi2b:eE6u4qr1RIUn119gAEliIuzftbpIrbOX';\nexport const HOST = 'https://cmjiyhe5l00003b7ayqcn2bte.d.jitsu.com';\n\nexport interface CashinTracker {\n track(eventName: string, properties?: Record<string, any>): Promise<any>;\n page(name?: string, properties?: Record<string, any>): Promise<any>;\n identify(userId: string, traits?: Record<string, any>): Promise<any>;\n group(groupId: string, traits?: Record<string, any>): Promise<any>;\n reset(): Promise<any>;\n user(): any;\n setAnonymousId(id: string): void;\n setContext(name: string, value: any): void;\n getContext(name: string): any;\n analytics: AnalyticsInterface;\n}\n\nexport interface InitOptions {\n autoTrack?: boolean;\n cookieName?: string;\n getCookie?: (name: string) => Promise<string | null>;\n setCookie?: (name: string, value: string, options?: string) => Promise<void>;\n}\n\nexport function getXPath(element: HTMLElement): string {\n if (typeof document === 'undefined') return '';\n if (element.id) return `//*[@id=\"${element.id}\"]`;\n if (element === document.body) return '/html/body';\n\n let ix = 0;\n const siblings = element.parentNode?.children;\n if (siblings) {\n for (let i = 0; i < siblings.length; i++) {\n const sibling = siblings[i];\n if (sibling === element) {\n return getXPath(element.parentNode as HTMLElement) + '/' + element.tagName.toLowerCase() + '[' + (ix + 1) + ']';\n }\n if (sibling.tagName === element.tagName) ix++;\n }\n }\n return '';\n}\n\nexport function getCssSelector(element: HTMLElement): string {\n if (typeof document === 'undefined') return '';\n if (element.id) return `#${element.id}`;\n\n const path = [];\n let current: HTMLElement | null = element;\n\n while (current && current !== document.body) {\n let selector = current.tagName.toLowerCase();\n if (current.className) {\n selector += '.' + current.className.trim().split(/\\s+/).join('.');\n }\n path.unshift(selector);\n current = current.parentElement;\n }\n\n return path.join(' > ');\n}\n\nexport function setupAutoTracking(analytics: AnalyticsInterface, getXPath: (el: HTMLElement) => string, getCssSelector: (el: HTMLElement) => string) {\n if (typeof window === 'undefined') return;\n\n analytics.page();\n\n // Track SPA route changes\n let lastPath = window.location.pathname;\n const trackPageChange = () => {\n if (lastPath !== window.location.pathname) {\n lastPath = window.location.pathname;\n analytics.page();\n }\n };\n\n window.addEventListener('popstate', trackPageChange);\n\n const wrapHistoryMethod = (method: 'pushState' | 'replaceState') => {\n const original = history[method];\n history[method] = function(...args) {\n original.apply(this, args);\n trackPageChange();\n };\n };\n\n wrapHistoryMethod('pushState');\n wrapHistoryMethod('replaceState');\n\n document.addEventListener('click', (e) => {\n const target = e.target as HTMLElement;\n const rect = target.getBoundingClientRect();\n\n const clickMeta = {\n tagName: target.tagName,\n id: target.id || undefined,\n className: target.className || undefined,\n text: target.textContent?.substring(0, 100),\n xpath: getXPath(target),\n cssSelector: getCssSelector(target),\n href: (target as HTMLAnchorElement).href || undefined,\n coordinates: {\n x: e.clientX,\n y: e.clientY,\n },\n elementPosition: {\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height,\n },\n };\n\n analytics.track('click', {\n 'click-meta': JSON.stringify(clickMeta),\n });\n });\n}\n\nexport function createTracker(analytics: AnalyticsInterface): CashinTracker {\n const tracker = {\n setContext(name: string, value: any) {\n analytics.setContextProperty(name, value);\n },\n getContext(name: string) {\n return analytics.getContextProperty(name);\n },\n analytics,\n };\n\n return new Proxy(tracker, {\n get(target, prop) {\n if (prop in target) {\n return target[prop as keyof typeof target];\n }\n const analyticsProp = analytics[prop as keyof AnalyticsInterface];\n if (typeof analyticsProp === 'function') {\n return analyticsProp.bind(analytics);\n }\n return analyticsProp;\n },\n }) as CashinTracker;\n}\n\n", "import { \n CashinTracker, \n InitOptions, \n WRITE_KEY, \n HOST,\n getXPath,\n getCssSelector,\n setupAutoTracking,\n createTracker\n} from './shared';\n\nexport async function init(partnerKey: string, options: InitOptions = {}): Promise<CashinTracker> {\n const { autoTrack = true } = options;\n \n // Shopify Web Pixels run in a Web Worker context where 'window' is undefined\n // Use dynamic import to load @jitsu/js only when needed, avoiding window access at module init\n const { jitsuAnalytics } = await import('@jitsu/js');\n\n // Get cookieName from options - extension should pass Shopify's session cookie name\n // This ensures jitsu uses the same cookie to group the entire session together\n const cookieName = options.cookieName || '__eventn_id';\n\n // Read existing session ID from cookie on every initialization\n // This ensures the session persists across page navigations\n let sessionId: string | null = null;\n if (options.getCookie) {\n try {\n sessionId = await options.getCookie(cookieName);\n } catch (error) {}\n }\n\n // Only create new session if none exists\n if (!sessionId) {\n sessionId = `session_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;\n if (options.setCookie) {\n try {\n await options.setCookie(cookieName, sessionId, 'path=/; max-age=31536000');\n } catch (error) {}\n }\n }\n\n const analytics = jitsuAnalytics({\n writeKey: WRITE_KEY,\n host: HOST,\n cookieNames: { anonymousId: cookieName },\n });\n\n // Always set anonymousId from cookie to ensure session persistence\n // This ensures jitsu groups all events with the same session ID\n analytics.setAnonymousId(sessionId);\n\n analytics.setContextProperty('partnerKey', partnerKey);\n\n if (autoTrack) {\n setupAutoTracking(analytics, getXPath, getCssSelector);\n }\n\n return createTracker(analytics);\n}\n\n"],
5
- "mappings": "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",
6
- "names": ["index_exports", "__export", "init", "__toCommonJS", "import_js", "WRITE_KEY", "HOST", "getXPath", "element", "ix", "siblings", "sibling", "getCssSelector", "path", "current", "selector", "setupAutoTracking", "analytics", "lastPath", "trackPageChange", "wrapHistoryMethod", "method", "original", "args", "e", "target", "rect", "clickMeta", "createTracker", "tracker", "name", "value", "prop", "analyticsProp", "init", "partnerKey", "options", "autoTrack", "cookieName", "analytics", "WRITE_KEY", "HOST", "setupAutoTracking", "getXPath", "getCssSelector", "createTracker", "init", "partnerKey", "options", "autoTrack", "jitsuAnalytics", "cookieName", "sessionId", "analytics", "WRITE_KEY", "HOST", "setupAutoTracking", "getXPath", "getCssSelector", "createTracker"]
4
+ "sourcesContent": ["// Export types\nexport type { CashinTracker, InitOptions } from './shared';\n\n// Export base tracker (synchronous) implementation as default\nexport { init } from './base-tracker';\n\n// Export Shopify-specific (async) implementation\nexport { init as initShopify } from './shopify';\n", "import { jitsuAnalytics } from '@jitsu/js';\nimport { \n CashinTracker, \n InitOptions, \n WRITE_KEY, \n HOST,\n getXPath,\n getCssSelector,\n setupAutoTracking,\n createTracker,\n load51Degrees\n} from './shared';\n\nexport function init(partnerKey: string, options: InitOptions = {}): CashinTracker {\n const { autoTrack = true, cookieName = '__eventn_id' } = options;\n\n const analytics = jitsuAnalytics({\n writeKey: WRITE_KEY,\n host: HOST,\n cookieNames: { anonymousId: cookieName },\n });\n\n analytics.setContextProperty('partnerKey', partnerKey);\n\n load51Degrees(analytics);\n\n if (autoTrack) {\n setupAutoTracking(analytics, getXPath, getCssSelector);\n }\n\n return createTracker(analytics);\n}\n\n", "import type { AnalyticsInterface } from '@jitsu/js';\n\nexport const WRITE_KEY = 'FCPcyGrUKbMlUu65nsX8e2HBCYadBi2b:eE6u4qr1RIUn119gAEliIuzftbpIrbOX';\nexport const HOST = 'https://cmjiyhe5l00003b7ayqcn2bte.d.jitsu.com';\nexport const FIFTYONE_DEGREES_RESOURCE_KEY = 'AQSGdfl95aaMHWdQ3kg';\n\ndeclare global {\n interface Window {\n fod?: {\n complete: (callback: (data: { device: Record<string, unknown> }) => void) => void\n }\n }\n}\n\nexport interface CashinTracker {\n track(eventName: string, properties?: Record<string, any>): Promise<any>;\n page(name?: string, properties?: Record<string, any>): Promise<any>;\n identify(userId: string, traits?: Record<string, any>): Promise<any>;\n group(groupId: string, traits?: Record<string, any>): Promise<any>;\n reset(): Promise<any>;\n user(): any;\n setAnonymousId(id: string): void;\n setContext(name: string, value: any): void;\n getContext(name: string): any;\n analytics: AnalyticsInterface;\n}\n\nexport interface InitOptions {\n autoTrack?: boolean;\n cookieName?: string;\n getCookie?: (name: string) => Promise<string | null>;\n setCookie?: (name: string, value: string, options?: string) => Promise<void>;\n}\n\nexport function getXPath(element: HTMLElement): string {\n if (typeof document === 'undefined') return '';\n if (element.id) return `//*[@id=\"${element.id}\"]`;\n if (element === document.body) return '/html/body';\n\n let ix = 0;\n const siblings = element.parentNode?.children;\n if (siblings) {\n for (let i = 0; i < siblings.length; i++) {\n const sibling = siblings[i];\n if (sibling === element) {\n return getXPath(element.parentNode as HTMLElement) + '/' + element.tagName.toLowerCase() + '[' + (ix + 1) + ']';\n }\n if (sibling.tagName === element.tagName) ix++;\n }\n }\n return '';\n}\n\nexport function getCssSelector(element: HTMLElement): string {\n if (typeof document === 'undefined') return '';\n if (element.id) return `#${element.id}`;\n\n const path = [];\n let current: HTMLElement | null = element;\n\n while (current && current !== document.body) {\n let selector = current.tagName.toLowerCase();\n if (current.className) {\n selector += '.' + current.className.trim().split(/\\s+/).join('.');\n }\n path.unshift(selector);\n current = current.parentElement;\n }\n\n return path.join(' > ');\n}\n\nexport function setupAutoTracking(analytics: AnalyticsInterface, getXPath: (el: HTMLElement) => string, getCssSelector: (el: HTMLElement) => string) {\n if (typeof window === 'undefined') return;\n\n analytics.page();\n\n // Track SPA route changes\n let lastPath = window.location.pathname;\n const trackPageChange = () => {\n if (lastPath !== window.location.pathname) {\n lastPath = window.location.pathname;\n analytics.page();\n }\n };\n\n window.addEventListener('popstate', trackPageChange);\n\n const wrapHistoryMethod = (method: 'pushState' | 'replaceState') => {\n const original = history[method];\n history[method] = function(...args) {\n original.apply(this, args);\n trackPageChange();\n };\n };\n\n wrapHistoryMethod('pushState');\n wrapHistoryMethod('replaceState');\n\n document.addEventListener('click', (e) => {\n const target = e.target as HTMLElement;\n const rect = target.getBoundingClientRect();\n\n const clickMeta = {\n tagName: target.tagName,\n id: target.id || undefined,\n className: target.className || undefined,\n text: target.textContent?.substring(0, 100),\n xpath: getXPath(target),\n cssSelector: getCssSelector(target),\n href: (target as HTMLAnchorElement).href || undefined,\n coordinates: {\n x: e.clientX,\n y: e.clientY,\n },\n elementPosition: {\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height,\n },\n };\n\n analytics.track('click', {\n 'click-meta': JSON.stringify(clickMeta),\n });\n });\n}\n\nexport function load51Degrees(analytics: AnalyticsInterface) {\n if (typeof window === 'undefined' || typeof document === 'undefined') return;\n\n const meta = document.createElement('meta');\n meta.httpEquiv = 'Delegate-CH';\n meta.content = `sec-ch-ua-full-version-list https://cloud.51degrees.com; sec-ch-ua-model https://cloud.51degrees.com; sec-ch-ua-platform https://cloud.51degrees.com; sec-ch-ua-platform-version https://cloud.51degrees.com`;\n document.head.appendChild(meta);\n\n const script = document.createElement('script');\n script.src = `https://cloud.51degrees.com/api/v4/${FIFTYONE_DEGREES_RESOURCE_KEY}.js`;\n script.async = true;\n document.head.appendChild(script);\n\n const checkAndSetDeviceData = () => {\n if (window.fod) {\n window.fod.complete((data) => {\n const device = data.device;\n const filtered = {\n ismobile: device.ismobile,\n hardwarevendor: device.hardwarevendor,\n hardwaremodel: device.hardwaremodel,\n hardwarename: device.hardwarename,\n devicetype: device.devicetype,\n platformvendor: device.platformvendor,\n platformname: device.platformname,\n platformversion: device.platformversion,\n browservendor: device.browservendor,\n browsername: device.browsername,\n browserversion: device.browserversion,\n };\n analytics.setContextProperty('device', filtered as any);\n });\n } else {\n setTimeout(checkAndSetDeviceData, 100);\n }\n };\n checkAndSetDeviceData();\n}\n\nexport function createTracker(analytics: AnalyticsInterface): CashinTracker {\n\n const tracker = {\n setContext(name: string, value: any) {\n analytics.setContextProperty(name, value);\n },\n getContext(name: string) {\n return analytics.getContextProperty(name);\n },\n analytics,\n };\n\n return new Proxy(tracker, {\n get(target, prop) {\n if (prop in target) {\n return target[prop as keyof typeof target];\n }\n const analyticsProp = analytics[prop as keyof AnalyticsInterface];\n if (typeof analyticsProp === 'function') {\n return analyticsProp.bind(analytics);\n }\n return analyticsProp;\n },\n }) as CashinTracker;\n}\n\n", "import { \n CashinTracker, \n InitOptions, \n WRITE_KEY, \n HOST,\n getXPath,\n getCssSelector,\n setupAutoTracking,\n createTracker\n} from './shared';\n\nexport async function init(partnerKey: string, options: InitOptions = {}): Promise<CashinTracker> {\n const { autoTrack = true } = options;\n \n // Shopify Web Pixels run in a Web Worker context where 'window' is undefined\n // Use dynamic import to load @jitsu/js only when needed, avoiding window access at module init\n const { jitsuAnalytics } = await import('@jitsu/js');\n\n // Get cookieName from options - extension should pass Shopify's session cookie name\n // This ensures jitsu uses the same cookie to group the entire session together\n const cookieName = options.cookieName || '__eventn_id';\n\n // Read existing session ID from cookie on every initialization\n // This ensures the session persists across page navigations\n let sessionId: string | null = null;\n if (options.getCookie) {\n try {\n sessionId = await options.getCookie(cookieName);\n } catch (error) {}\n }\n\n // Only create new session if none exists\n if (!sessionId) {\n sessionId = `session_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;\n if (options.setCookie) {\n try {\n await options.setCookie(cookieName, sessionId, 'path=/; max-age=31536000');\n } catch (error) {}\n }\n }\n\n const analytics = jitsuAnalytics({\n writeKey: WRITE_KEY,\n host: HOST,\n cookieNames: { anonymousId: cookieName },\n });\n\n // Always set anonymousId from cookie to ensure session persistence\n // This ensures jitsu groups all events with the same session ID\n analytics.setAnonymousId(sessionId);\n\n analytics.setContextProperty('partnerKey', partnerKey);\n\n if (autoTrack) {\n setupAutoTracking(analytics, getXPath, getCssSelector);\n }\n\n return createTracker(analytics);\n}\n\n"],
5
+ "mappings": "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",
6
+ "names": ["index_exports", "__export", "init", "__toCommonJS", "import_js", "WRITE_KEY", "HOST", "FIFTYONE_DEGREES_RESOURCE_KEY", "getXPath", "element", "ix", "siblings", "i", "sibling", "getCssSelector", "path", "current", "selector", "setupAutoTracking", "analytics", "lastPath", "trackPageChange", "wrapHistoryMethod", "method", "original", "args", "e", "target", "rect", "clickMeta", "load51Degrees", "meta", "script", "checkAndSetDeviceData", "data", "device", "filtered", "createTracker", "tracker", "name", "value", "prop", "analyticsProp", "init", "partnerKey", "options", "autoTrack", "cookieName", "analytics", "WRITE_KEY", "HOST", "load51Degrees", "setupAutoTracking", "getXPath", "getCssSelector", "createTracker", "init", "partnerKey", "options", "autoTrack", "jitsuAnalytics", "cookieName", "sessionId", "analytics", "WRITE_KEY", "HOST", "setupAutoTracking", "getXPath", "getCssSelector", "createTracker"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var tracker=(()=>{var I=Object.create;var g=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var N=Object.getPrototypeOf,E=Object.prototype.hasOwnProperty;var y=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(n,e)=>(typeof require<"u"?require:n)[e]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var b=(t,n)=>{for(var e in n)g(t,e,{get:n[e],enumerable:!0})},h=(t,n,e,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of P(n))!E.call(t,r)&&r!==e&&g(t,r,{get:()=>n[r],enumerable:!(i=w(n,r))||i.enumerable});return t};var A=(t,n,e)=>(e=t!=null?I(N(t)):{},h(n||!t||!t.__esModule?g(e,"default",{value:t,enumerable:!0}):e,t)),S=t=>h(g({},"__esModule",{value:!0}),t);var H={};b(H,{init:()=>C,initShopify:()=>T});var k=y("@jitsu/js");var d="FCPcyGrUKbMlUu65nsX8e2HBCYadBi2b:eE6u4qr1RIUn119gAEliIuzftbpIrbOX",p="https://cmjiyhe5l00003b7ayqcn2bte.d.jitsu.com";function u(t){if(typeof document>"u")return"";if(t.id)return`//*[@id="${t.id}"]`;if(t===document.body)return"/html/body";let n=0,e=t.parentNode?.children;if(e)for(let i=0;i<e.length;i++){let r=e[i];if(r===t)return u(t.parentNode)+"/"+t.tagName.toLowerCase()+"["+(n+1)+"]";r.tagName===t.tagName&&n++}return""}function f(t){if(typeof document>"u")return"";if(t.id)return`#${t.id}`;let n=[],e=t;for(;e&&e!==document.body;){let i=e.tagName.toLowerCase();e.className&&(i+="."+e.className.trim().split(/\s+/).join(".")),n.unshift(i),e=e.parentElement}return n.join(" > ")}function l(t,n,e){if(typeof window>"u")return;t.page();let i=window.location.pathname,r=()=>{i!==window.location.pathname&&(i=window.location.pathname,t.page())};window.addEventListener("popstate",r);let s=a=>{let o=history[a];history[a]=function(...c){o.apply(this,c),r()}};s("pushState"),s("replaceState"),document.addEventListener("click",a=>{let o=a.target,c=o.getBoundingClientRect(),x={tagName:o.tagName,id:o.id||void 0,className:o.className||void 0,text:o.textContent?.substring(0,100),xpath:n(o),cssSelector:e(o),href:o.href||void 0,coordinates:{x:a.clientX,y:a.clientY},elementPosition:{top:c.top,left:c.left,width:c.width,height:c.height}};t.track("click",{"click-meta":JSON.stringify(x)})})}function m(t){let n={setContext(e,i){t.setContextProperty(e,i)},getContext(e){return t.getContextProperty(e)},analytics:t};return new Proxy(n,{get(e,i){if(i in e)return e[i];let r=t[i];return typeof r=="function"?r.bind(t):r}})}function C(t,n={}){let{autoTrack:e=!0,cookieName:i="__eventn_id"}=n,r=(0,k.jitsuAnalytics)({writeKey:d,host:p,cookieNames:{anonymousId:i}});return r.setContextProperty("partnerKey",t),e&&l(r,u,f),m(r)}async function T(t,n={}){let{autoTrack:e=!0}=n,{jitsuAnalytics:i}=await import("@jitsu/js"),r=n.cookieName||"__eventn_id",s=null;if(n.getCookie)try{s=await n.getCookie(r)}catch{}if(!s&&(s=`session_${Date.now()}_${Math.random().toString(36).substring(2,15)}`,n.setCookie))try{await n.setCookie(r,s,"path=/; max-age=31536000")}catch{}let a=i({writeKey:d,host:p,cookieNames:{anonymousId:r}});return a.setAnonymousId(s),a.setContextProperty("partnerKey",t),e&&l(a,u,f),m(a)}return S(H);})();
1
+ "use strict";var tracker=(()=>{var x=Object.create;var l=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var I=Object.getOwnPropertyNames;var b=Object.getPrototypeOf,P=Object.prototype.hasOwnProperty;var h=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(n,t)=>(typeof require<"u"?require:n)[t]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var N=(e,n)=>{for(var t in n)l(e,t,{get:n[t],enumerable:!0})},y=(e,n,t,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of I(n))!P.call(e,r)&&r!==t&&l(e,r,{get:()=>n[r],enumerable:!(o=E(n,r))||o.enumerable});return e};var S=(e,n,t)=>(t=e!=null?x(b(e)):{},y(n||!e||!e.__esModule?l(t,"default",{value:e,enumerable:!0}):t,e)),A=e=>y(l({},"__esModule",{value:!0}),e);var _={};N(_,{init:()=>C,initShopify:()=>v});var w=h("@jitsu/js");var m="FCPcyGrUKbMlUu65nsX8e2HBCYadBi2b:eE6u4qr1RIUn119gAEliIuzftbpIrbOX",u="https://cmjiyhe5l00003b7ayqcn2bte.d.jitsu.com",H="AQSGdfl95aaMHWdQ3kg";function d(e){if(typeof document>"u")return"";if(e.id)return`//*[@id="${e.id}"]`;if(e===document.body)return"/html/body";let n=0,t=e.parentNode?.children;if(t)for(let o=0;o<t.length;o++){let r=t[o];if(r===e)return d(e.parentNode)+"/"+e.tagName.toLowerCase()+"["+(n+1)+"]";r.tagName===e.tagName&&n++}return""}function p(e){if(typeof document>"u")return"";if(e.id)return`#${e.id}`;let n=[],t=e;for(;t&&t!==document.body;){let o=t.tagName.toLowerCase();t.className&&(o+="."+t.className.trim().split(/\s+/).join(".")),n.unshift(o),t=t.parentElement}return n.join(" > ")}function f(e,n,t){if(typeof window>"u")return;e.page();let o=window.location.pathname,r=()=>{o!==window.location.pathname&&(o=window.location.pathname,e.page())};window.addEventListener("popstate",r);let i=a=>{let s=history[a];history[a]=function(...c){s.apply(this,c),r()}};i("pushState"),i("replaceState"),document.addEventListener("click",a=>{let s=a.target,c=s.getBoundingClientRect(),T={tagName:s.tagName,id:s.id||void 0,className:s.className||void 0,text:s.textContent?.substring(0,100),xpath:n(s),cssSelector:t(s),href:s.href||void 0,coordinates:{x:a.clientX,y:a.clientY},elementPosition:{top:c.top,left:c.left,width:c.width,height:c.height}};e.track("click",{"click-meta":JSON.stringify(T)})})}function k(e){if(typeof window>"u"||typeof document>"u")return;let n=document.createElement("meta");n.httpEquiv="Delegate-CH",n.content="sec-ch-ua-full-version-list https://cloud.51degrees.com; sec-ch-ua-model https://cloud.51degrees.com; sec-ch-ua-platform https://cloud.51degrees.com; sec-ch-ua-platform-version https://cloud.51degrees.com",document.head.appendChild(n);let t=document.createElement("script");t.src=`https://cloud.51degrees.com/api/v4/${H}.js`,t.async=!0,document.head.appendChild(t);let o=()=>{window.fod?window.fod.complete(r=>{let i=r.device,a={ismobile:i.ismobile,hardwarevendor:i.hardwarevendor,hardwaremodel:i.hardwaremodel,hardwarename:i.hardwarename,devicetype:i.devicetype,platformvendor:i.platformvendor,platformname:i.platformname,platformversion:i.platformversion,browservendor:i.browservendor,browsername:i.browsername,browserversion:i.browserversion};e.setContextProperty("device",a)}):setTimeout(o,100)};o()}function g(e){let n={setContext(t,o){e.setContextProperty(t,o)},getContext(t){return e.getContextProperty(t)},analytics:e};return new Proxy(n,{get(t,o){if(o in t)return t[o];let r=e[o];return typeof r=="function"?r.bind(e):r}})}function C(e,n={}){let{autoTrack:t=!0,cookieName:o="__eventn_id"}=n,r=(0,w.jitsuAnalytics)({writeKey:m,host:u,cookieNames:{anonymousId:o}});return r.setContextProperty("partnerKey",e),k(r),t&&f(r,d,p),g(r)}async function v(e,n={}){let{autoTrack:t=!0}=n,{jitsuAnalytics:o}=await import("@jitsu/js"),r=n.cookieName||"__eventn_id",i=null;if(n.getCookie)try{i=await n.getCookie(r)}catch{}if(!i&&(i=`session_${Date.now()}_${Math.random().toString(36).substring(2,15)}`,n.setCookie))try{await n.setCookie(r,i,"path=/; max-age=31536000")}catch{}let a=o({writeKey:m,host:u,cookieNames:{anonymousId:r}});return a.setAnonymousId(i),a.setContextProperty("partnerKey",e),t&&f(a,d,p),g(a)}return A(_);})();
2
2
  //# sourceMappingURL=index.global.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts", "../src/base-tracker.ts", "../src/shared.ts", "../src/shopify.ts"],
4
- "sourcesContent": ["// Export types\nexport type { CashinTracker, InitOptions } from './shared';\n\n// Export base tracker (synchronous) implementation as default\nexport { init } from './base-tracker';\n\n// Export Shopify-specific (async) implementation\nexport { init as initShopify } from './shopify';\n", "import { jitsuAnalytics } from '@jitsu/js';\nimport { \n CashinTracker, \n InitOptions, \n WRITE_KEY, \n HOST,\n getXPath,\n getCssSelector,\n setupAutoTracking,\n createTracker\n} from './shared';\n\nexport function init(partnerKey: string, options: InitOptions = {}): CashinTracker {\n const { autoTrack = true, cookieName = '__eventn_id' } = options;\n\n const analytics = jitsuAnalytics({\n writeKey: WRITE_KEY,\n host: HOST,\n cookieNames: { anonymousId: cookieName },\n });\n\n analytics.setContextProperty('partnerKey', partnerKey);\n\n if (autoTrack) {\n setupAutoTracking(analytics, getXPath, getCssSelector);\n }\n\n return createTracker(analytics);\n}\n\n", "import type { AnalyticsInterface } from '@jitsu/js';\n\nexport const WRITE_KEY = 'FCPcyGrUKbMlUu65nsX8e2HBCYadBi2b:eE6u4qr1RIUn119gAEliIuzftbpIrbOX';\nexport const HOST = 'https://cmjiyhe5l00003b7ayqcn2bte.d.jitsu.com';\n\nexport interface CashinTracker {\n track(eventName: string, properties?: Record<string, any>): Promise<any>;\n page(name?: string, properties?: Record<string, any>): Promise<any>;\n identify(userId: string, traits?: Record<string, any>): Promise<any>;\n group(groupId: string, traits?: Record<string, any>): Promise<any>;\n reset(): Promise<any>;\n user(): any;\n setAnonymousId(id: string): void;\n setContext(name: string, value: any): void;\n getContext(name: string): any;\n analytics: AnalyticsInterface;\n}\n\nexport interface InitOptions {\n autoTrack?: boolean;\n cookieName?: string;\n getCookie?: (name: string) => Promise<string | null>;\n setCookie?: (name: string, value: string, options?: string) => Promise<void>;\n}\n\nexport function getXPath(element: HTMLElement): string {\n if (typeof document === 'undefined') return '';\n if (element.id) return `//*[@id=\"${element.id}\"]`;\n if (element === document.body) return '/html/body';\n\n let ix = 0;\n const siblings = element.parentNode?.children;\n if (siblings) {\n for (let i = 0; i < siblings.length; i++) {\n const sibling = siblings[i];\n if (sibling === element) {\n return getXPath(element.parentNode as HTMLElement) + '/' + element.tagName.toLowerCase() + '[' + (ix + 1) + ']';\n }\n if (sibling.tagName === element.tagName) ix++;\n }\n }\n return '';\n}\n\nexport function getCssSelector(element: HTMLElement): string {\n if (typeof document === 'undefined') return '';\n if (element.id) return `#${element.id}`;\n\n const path = [];\n let current: HTMLElement | null = element;\n\n while (current && current !== document.body) {\n let selector = current.tagName.toLowerCase();\n if (current.className) {\n selector += '.' + current.className.trim().split(/\\s+/).join('.');\n }\n path.unshift(selector);\n current = current.parentElement;\n }\n\n return path.join(' > ');\n}\n\nexport function setupAutoTracking(analytics: AnalyticsInterface, getXPath: (el: HTMLElement) => string, getCssSelector: (el: HTMLElement) => string) {\n if (typeof window === 'undefined') return;\n\n analytics.page();\n\n // Track SPA route changes\n let lastPath = window.location.pathname;\n const trackPageChange = () => {\n if (lastPath !== window.location.pathname) {\n lastPath = window.location.pathname;\n analytics.page();\n }\n };\n\n window.addEventListener('popstate', trackPageChange);\n\n const wrapHistoryMethod = (method: 'pushState' | 'replaceState') => {\n const original = history[method];\n history[method] = function(...args) {\n original.apply(this, args);\n trackPageChange();\n };\n };\n\n wrapHistoryMethod('pushState');\n wrapHistoryMethod('replaceState');\n\n document.addEventListener('click', (e) => {\n const target = e.target as HTMLElement;\n const rect = target.getBoundingClientRect();\n\n const clickMeta = {\n tagName: target.tagName,\n id: target.id || undefined,\n className: target.className || undefined,\n text: target.textContent?.substring(0, 100),\n xpath: getXPath(target),\n cssSelector: getCssSelector(target),\n href: (target as HTMLAnchorElement).href || undefined,\n coordinates: {\n x: e.clientX,\n y: e.clientY,\n },\n elementPosition: {\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height,\n },\n };\n\n analytics.track('click', {\n 'click-meta': JSON.stringify(clickMeta),\n });\n });\n}\n\nexport function createTracker(analytics: AnalyticsInterface): CashinTracker {\n const tracker = {\n setContext(name: string, value: any) {\n analytics.setContextProperty(name, value);\n },\n getContext(name: string) {\n return analytics.getContextProperty(name);\n },\n analytics,\n };\n\n return new Proxy(tracker, {\n get(target, prop) {\n if (prop in target) {\n return target[prop as keyof typeof target];\n }\n const analyticsProp = analytics[prop as keyof AnalyticsInterface];\n if (typeof analyticsProp === 'function') {\n return analyticsProp.bind(analytics);\n }\n return analyticsProp;\n },\n }) as CashinTracker;\n}\n\n", "import { \n CashinTracker, \n InitOptions, \n WRITE_KEY, \n HOST,\n getXPath,\n getCssSelector,\n setupAutoTracking,\n createTracker\n} from './shared';\n\nexport async function init(partnerKey: string, options: InitOptions = {}): Promise<CashinTracker> {\n const { autoTrack = true } = options;\n \n // Shopify Web Pixels run in a Web Worker context where 'window' is undefined\n // Use dynamic import to load @jitsu/js only when needed, avoiding window access at module init\n const { jitsuAnalytics } = await import('@jitsu/js');\n\n // Get cookieName from options - extension should pass Shopify's session cookie name\n // This ensures jitsu uses the same cookie to group the entire session together\n const cookieName = options.cookieName || '__eventn_id';\n\n // Read existing session ID from cookie on every initialization\n // This ensures the session persists across page navigations\n let sessionId: string | null = null;\n if (options.getCookie) {\n try {\n sessionId = await options.getCookie(cookieName);\n } catch (error) {}\n }\n\n // Only create new session if none exists\n if (!sessionId) {\n sessionId = `session_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;\n if (options.setCookie) {\n try {\n await options.setCookie(cookieName, sessionId, 'path=/; max-age=31536000');\n } catch (error) {}\n }\n }\n\n const analytics = jitsuAnalytics({\n writeKey: WRITE_KEY,\n host: HOST,\n cookieNames: { anonymousId: cookieName },\n });\n\n // Always set anonymousId from cookie to ensure session persistence\n // This ensures jitsu groups all events with the same session ID\n analytics.setAnonymousId(sessionId);\n\n analytics.setContextProperty('partnerKey', partnerKey);\n\n if (autoTrack) {\n setupAutoTracking(analytics, getXPath, getCssSelector);\n }\n\n return createTracker(analytics);\n}\n\n"],
5
- "mappings": "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",
6
- "names": ["index_exports", "__export", "init", "import_js", "WRITE_KEY", "HOST", "getXPath", "element", "ix", "siblings", "sibling", "getCssSelector", "path", "current", "selector", "setupAutoTracking", "analytics", "lastPath", "trackPageChange", "wrapHistoryMethod", "method", "original", "args", "e", "target", "rect", "clickMeta", "createTracker", "tracker", "name", "value", "prop", "analyticsProp", "init", "partnerKey", "options", "autoTrack", "cookieName", "analytics", "WRITE_KEY", "HOST", "setupAutoTracking", "getXPath", "getCssSelector", "createTracker", "init", "partnerKey", "options", "autoTrack", "jitsuAnalytics", "cookieName", "sessionId", "analytics", "WRITE_KEY", "HOST", "setupAutoTracking", "getXPath", "getCssSelector", "createTracker"]
4
+ "sourcesContent": ["// Export types\nexport type { CashinTracker, InitOptions } from './shared';\n\n// Export base tracker (synchronous) implementation as default\nexport { init } from './base-tracker';\n\n// Export Shopify-specific (async) implementation\nexport { init as initShopify } from './shopify';\n", "import { jitsuAnalytics } from '@jitsu/js';\nimport { \n CashinTracker, \n InitOptions, \n WRITE_KEY, \n HOST,\n getXPath,\n getCssSelector,\n setupAutoTracking,\n createTracker,\n load51Degrees\n} from './shared';\n\nexport function init(partnerKey: string, options: InitOptions = {}): CashinTracker {\n const { autoTrack = true, cookieName = '__eventn_id' } = options;\n\n const analytics = jitsuAnalytics({\n writeKey: WRITE_KEY,\n host: HOST,\n cookieNames: { anonymousId: cookieName },\n });\n\n analytics.setContextProperty('partnerKey', partnerKey);\n\n load51Degrees(analytics);\n\n if (autoTrack) {\n setupAutoTracking(analytics, getXPath, getCssSelector);\n }\n\n return createTracker(analytics);\n}\n\n", "import type { AnalyticsInterface } from '@jitsu/js';\n\nexport const WRITE_KEY = 'FCPcyGrUKbMlUu65nsX8e2HBCYadBi2b:eE6u4qr1RIUn119gAEliIuzftbpIrbOX';\nexport const HOST = 'https://cmjiyhe5l00003b7ayqcn2bte.d.jitsu.com';\nexport const FIFTYONE_DEGREES_RESOURCE_KEY = 'AQSGdfl95aaMHWdQ3kg';\n\ndeclare global {\n interface Window {\n fod?: {\n complete: (callback: (data: { device: Record<string, unknown> }) => void) => void\n }\n }\n}\n\nexport interface CashinTracker {\n track(eventName: string, properties?: Record<string, any>): Promise<any>;\n page(name?: string, properties?: Record<string, any>): Promise<any>;\n identify(userId: string, traits?: Record<string, any>): Promise<any>;\n group(groupId: string, traits?: Record<string, any>): Promise<any>;\n reset(): Promise<any>;\n user(): any;\n setAnonymousId(id: string): void;\n setContext(name: string, value: any): void;\n getContext(name: string): any;\n analytics: AnalyticsInterface;\n}\n\nexport interface InitOptions {\n autoTrack?: boolean;\n cookieName?: string;\n getCookie?: (name: string) => Promise<string | null>;\n setCookie?: (name: string, value: string, options?: string) => Promise<void>;\n}\n\nexport function getXPath(element: HTMLElement): string {\n if (typeof document === 'undefined') return '';\n if (element.id) return `//*[@id=\"${element.id}\"]`;\n if (element === document.body) return '/html/body';\n\n let ix = 0;\n const siblings = element.parentNode?.children;\n if (siblings) {\n for (let i = 0; i < siblings.length; i++) {\n const sibling = siblings[i];\n if (sibling === element) {\n return getXPath(element.parentNode as HTMLElement) + '/' + element.tagName.toLowerCase() + '[' + (ix + 1) + ']';\n }\n if (sibling.tagName === element.tagName) ix++;\n }\n }\n return '';\n}\n\nexport function getCssSelector(element: HTMLElement): string {\n if (typeof document === 'undefined') return '';\n if (element.id) return `#${element.id}`;\n\n const path = [];\n let current: HTMLElement | null = element;\n\n while (current && current !== document.body) {\n let selector = current.tagName.toLowerCase();\n if (current.className) {\n selector += '.' + current.className.trim().split(/\\s+/).join('.');\n }\n path.unshift(selector);\n current = current.parentElement;\n }\n\n return path.join(' > ');\n}\n\nexport function setupAutoTracking(analytics: AnalyticsInterface, getXPath: (el: HTMLElement) => string, getCssSelector: (el: HTMLElement) => string) {\n if (typeof window === 'undefined') return;\n\n analytics.page();\n\n // Track SPA route changes\n let lastPath = window.location.pathname;\n const trackPageChange = () => {\n if (lastPath !== window.location.pathname) {\n lastPath = window.location.pathname;\n analytics.page();\n }\n };\n\n window.addEventListener('popstate', trackPageChange);\n\n const wrapHistoryMethod = (method: 'pushState' | 'replaceState') => {\n const original = history[method];\n history[method] = function(...args) {\n original.apply(this, args);\n trackPageChange();\n };\n };\n\n wrapHistoryMethod('pushState');\n wrapHistoryMethod('replaceState');\n\n document.addEventListener('click', (e) => {\n const target = e.target as HTMLElement;\n const rect = target.getBoundingClientRect();\n\n const clickMeta = {\n tagName: target.tagName,\n id: target.id || undefined,\n className: target.className || undefined,\n text: target.textContent?.substring(0, 100),\n xpath: getXPath(target),\n cssSelector: getCssSelector(target),\n href: (target as HTMLAnchorElement).href || undefined,\n coordinates: {\n x: e.clientX,\n y: e.clientY,\n },\n elementPosition: {\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height,\n },\n };\n\n analytics.track('click', {\n 'click-meta': JSON.stringify(clickMeta),\n });\n });\n}\n\nexport function load51Degrees(analytics: AnalyticsInterface) {\n if (typeof window === 'undefined' || typeof document === 'undefined') return;\n\n const meta = document.createElement('meta');\n meta.httpEquiv = 'Delegate-CH';\n meta.content = `sec-ch-ua-full-version-list https://cloud.51degrees.com; sec-ch-ua-model https://cloud.51degrees.com; sec-ch-ua-platform https://cloud.51degrees.com; sec-ch-ua-platform-version https://cloud.51degrees.com`;\n document.head.appendChild(meta);\n\n const script = document.createElement('script');\n script.src = `https://cloud.51degrees.com/api/v4/${FIFTYONE_DEGREES_RESOURCE_KEY}.js`;\n script.async = true;\n document.head.appendChild(script);\n\n const checkAndSetDeviceData = () => {\n if (window.fod) {\n window.fod.complete((data) => {\n const device = data.device;\n const filtered = {\n ismobile: device.ismobile,\n hardwarevendor: device.hardwarevendor,\n hardwaremodel: device.hardwaremodel,\n hardwarename: device.hardwarename,\n devicetype: device.devicetype,\n platformvendor: device.platformvendor,\n platformname: device.platformname,\n platformversion: device.platformversion,\n browservendor: device.browservendor,\n browsername: device.browsername,\n browserversion: device.browserversion,\n };\n analytics.setContextProperty('device', filtered as any);\n });\n } else {\n setTimeout(checkAndSetDeviceData, 100);\n }\n };\n checkAndSetDeviceData();\n}\n\nexport function createTracker(analytics: AnalyticsInterface): CashinTracker {\n\n const tracker = {\n setContext(name: string, value: any) {\n analytics.setContextProperty(name, value);\n },\n getContext(name: string) {\n return analytics.getContextProperty(name);\n },\n analytics,\n };\n\n return new Proxy(tracker, {\n get(target, prop) {\n if (prop in target) {\n return target[prop as keyof typeof target];\n }\n const analyticsProp = analytics[prop as keyof AnalyticsInterface];\n if (typeof analyticsProp === 'function') {\n return analyticsProp.bind(analytics);\n }\n return analyticsProp;\n },\n }) as CashinTracker;\n}\n\n", "import { \n CashinTracker, \n InitOptions, \n WRITE_KEY, \n HOST,\n getXPath,\n getCssSelector,\n setupAutoTracking,\n createTracker\n} from './shared';\n\nexport async function init(partnerKey: string, options: InitOptions = {}): Promise<CashinTracker> {\n const { autoTrack = true } = options;\n \n // Shopify Web Pixels run in a Web Worker context where 'window' is undefined\n // Use dynamic import to load @jitsu/js only when needed, avoiding window access at module init\n const { jitsuAnalytics } = await import('@jitsu/js');\n\n // Get cookieName from options - extension should pass Shopify's session cookie name\n // This ensures jitsu uses the same cookie to group the entire session together\n const cookieName = options.cookieName || '__eventn_id';\n\n // Read existing session ID from cookie on every initialization\n // This ensures the session persists across page navigations\n let sessionId: string | null = null;\n if (options.getCookie) {\n try {\n sessionId = await options.getCookie(cookieName);\n } catch (error) {}\n }\n\n // Only create new session if none exists\n if (!sessionId) {\n sessionId = `session_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;\n if (options.setCookie) {\n try {\n await options.setCookie(cookieName, sessionId, 'path=/; max-age=31536000');\n } catch (error) {}\n }\n }\n\n const analytics = jitsuAnalytics({\n writeKey: WRITE_KEY,\n host: HOST,\n cookieNames: { anonymousId: cookieName },\n });\n\n // Always set anonymousId from cookie to ensure session persistence\n // This ensures jitsu groups all events with the same session ID\n analytics.setAnonymousId(sessionId);\n\n analytics.setContextProperty('partnerKey', partnerKey);\n\n if (autoTrack) {\n setupAutoTracking(analytics, getXPath, getCssSelector);\n }\n\n return createTracker(analytics);\n}\n\n"],
5
+ "mappings": "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",
6
+ "names": ["index_exports", "__export", "init", "import_js", "WRITE_KEY", "HOST", "FIFTYONE_DEGREES_RESOURCE_KEY", "getXPath", "element", "ix", "siblings", "i", "sibling", "getCssSelector", "path", "current", "selector", "setupAutoTracking", "analytics", "lastPath", "trackPageChange", "wrapHistoryMethod", "method", "original", "args", "e", "target", "rect", "clickMeta", "load51Degrees", "meta", "script", "checkAndSetDeviceData", "data", "device", "filtered", "createTracker", "tracker", "name", "value", "prop", "analyticsProp", "init", "partnerKey", "options", "autoTrack", "cookieName", "analytics", "WRITE_KEY", "HOST", "load51Degrees", "setupAutoTracking", "getXPath", "getCssSelector", "createTracker", "init", "partnerKey", "options", "autoTrack", "jitsuAnalytics", "cookieName", "sessionId", "analytics", "WRITE_KEY", "HOST", "setupAutoTracking", "getXPath", "getCssSelector", "createTracker"]
7
7
  }
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{jitsuAnalytics as y}from"@jitsu/js";var g="FCPcyGrUKbMlUu65nsX8e2HBCYadBi2b:eE6u4qr1RIUn119gAEliIuzftbpIrbOX",d="https://cmjiyhe5l00003b7ayqcn2bte.d.jitsu.com";function u(t){if(typeof document>"u")return"";if(t.id)return`//*[@id="${t.id}"]`;if(t===document.body)return"/html/body";let r=0,e=t.parentNode?.children;if(e)for(let n=0;n<e.length;n++){let i=e[n];if(i===t)return u(t.parentNode)+"/"+t.tagName.toLowerCase()+"["+(r+1)+"]";i.tagName===t.tagName&&r++}return""}function p(t){if(typeof document>"u")return"";if(t.id)return`#${t.id}`;let r=[],e=t;for(;e&&e!==document.body;){let n=e.tagName.toLowerCase();e.className&&(n+="."+e.className.trim().split(/\s+/).join(".")),r.unshift(n),e=e.parentElement}return r.join(" > ")}function f(t,r,e){if(typeof window>"u")return;t.page();let n=window.location.pathname,i=()=>{n!==window.location.pathname&&(n=window.location.pathname,t.page())};window.addEventListener("popstate",i);let s=a=>{let o=history[a];history[a]=function(...c){o.apply(this,c),i()}};s("pushState"),s("replaceState"),document.addEventListener("click",a=>{let o=a.target,c=o.getBoundingClientRect(),m={tagName:o.tagName,id:o.id||void 0,className:o.className||void 0,text:o.textContent?.substring(0,100),xpath:r(o),cssSelector:e(o),href:o.href||void 0,coordinates:{x:a.clientX,y:a.clientY},elementPosition:{top:c.top,left:c.left,width:c.width,height:c.height}};t.track("click",{"click-meta":JSON.stringify(m)})})}function l(t){let r={setContext(e,n){t.setContextProperty(e,n)},getContext(e){return t.getContextProperty(e)},analytics:t};return new Proxy(r,{get(e,n){if(n in e)return e[n];let i=t[n];return typeof i=="function"?i.bind(t):i}})}function h(t,r={}){let{autoTrack:e=!0,cookieName:n="__eventn_id"}=r,i=y({writeKey:g,host:d,cookieNames:{anonymousId:n}});return i.setContextProperty("partnerKey",t),e&&f(i,u,p),l(i)}async function k(t,r={}){let{autoTrack:e=!0}=r,{jitsuAnalytics:n}=await import("@jitsu/js"),i=r.cookieName||"__eventn_id",s=null;if(r.getCookie)try{s=await r.getCookie(i)}catch{}if(!s&&(s=`session_${Date.now()}_${Math.random().toString(36).substring(2,15)}`,r.setCookie))try{await r.setCookie(i,s,"path=/; max-age=31536000")}catch{}let a=n({writeKey:g,host:d,cookieNames:{anonymousId:i}});return a.setAnonymousId(s),a.setContextProperty("partnerKey",t),e&&f(a,u,p),l(a)}export{h as init,k as initShopify};
1
+ import{jitsuAnalytics as k}from"@jitsu/js";var l="FCPcyGrUKbMlUu65nsX8e2HBCYadBi2b:eE6u4qr1RIUn119gAEliIuzftbpIrbOX",m="https://cmjiyhe5l00003b7ayqcn2bte.d.jitsu.com",y="AQSGdfl95aaMHWdQ3kg";function d(e){if(typeof document>"u")return"";if(e.id)return`//*[@id="${e.id}"]`;if(e===document.body)return"/html/body";let n=0,t=e.parentNode?.children;if(t)for(let r=0;r<t.length;r++){let o=t[r];if(o===e)return d(e.parentNode)+"/"+e.tagName.toLowerCase()+"["+(n+1)+"]";o.tagName===e.tagName&&n++}return""}function u(e){if(typeof document>"u")return"";if(e.id)return`#${e.id}`;let n=[],t=e;for(;t&&t!==document.body;){let r=t.tagName.toLowerCase();t.className&&(r+="."+t.className.trim().split(/\s+/).join(".")),n.unshift(r),t=t.parentElement}return n.join(" > ")}function p(e,n,t){if(typeof window>"u")return;e.page();let r=window.location.pathname,o=()=>{r!==window.location.pathname&&(r=window.location.pathname,e.page())};window.addEventListener("popstate",o);let i=a=>{let s=history[a];history[a]=function(...c){s.apply(this,c),o()}};i("pushState"),i("replaceState"),document.addEventListener("click",a=>{let s=a.target,c=s.getBoundingClientRect(),h={tagName:s.tagName,id:s.id||void 0,className:s.className||void 0,text:s.textContent?.substring(0,100),xpath:n(s),cssSelector:t(s),href:s.href||void 0,coordinates:{x:a.clientX,y:a.clientY},elementPosition:{top:c.top,left:c.left,width:c.width,height:c.height}};e.track("click",{"click-meta":JSON.stringify(h)})})}function g(e){if(typeof window>"u"||typeof document>"u")return;let n=document.createElement("meta");n.httpEquiv="Delegate-CH",n.content="sec-ch-ua-full-version-list https://cloud.51degrees.com; sec-ch-ua-model https://cloud.51degrees.com; sec-ch-ua-platform https://cloud.51degrees.com; sec-ch-ua-platform-version https://cloud.51degrees.com",document.head.appendChild(n);let t=document.createElement("script");t.src=`https://cloud.51degrees.com/api/v4/${y}.js`,t.async=!0,document.head.appendChild(t);let r=()=>{window.fod?window.fod.complete(o=>{let i=o.device,a={ismobile:i.ismobile,hardwarevendor:i.hardwarevendor,hardwaremodel:i.hardwaremodel,hardwarename:i.hardwarename,devicetype:i.devicetype,platformvendor:i.platformvendor,platformname:i.platformname,platformversion:i.platformversion,browservendor:i.browservendor,browsername:i.browsername,browserversion:i.browserversion};e.setContextProperty("device",a)}):setTimeout(r,100)};r()}function f(e){let n={setContext(t,r){e.setContextProperty(t,r)},getContext(t){return e.getContextProperty(t)},analytics:e};return new Proxy(n,{get(t,r){if(r in t)return t[r];let o=e[r];return typeof o=="function"?o.bind(e):o}})}function w(e,n={}){let{autoTrack:t=!0,cookieName:r="__eventn_id"}=n,o=k({writeKey:l,host:m,cookieNames:{anonymousId:r}});return o.setContextProperty("partnerKey",e),g(o),t&&p(o,d,u),f(o)}async function C(e,n={}){let{autoTrack:t=!0}=n,{jitsuAnalytics:r}=await import("@jitsu/js"),o=n.cookieName||"__eventn_id",i=null;if(n.getCookie)try{i=await n.getCookie(o)}catch{}if(!i&&(i=`session_${Date.now()}_${Math.random().toString(36).substring(2,15)}`,n.setCookie))try{await n.setCookie(o,i,"path=/; max-age=31536000")}catch{}let a=r({writeKey:l,host:m,cookieNames:{anonymousId:o}});return a.setAnonymousId(i),a.setContextProperty("partnerKey",e),t&&p(a,d,u),f(a)}export{w as init,C as initShopify};
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/base-tracker.ts", "../src/shared.ts", "../src/shopify.ts"],
4
- "sourcesContent": ["import { jitsuAnalytics } from '@jitsu/js';\nimport { \n CashinTracker, \n InitOptions, \n WRITE_KEY, \n HOST,\n getXPath,\n getCssSelector,\n setupAutoTracking,\n createTracker\n} from './shared';\n\nexport function init(partnerKey: string, options: InitOptions = {}): CashinTracker {\n const { autoTrack = true, cookieName = '__eventn_id' } = options;\n\n const analytics = jitsuAnalytics({\n writeKey: WRITE_KEY,\n host: HOST,\n cookieNames: { anonymousId: cookieName },\n });\n\n analytics.setContextProperty('partnerKey', partnerKey);\n\n if (autoTrack) {\n setupAutoTracking(analytics, getXPath, getCssSelector);\n }\n\n return createTracker(analytics);\n}\n\n", "import type { AnalyticsInterface } from '@jitsu/js';\n\nexport const WRITE_KEY = 'FCPcyGrUKbMlUu65nsX8e2HBCYadBi2b:eE6u4qr1RIUn119gAEliIuzftbpIrbOX';\nexport const HOST = 'https://cmjiyhe5l00003b7ayqcn2bte.d.jitsu.com';\n\nexport interface CashinTracker {\n track(eventName: string, properties?: Record<string, any>): Promise<any>;\n page(name?: string, properties?: Record<string, any>): Promise<any>;\n identify(userId: string, traits?: Record<string, any>): Promise<any>;\n group(groupId: string, traits?: Record<string, any>): Promise<any>;\n reset(): Promise<any>;\n user(): any;\n setAnonymousId(id: string): void;\n setContext(name: string, value: any): void;\n getContext(name: string): any;\n analytics: AnalyticsInterface;\n}\n\nexport interface InitOptions {\n autoTrack?: boolean;\n cookieName?: string;\n getCookie?: (name: string) => Promise<string | null>;\n setCookie?: (name: string, value: string, options?: string) => Promise<void>;\n}\n\nexport function getXPath(element: HTMLElement): string {\n if (typeof document === 'undefined') return '';\n if (element.id) return `//*[@id=\"${element.id}\"]`;\n if (element === document.body) return '/html/body';\n\n let ix = 0;\n const siblings = element.parentNode?.children;\n if (siblings) {\n for (let i = 0; i < siblings.length; i++) {\n const sibling = siblings[i];\n if (sibling === element) {\n return getXPath(element.parentNode as HTMLElement) + '/' + element.tagName.toLowerCase() + '[' + (ix + 1) + ']';\n }\n if (sibling.tagName === element.tagName) ix++;\n }\n }\n return '';\n}\n\nexport function getCssSelector(element: HTMLElement): string {\n if (typeof document === 'undefined') return '';\n if (element.id) return `#${element.id}`;\n\n const path = [];\n let current: HTMLElement | null = element;\n\n while (current && current !== document.body) {\n let selector = current.tagName.toLowerCase();\n if (current.className) {\n selector += '.' + current.className.trim().split(/\\s+/).join('.');\n }\n path.unshift(selector);\n current = current.parentElement;\n }\n\n return path.join(' > ');\n}\n\nexport function setupAutoTracking(analytics: AnalyticsInterface, getXPath: (el: HTMLElement) => string, getCssSelector: (el: HTMLElement) => string) {\n if (typeof window === 'undefined') return;\n\n analytics.page();\n\n // Track SPA route changes\n let lastPath = window.location.pathname;\n const trackPageChange = () => {\n if (lastPath !== window.location.pathname) {\n lastPath = window.location.pathname;\n analytics.page();\n }\n };\n\n window.addEventListener('popstate', trackPageChange);\n\n const wrapHistoryMethod = (method: 'pushState' | 'replaceState') => {\n const original = history[method];\n history[method] = function(...args) {\n original.apply(this, args);\n trackPageChange();\n };\n };\n\n wrapHistoryMethod('pushState');\n wrapHistoryMethod('replaceState');\n\n document.addEventListener('click', (e) => {\n const target = e.target as HTMLElement;\n const rect = target.getBoundingClientRect();\n\n const clickMeta = {\n tagName: target.tagName,\n id: target.id || undefined,\n className: target.className || undefined,\n text: target.textContent?.substring(0, 100),\n xpath: getXPath(target),\n cssSelector: getCssSelector(target),\n href: (target as HTMLAnchorElement).href || undefined,\n coordinates: {\n x: e.clientX,\n y: e.clientY,\n },\n elementPosition: {\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height,\n },\n };\n\n analytics.track('click', {\n 'click-meta': JSON.stringify(clickMeta),\n });\n });\n}\n\nexport function createTracker(analytics: AnalyticsInterface): CashinTracker {\n const tracker = {\n setContext(name: string, value: any) {\n analytics.setContextProperty(name, value);\n },\n getContext(name: string) {\n return analytics.getContextProperty(name);\n },\n analytics,\n };\n\n return new Proxy(tracker, {\n get(target, prop) {\n if (prop in target) {\n return target[prop as keyof typeof target];\n }\n const analyticsProp = analytics[prop as keyof AnalyticsInterface];\n if (typeof analyticsProp === 'function') {\n return analyticsProp.bind(analytics);\n }\n return analyticsProp;\n },\n }) as CashinTracker;\n}\n\n", "import { \n CashinTracker, \n InitOptions, \n WRITE_KEY, \n HOST,\n getXPath,\n getCssSelector,\n setupAutoTracking,\n createTracker\n} from './shared';\n\nexport async function init(partnerKey: string, options: InitOptions = {}): Promise<CashinTracker> {\n const { autoTrack = true } = options;\n \n // Shopify Web Pixels run in a Web Worker context where 'window' is undefined\n // Use dynamic import to load @jitsu/js only when needed, avoiding window access at module init\n const { jitsuAnalytics } = await import('@jitsu/js');\n\n // Get cookieName from options - extension should pass Shopify's session cookie name\n // This ensures jitsu uses the same cookie to group the entire session together\n const cookieName = options.cookieName || '__eventn_id';\n\n // Read existing session ID from cookie on every initialization\n // This ensures the session persists across page navigations\n let sessionId: string | null = null;\n if (options.getCookie) {\n try {\n sessionId = await options.getCookie(cookieName);\n } catch (error) {}\n }\n\n // Only create new session if none exists\n if (!sessionId) {\n sessionId = `session_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;\n if (options.setCookie) {\n try {\n await options.setCookie(cookieName, sessionId, 'path=/; max-age=31536000');\n } catch (error) {}\n }\n }\n\n const analytics = jitsuAnalytics({\n writeKey: WRITE_KEY,\n host: HOST,\n cookieNames: { anonymousId: cookieName },\n });\n\n // Always set anonymousId from cookie to ensure session persistence\n // This ensures jitsu groups all events with the same session ID\n analytics.setAnonymousId(sessionId);\n\n analytics.setContextProperty('partnerKey', partnerKey);\n\n if (autoTrack) {\n setupAutoTracking(analytics, getXPath, getCssSelector);\n }\n\n return createTracker(analytics);\n}\n\n"],
5
- "mappings": "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",
6
- "names": ["jitsuAnalytics", "WRITE_KEY", "HOST", "getXPath", "element", "ix", "siblings", "i", "sibling", "getCssSelector", "path", "current", "selector", "setupAutoTracking", "analytics", "lastPath", "trackPageChange", "wrapHistoryMethod", "method", "original", "args", "e", "target", "rect", "clickMeta", "createTracker", "tracker", "name", "value", "prop", "analyticsProp", "init", "partnerKey", "options", "autoTrack", "cookieName", "analytics", "jitsuAnalytics", "WRITE_KEY", "HOST", "setupAutoTracking", "getXPath", "getCssSelector", "createTracker", "init", "partnerKey", "options", "autoTrack", "jitsuAnalytics", "cookieName", "sessionId", "analytics", "WRITE_KEY", "HOST", "setupAutoTracking", "getXPath", "getCssSelector", "createTracker"]
4
+ "sourcesContent": ["import { jitsuAnalytics } from '@jitsu/js';\nimport { \n CashinTracker, \n InitOptions, \n WRITE_KEY, \n HOST,\n getXPath,\n getCssSelector,\n setupAutoTracking,\n createTracker,\n load51Degrees\n} from './shared';\n\nexport function init(partnerKey: string, options: InitOptions = {}): CashinTracker {\n const { autoTrack = true, cookieName = '__eventn_id' } = options;\n\n const analytics = jitsuAnalytics({\n writeKey: WRITE_KEY,\n host: HOST,\n cookieNames: { anonymousId: cookieName },\n });\n\n analytics.setContextProperty('partnerKey', partnerKey);\n\n load51Degrees(analytics);\n\n if (autoTrack) {\n setupAutoTracking(analytics, getXPath, getCssSelector);\n }\n\n return createTracker(analytics);\n}\n\n", "import type { AnalyticsInterface } from '@jitsu/js';\n\nexport const WRITE_KEY = 'FCPcyGrUKbMlUu65nsX8e2HBCYadBi2b:eE6u4qr1RIUn119gAEliIuzftbpIrbOX';\nexport const HOST = 'https://cmjiyhe5l00003b7ayqcn2bte.d.jitsu.com';\nexport const FIFTYONE_DEGREES_RESOURCE_KEY = 'AQSGdfl95aaMHWdQ3kg';\n\ndeclare global {\n interface Window {\n fod?: {\n complete: (callback: (data: { device: Record<string, unknown> }) => void) => void\n }\n }\n}\n\nexport interface CashinTracker {\n track(eventName: string, properties?: Record<string, any>): Promise<any>;\n page(name?: string, properties?: Record<string, any>): Promise<any>;\n identify(userId: string, traits?: Record<string, any>): Promise<any>;\n group(groupId: string, traits?: Record<string, any>): Promise<any>;\n reset(): Promise<any>;\n user(): any;\n setAnonymousId(id: string): void;\n setContext(name: string, value: any): void;\n getContext(name: string): any;\n analytics: AnalyticsInterface;\n}\n\nexport interface InitOptions {\n autoTrack?: boolean;\n cookieName?: string;\n getCookie?: (name: string) => Promise<string | null>;\n setCookie?: (name: string, value: string, options?: string) => Promise<void>;\n}\n\nexport function getXPath(element: HTMLElement): string {\n if (typeof document === 'undefined') return '';\n if (element.id) return `//*[@id=\"${element.id}\"]`;\n if (element === document.body) return '/html/body';\n\n let ix = 0;\n const siblings = element.parentNode?.children;\n if (siblings) {\n for (let i = 0; i < siblings.length; i++) {\n const sibling = siblings[i];\n if (sibling === element) {\n return getXPath(element.parentNode as HTMLElement) + '/' + element.tagName.toLowerCase() + '[' + (ix + 1) + ']';\n }\n if (sibling.tagName === element.tagName) ix++;\n }\n }\n return '';\n}\n\nexport function getCssSelector(element: HTMLElement): string {\n if (typeof document === 'undefined') return '';\n if (element.id) return `#${element.id}`;\n\n const path = [];\n let current: HTMLElement | null = element;\n\n while (current && current !== document.body) {\n let selector = current.tagName.toLowerCase();\n if (current.className) {\n selector += '.' + current.className.trim().split(/\\s+/).join('.');\n }\n path.unshift(selector);\n current = current.parentElement;\n }\n\n return path.join(' > ');\n}\n\nexport function setupAutoTracking(analytics: AnalyticsInterface, getXPath: (el: HTMLElement) => string, getCssSelector: (el: HTMLElement) => string) {\n if (typeof window === 'undefined') return;\n\n analytics.page();\n\n // Track SPA route changes\n let lastPath = window.location.pathname;\n const trackPageChange = () => {\n if (lastPath !== window.location.pathname) {\n lastPath = window.location.pathname;\n analytics.page();\n }\n };\n\n window.addEventListener('popstate', trackPageChange);\n\n const wrapHistoryMethod = (method: 'pushState' | 'replaceState') => {\n const original = history[method];\n history[method] = function(...args) {\n original.apply(this, args);\n trackPageChange();\n };\n };\n\n wrapHistoryMethod('pushState');\n wrapHistoryMethod('replaceState');\n\n document.addEventListener('click', (e) => {\n const target = e.target as HTMLElement;\n const rect = target.getBoundingClientRect();\n\n const clickMeta = {\n tagName: target.tagName,\n id: target.id || undefined,\n className: target.className || undefined,\n text: target.textContent?.substring(0, 100),\n xpath: getXPath(target),\n cssSelector: getCssSelector(target),\n href: (target as HTMLAnchorElement).href || undefined,\n coordinates: {\n x: e.clientX,\n y: e.clientY,\n },\n elementPosition: {\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height,\n },\n };\n\n analytics.track('click', {\n 'click-meta': JSON.stringify(clickMeta),\n });\n });\n}\n\nexport function load51Degrees(analytics: AnalyticsInterface) {\n if (typeof window === 'undefined' || typeof document === 'undefined') return;\n\n const meta = document.createElement('meta');\n meta.httpEquiv = 'Delegate-CH';\n meta.content = `sec-ch-ua-full-version-list https://cloud.51degrees.com; sec-ch-ua-model https://cloud.51degrees.com; sec-ch-ua-platform https://cloud.51degrees.com; sec-ch-ua-platform-version https://cloud.51degrees.com`;\n document.head.appendChild(meta);\n\n const script = document.createElement('script');\n script.src = `https://cloud.51degrees.com/api/v4/${FIFTYONE_DEGREES_RESOURCE_KEY}.js`;\n script.async = true;\n document.head.appendChild(script);\n\n const checkAndSetDeviceData = () => {\n if (window.fod) {\n window.fod.complete((data) => {\n const device = data.device;\n const filtered = {\n ismobile: device.ismobile,\n hardwarevendor: device.hardwarevendor,\n hardwaremodel: device.hardwaremodel,\n hardwarename: device.hardwarename,\n devicetype: device.devicetype,\n platformvendor: device.platformvendor,\n platformname: device.platformname,\n platformversion: device.platformversion,\n browservendor: device.browservendor,\n browsername: device.browsername,\n browserversion: device.browserversion,\n };\n analytics.setContextProperty('device', filtered as any);\n });\n } else {\n setTimeout(checkAndSetDeviceData, 100);\n }\n };\n checkAndSetDeviceData();\n}\n\nexport function createTracker(analytics: AnalyticsInterface): CashinTracker {\n\n const tracker = {\n setContext(name: string, value: any) {\n analytics.setContextProperty(name, value);\n },\n getContext(name: string) {\n return analytics.getContextProperty(name);\n },\n analytics,\n };\n\n return new Proxy(tracker, {\n get(target, prop) {\n if (prop in target) {\n return target[prop as keyof typeof target];\n }\n const analyticsProp = analytics[prop as keyof AnalyticsInterface];\n if (typeof analyticsProp === 'function') {\n return analyticsProp.bind(analytics);\n }\n return analyticsProp;\n },\n }) as CashinTracker;\n}\n\n", "import { \n CashinTracker, \n InitOptions, \n WRITE_KEY, \n HOST,\n getXPath,\n getCssSelector,\n setupAutoTracking,\n createTracker\n} from './shared';\n\nexport async function init(partnerKey: string, options: InitOptions = {}): Promise<CashinTracker> {\n const { autoTrack = true } = options;\n \n // Shopify Web Pixels run in a Web Worker context where 'window' is undefined\n // Use dynamic import to load @jitsu/js only when needed, avoiding window access at module init\n const { jitsuAnalytics } = await import('@jitsu/js');\n\n // Get cookieName from options - extension should pass Shopify's session cookie name\n // This ensures jitsu uses the same cookie to group the entire session together\n const cookieName = options.cookieName || '__eventn_id';\n\n // Read existing session ID from cookie on every initialization\n // This ensures the session persists across page navigations\n let sessionId: string | null = null;\n if (options.getCookie) {\n try {\n sessionId = await options.getCookie(cookieName);\n } catch (error) {}\n }\n\n // Only create new session if none exists\n if (!sessionId) {\n sessionId = `session_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;\n if (options.setCookie) {\n try {\n await options.setCookie(cookieName, sessionId, 'path=/; max-age=31536000');\n } catch (error) {}\n }\n }\n\n const analytics = jitsuAnalytics({\n writeKey: WRITE_KEY,\n host: HOST,\n cookieNames: { anonymousId: cookieName },\n });\n\n // Always set anonymousId from cookie to ensure session persistence\n // This ensures jitsu groups all events with the same session ID\n analytics.setAnonymousId(sessionId);\n\n analytics.setContextProperty('partnerKey', partnerKey);\n\n if (autoTrack) {\n setupAutoTracking(analytics, getXPath, getCssSelector);\n }\n\n return createTracker(analytics);\n}\n\n"],
5
+ "mappings": "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",
6
+ "names": ["jitsuAnalytics", "WRITE_KEY", "HOST", "FIFTYONE_DEGREES_RESOURCE_KEY", "getXPath", "element", "ix", "siblings", "i", "sibling", "getCssSelector", "path", "current", "selector", "setupAutoTracking", "analytics", "lastPath", "trackPageChange", "wrapHistoryMethod", "method", "original", "args", "e", "target", "rect", "clickMeta", "load51Degrees", "meta", "script", "checkAndSetDeviceData", "data", "device", "filtered", "createTracker", "tracker", "name", "value", "prop", "analyticsProp", "init", "partnerKey", "options", "autoTrack", "cookieName", "analytics", "jitsuAnalytics", "WRITE_KEY", "HOST", "load51Degrees", "setupAutoTracking", "getXPath", "getCssSelector", "createTracker", "init", "partnerKey", "options", "autoTrack", "jitsuAnalytics", "cookieName", "sessionId", "analytics", "WRITE_KEY", "HOST", "setupAutoTracking", "getXPath", "getCssSelector", "createTracker"]
7
7
  }
package/dist/shared.d.ts CHANGED
@@ -1,6 +1,16 @@
1
1
  import type { AnalyticsInterface } from '@jitsu/js';
2
2
  export declare const WRITE_KEY = "FCPcyGrUKbMlUu65nsX8e2HBCYadBi2b:eE6u4qr1RIUn119gAEliIuzftbpIrbOX";
3
3
  export declare const HOST = "https://cmjiyhe5l00003b7ayqcn2bte.d.jitsu.com";
4
+ export declare const FIFTYONE_DEGREES_RESOURCE_KEY = "AQSGdfl95aaMHWdQ3kg";
5
+ declare global {
6
+ interface Window {
7
+ fod?: {
8
+ complete: (callback: (data: {
9
+ device: Record<string, unknown>;
10
+ }) => void) => void;
11
+ };
12
+ }
13
+ }
4
14
  export interface CashinTracker {
5
15
  track(eventName: string, properties?: Record<string, any>): Promise<any>;
6
16
  page(name?: string, properties?: Record<string, any>): Promise<any>;
@@ -22,4 +32,5 @@ export interface InitOptions {
22
32
  export declare function getXPath(element: HTMLElement): string;
23
33
  export declare function getCssSelector(element: HTMLElement): string;
24
34
  export declare function setupAutoTracking(analytics: AnalyticsInterface, getXPath: (el: HTMLElement) => string, getCssSelector: (el: HTMLElement) => string): void;
35
+ export declare function load51Degrees(analytics: AnalyticsInterface): void;
25
36
  export declare function createTracker(analytics: AnalyticsInterface): CashinTracker;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cashin/js-sdk",
3
- "version": "1.0.7",
3
+ "version": "1.0.8",
4
4
  "main": "./dist/index.cjs",
5
5
  "module": "./dist/index.js",
6
6
  "devDependencies": {