UNPKG

@ref247/tracker-embed

Version:

Ref247.io tracker embed script for your websites!

73 lines (67 loc) 2.19 kB
import FingerprintJS from '@fingerprintjs/fingerprintjs'; // src/fingerprint.ts let cachedFingerprint = null; async function initFingerprint() { if (cachedFingerprint) return cachedFingerprint; try { const fp = await FingerprintJS.load(); const result = await fp.get(); cachedFingerprint = result.visitorId; return cachedFingerprint; } catch (err) { console.error('[Ref247] Failed to generate fingerprint:', err); throw new Error('Fingerprint generation failed'); } } // src/utils.ts function buildTrackingUrl(linkUri, fingerPrintHash) { const endpoint = 'https://ref247.io/tracking'; const params = new URLSearchParams({ linkUri, fingerPrintHash }); return `${endpoint}?${params.toString()}`; } // src/tracker.ts async function track(linkUri, fingerPrintHash) { const url = buildTrackingUrl(linkUri, fingerPrintHash); try { const res = await fetch(url, { method: 'GET', mode: 'no-cors', cache: 'no-store' }); // Since it's a no-cors request, we can’t inspect the response, just fire and forget console.debug('[Ref247] Tracking request sent:', url); } catch (err) { console.error('[Ref247] Tracking request failed:', err); // Optionally, queue or retry if needed } } class Ref247Tracker { fingerPrintHash; constructor(fingerPrintHash) { this.fingerPrintHash = fingerPrintHash; } static async init() { const fingerPrintHash = await initFingerprint(); return new Ref247Tracker(fingerPrintHash); } trackClick(linkUri) { return track(linkUri, this.fingerPrintHash); } trackPageView(linkUri) { return track(linkUri, this.fingerPrintHash); } trackOnClick(selector, { linkUri }) { const el = document.querySelector(selector); if (!el) return console.warn(`Ref247Tracker: Element not found for selector ${selector}`); el.addEventListener('click', () => this.trackClick(linkUri)); } } export { Ref247Tracker }; //# sourceMappingURL=ref247-tracker-embed.mjs.map