From 64505bb4177ca5f2c29ba3716a4764756de40d34 Mon Sep 17 00:00:00 2001 From: Mike Cao Date: Wed, 7 May 2025 16:16:38 -0700 Subject: [PATCH] Added before-send attribute to tracker. --- src/tracker/index.js | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/tracker/index.js b/src/tracker/index.js index d155c2fd..905ba434 100644 --- a/src/tracker/index.js +++ b/src/tracker/index.js @@ -20,6 +20,7 @@ const attr = currentScript.getAttribute.bind(currentScript); const website = attr(_data + 'website-id'); const hostUrl = attr(_data + 'host-url'); + const beforeSend = attr(_data + 'before-send'); const tag = attr(_data + 'tag') || undefined; const autoTrack = attr(_data + 'auto-track') !== _false; const dnt = attr(_data + 'do-not-track') === _true; @@ -138,6 +139,15 @@ const send = async (payload, type = 'event') => { if (trackingDisabled()) return; + + const callback = window[beforeSend]; + + if (typeof callback === 'function') { + payload = callback(type, payload); + } + + if (!payload) return; + try { const res = await fetch(endpoint, { method: 'POST', @@ -168,10 +178,10 @@ } }; - const track = (obj, data) => { - if (typeof obj === 'string') return send({ ...getPayload(), name: obj, data }); - if (typeof obj === 'object') return send(obj); - if (typeof obj === 'function') return send(obj(getPayload())); + const track = (name, data) => { + if (typeof name === 'string') return send({ ...getPayload(), name, data }); + if (typeof name === 'object') return send({ ...name }); + if (typeof name === 'function') return send(name(getPayload())); return send(getPayload()); };