@click-chutney/clickanalytics
Version:
Simplified analytics library inspired by Vercel Analytics - privacy-first, lightweight tracking
3 lines (2 loc) • 5.5 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0});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 t={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(t)}event(e,i){if(!this.isEnabled)return;const t={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(t)}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:{}})),t={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(t)});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 t(t={}){if(i)return console.warn("[ClickAnalytics] Already initialized. Use reset() to reinitialize."),i;const n=t.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}()||o();if(!n)return t.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 s={trackingId:n,debug:t.debug||!1,disableInDev:void 0===t.disableInDev||t.disableInDev,apiUrl:t.apiUrl,beforeSend:t.beforeSend};try{return i=new e(s),"undefined"!=typeof window&&(window.clickAnalytics=i,window.caPV=(e,t)=>i?.pageview(e,t),window.caEV=(e,t)=>i?.event(e,t),window.caID=e=>i?.identify(e)),s.debug&&console.log("[ClickAnalytics] Inject initialized successfully"),i}catch(e){return s.debug&&console.error("[ClickAnalytics] Failed to initialize:",e),null}}function n(){return i||("undefined"!=typeof window?window.clickAnalytics:null)}function o(){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=o();e&&!i&&t({trackingId:e,debug:!1})};"loading"===document.readyState?document.addEventListener("DOMContentLoaded",e):e()}exports.ClickAnalyticsCore=e,exports.default=t,exports.event=function(e,i){const t=n();t?t.event(e,i):console.warn("[ClickAnalytics] Not initialized. Call inject() first.")},exports.flush=async function(){const e=n();e?await e.flush():console.warn("[ClickAnalytics] Not initialized. Call inject() first.")},exports.getAnalytics=n,exports.identify=function(e){const i=n();i?i.identify(e):console.warn("[ClickAnalytics] Not initialized. Call inject() first.")},exports.inject=t,exports.pageview=function(e,i){const t=n();t?t.pageview(e,i):console.warn("[ClickAnalytics] Not initialized. Call inject() first.")},exports.reset=function(){i&&i.reset(),i=null,"undefined"!=typeof window&&(delete window.clickAnalytics,delete window.caPV,delete window.caEV,delete window.caID)};
//# sourceMappingURL=index.js.map