UNPKG

@click-chutney/clickanalytics

Version:

Simplified analytics library inspired by Vercel Analytics - privacy-first, lightweight tracking

3 lines (2 loc) 5.38 kB
class e{constructor(e){if(this.queue=[],this.isEnabled=!0,this.config=e,this.sessionId=this.generateSessionId(),e.disableInDev&&this.isDevelopment())return this.isEnabled=!1,void(e.debug&&console.log("[ClickAnalytics] Disabled in development mode"));this.initialize()}isDevelopment(){return("undefined"==typeof process||!process.env)&&("undefined"!=typeof location&&("localhost"===location.hostname||"127.0.0.1"===location.hostname))}initialize(){this.config.debug&&console.log("[ClickAnalytics] Initialized with tracking ID:",this.config.trackingId),this.pageview()}generateSessionId(){return"session_"+Math.random().toString(36).substring(2)+Date.now().toString(36)}getApiUrl(){return this.config.apiUrl||"https://xegjekvvvzkhk6ssyzuih4rdbu0hqbzh.lambda-url.ap-south-1.on.aws/v1/tracker"}pageview(e,i){if(!this.isEnabled)return;const n={type:"pageview",url:e||("undefined"!=typeof window?window.location.pathname:void 0),title:i||("undefined"!=typeof document?document.title:void 0),timestamp:Date.now(),sessionId:this.sessionId,userId:this.userId};this.track(n)}event(e,i){if(!this.isEnabled)return;const n={type:"event",event:e,properties:i||{},timestamp:Date.now(),sessionId:this.sessionId,userId:this.userId,url:"undefined"!=typeof window?window.location.pathname:void 0};this.track(n)}identify(e){this.isEnabled&&(this.userId=e,this.config.debug&&console.log("[ClickAnalytics] User identified:",e))}track(e){if(this.config.beforeSend){const i=this.config.beforeSend(e);if(!1===i)return void(this.config.debug&&console.log("[ClickAnalytics] Event blocked by beforeSend filter"));e=i}this.queue.push(e),this.config.debug&&console.log("[ClickAnalytics] Event queued:",e),this.flush()}async flush(){if(!this.isEnabled||0===this.queue.length)return;const e=[...this.queue];this.queue=[];const i=e.map(e=>({trackingId:this.config.trackingId,event:"pageview"===e.type?"pageview":e.event,domain:"undefined"!=typeof window?window.location.hostname:void 0,url:e.url||("undefined"!=typeof window?window.location.href:void 0),title:e.title||("undefined"!=typeof document?document.title:void 0),referrer:"undefined"!=typeof document?document.referrer:void 0,sessionId:e.sessionId,userId:e.userId,timestamp:e.timestamp,data:"event"===e.type?e.properties:{}})),n={trackingId:this.config.trackingId,events:i,domain:"undefined"!=typeof window?window.location.hostname:void 0};try{const i=await fetch(this.getApiUrl(),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});if(!i.ok)throw new Error(`Analytics API error: ${i.status}`);this.config.debug&&console.log("[ClickAnalytics] Events sent successfully:",e.length)}catch(i){this.config.debug&&console.error("[ClickAnalytics] Failed to send events:",i),this.queue.length<100&&this.queue.unshift(...e)}}reset(){this.sessionId=this.generateSessionId(),this.userId=void 0,this.queue=[],this.config.debug&&console.log("[ClickAnalytics] Session reset")}setConfig(e){this.config={...this.config,...e},this.config.debug&&console.log("[ClickAnalytics] Config updated")}}let i=null;function n(n={}){if(i)return console.warn("[ClickAnalytics] Already initialized. Use reset() to reinitialize."),i;const t=n.trackingId||function(){if("undefined"!=typeof process&&process.env)return process.env.NEXT_PUBLIC_CLICKANALYTICS_ID||process.env.NEXT_PUBLIC_CLICKCHUTNEY_ID||process.env.CLICKANALYTICS_TRACKING_ID;return}()||a();if(!t)return n.debug&&console.warn('[ClickAnalytics] No tracking ID found.\nProvide trackingId in config or add a meta tag:\n<meta name="clickanalytics-tracking-id" content="your-tracking-id">\nGet your tracking ID from: https://clickchutney.com/dashboard'),null;const o={trackingId:t,debug:n.debug||!1,disableInDev:void 0===n.disableInDev||n.disableInDev,apiUrl:n.apiUrl,beforeSend:n.beforeSend};try{return i=new e(o),"undefined"!=typeof window&&(window.clickAnalytics=i,window.caPV=(e,n)=>i?.pageview(e,n),window.caEV=(e,n)=>i?.event(e,n),window.caID=e=>i?.identify(e)),o.debug&&console.log("[ClickAnalytics] Inject initialized successfully"),i}catch(e){return o.debug&&console.error("[ClickAnalytics] Failed to initialize:",e),null}}function t(){return i||("undefined"!=typeof window?window.clickAnalytics:null)}function o(e,i){const n=t();n?n.pageview(e,i):console.warn("[ClickAnalytics] Not initialized. Call inject() first.")}function s(e,i){const n=t();n?n.event(e,i):console.warn("[ClickAnalytics] Not initialized. Call inject() first.")}function c(e){const i=t();i?i.identify(e):console.warn("[ClickAnalytics] Not initialized. Call inject() first.")}async function d(){const e=t();e?await e.flush():console.warn("[ClickAnalytics] Not initialized. Call inject() first.")}function l(){i&&i.reset(),i=null,"undefined"!=typeof window&&(delete window.clickAnalytics,delete window.caPV,delete window.caEV,delete window.caID)}function a(){if("undefined"!=typeof document){const e=document.querySelector('meta[name="clickanalytics-tracking-id"]');if(e&&e.content)return e.content;const i=document.querySelector('meta[name="clickchutney-site-id"]');if(i&&i.content)return i.content}}if("undefined"!=typeof window){const e=()=>{const e=a();e&&!i&&n({trackingId:e,debug:!1})};"loading"===document.readyState?document.addEventListener("DOMContentLoaded",e):e()}export{s as event,d as flush,t as getAnalytics,c as identify,n as inject,o as pageview,l as reset}; //# sourceMappingURL=inject.esm.js.map