@driveflux/web-analytics 2.0.2 → 2.0.4-next.0
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/config.js +15 -17
- package/dist/track-server.js +36 -31
- package/dist/track.js +34 -33
- package/dist/track.js.map +1 -1
- package/dist/types.js +1 -2
- package/dist/utils.js +24 -29
- package/dist/utils.js.map +1 -1
- package/package.json +13 -16
package/dist/config.js
CHANGED
|
@@ -1,24 +1,22 @@
|
|
|
1
1
|
import { singleton } from '@driveflux/singleton';
|
|
2
|
-
const getConfig = ()
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
});
|
|
2
|
+
const getConfig = ()=>({
|
|
3
|
+
appUrl: process.env.APP_URL || 'https://driveflux.com',
|
|
4
|
+
isProd: process.env.APP_ENV === 'production',
|
|
5
|
+
ga: {
|
|
6
|
+
measurementId: process.env.GA_MEASUREMENT_ID,
|
|
7
|
+
apiSecret: process.env.GA_API_SECRET
|
|
8
|
+
},
|
|
9
|
+
fb: {
|
|
10
|
+
pixelId: process.env.NEXT_PUBLIC_FB_PIXEL_ID,
|
|
11
|
+
accessToken: process.env.FB_ACCESS_TOKEN
|
|
12
|
+
},
|
|
13
|
+
consoleLogEvents: process.env.ANALYTICS_LOG_EVENTS === 'true' || process.env.APP_ENV !== 'production'
|
|
14
|
+
});
|
|
16
15
|
export let config = singleton('webAnalyticsConfig', getConfig());
|
|
17
|
-
export const resetConfig = ()
|
|
16
|
+
export const resetConfig = ()=>{
|
|
18
17
|
config = singleton('webAnalyticsConfig', getConfig(), true);
|
|
19
18
|
return config;
|
|
20
19
|
};
|
|
21
|
-
export const setConfig = (key, value)
|
|
20
|
+
export const setConfig = (key, value)=>{
|
|
22
21
|
config[key] = value;
|
|
23
22
|
};
|
|
24
|
-
//# sourceMappingURL=config.js.map
|
package/dist/track-server.js
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
import { enhancedFetch } from '@driveflux/fetch';
|
|
2
2
|
import { config } from './config.js';
|
|
3
|
-
import { convertFacebookUserData, convertGAUserData, getCurrentTimestampMicros
|
|
3
|
+
import { convertFacebookUserData, convertGAUserData, getCurrentTimestampMicros } from './utils.js';
|
|
4
4
|
// facebook
|
|
5
|
-
export const trackFbServerMultiple = async (user, events)
|
|
5
|
+
export const trackFbServerMultiple = async (user, events)=>{
|
|
6
6
|
if (events.length > 1) {
|
|
7
7
|
console.log('🚨🚨🚨🗄️ firing multiple server events', events);
|
|
8
|
-
const filtered = events.filter((e)
|
|
8
|
+
const filtered = events.filter((e)=>!!e.name);
|
|
9
9
|
if (filtered.length !== events.length) {
|
|
10
10
|
console.log('Not all events have names');
|
|
11
11
|
return;
|
|
12
12
|
}
|
|
13
|
-
}
|
|
14
|
-
else {
|
|
13
|
+
} else {
|
|
15
14
|
console.log('🚨🚨🚨🗄️ firing server event', events?.[0]?.name, events?.[0]?.data);
|
|
16
15
|
if (!events?.[0]?.name) {
|
|
17
16
|
console.error('The name of the event is missing');
|
|
@@ -34,50 +33,52 @@ export const trackFbServerMultiple = async (user, events) => {
|
|
|
34
33
|
const userData = user.data ? await convertFacebookUserData(user.data) : {};
|
|
35
34
|
const url = `https://graph.facebook.com/${apiVersion}/${pixelId}/events?access_token=${accessToken}`;
|
|
36
35
|
const payload = {
|
|
37
|
-
data: events
|
|
38
|
-
.map((e) => {
|
|
36
|
+
data: events.map((e)=>{
|
|
39
37
|
if (e.name) {
|
|
40
38
|
return {
|
|
41
39
|
event_name: e.name,
|
|
42
|
-
event_time: Math.floor(Date.now() / 1000),
|
|
40
|
+
event_time: Math.floor(Date.now() / 1000),
|
|
43
41
|
event_source_url: config.appUrl,
|
|
44
42
|
action_source: 'website',
|
|
45
43
|
user_data: {
|
|
46
44
|
...userData,
|
|
47
|
-
fbp: `fb.1.${clientId}
|
|
45
|
+
fbp: `fb.1.${clientId}`
|
|
48
46
|
},
|
|
49
47
|
custom_data: {
|
|
50
|
-
...e.data
|
|
51
|
-
}
|
|
48
|
+
...e.data
|
|
49
|
+
}
|
|
52
50
|
};
|
|
53
51
|
}
|
|
54
52
|
return null;
|
|
55
|
-
})
|
|
56
|
-
.filter(Boolean),
|
|
53
|
+
}).filter(Boolean)
|
|
57
54
|
};
|
|
58
55
|
const res = await enhancedFetch(url, {
|
|
59
56
|
method: 'POST',
|
|
60
57
|
headers: {
|
|
61
|
-
'Content-Type': 'application/json'
|
|
58
|
+
'Content-Type': 'application/json'
|
|
62
59
|
},
|
|
63
|
-
body: JSON.stringify(payload)
|
|
60
|
+
body: JSON.stringify(payload)
|
|
64
61
|
});
|
|
65
62
|
if (!res.ok) {
|
|
66
63
|
console.log('🚨🚨🚨🗄️ error firing server event', res.val);
|
|
67
64
|
}
|
|
68
65
|
};
|
|
69
|
-
export const trackFbServer = async (user, name, data)
|
|
66
|
+
export const trackFbServer = async (user, name, data)=>trackFbServerMultiple(user, [
|
|
67
|
+
{
|
|
68
|
+
name,
|
|
69
|
+
data
|
|
70
|
+
}
|
|
71
|
+
]);
|
|
70
72
|
// google
|
|
71
|
-
export const trackGAServerMultiple = async (user, events)
|
|
73
|
+
export const trackGAServerMultiple = async (user, events)=>{
|
|
72
74
|
if (events.length > 1) {
|
|
73
75
|
console.log('🚨🚨🚨🗄️ firing multiple server events', events);
|
|
74
|
-
const filtered = events.filter((e)
|
|
76
|
+
const filtered = events.filter((e)=>!!e.name);
|
|
75
77
|
if (filtered.length !== events.length) {
|
|
76
78
|
console.log('Not all events have names');
|
|
77
79
|
return;
|
|
78
80
|
}
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
+
} else {
|
|
81
82
|
console.log('🚨🚨🚨🗄️ firing server event', events?.[0]?.name, events?.[0]?.data);
|
|
82
83
|
if (!events?.[0]?.name) {
|
|
83
84
|
console.error('The name of the event is missing');
|
|
@@ -96,37 +97,41 @@ export const trackGAServerMultiple = async (user, events) => {
|
|
|
96
97
|
console.log('The user client id or session id are not provided');
|
|
97
98
|
return;
|
|
98
99
|
}
|
|
99
|
-
const userData = user.data
|
|
100
|
-
|
|
101
|
-
|
|
100
|
+
const userData = user.data ? {
|
|
101
|
+
user_data: await convertGAUserData(user.data)
|
|
102
|
+
} : {};
|
|
102
103
|
const url = `https://www.google-analytics.com/mp/collect?measurement_id=${measurementId}&api_secret=${apiSecret}`;
|
|
103
104
|
const payload = {
|
|
104
105
|
client_id: clientId,
|
|
105
106
|
timestamp_micros: getCurrentTimestampMicros(),
|
|
106
|
-
events: events.map((e)
|
|
107
|
+
events: events.map((e)=>{
|
|
107
108
|
if (e.name) {
|
|
108
109
|
return {
|
|
109
110
|
name: e.name,
|
|
110
111
|
params: {
|
|
111
112
|
...userData,
|
|
112
113
|
...e.data,
|
|
113
|
-
session_id: sessionId
|
|
114
|
-
}
|
|
114
|
+
session_id: sessionId
|
|
115
|
+
}
|
|
115
116
|
};
|
|
116
117
|
}
|
|
117
118
|
return null;
|
|
118
|
-
})
|
|
119
|
+
})
|
|
119
120
|
};
|
|
120
121
|
const res = await enhancedFetch(url, {
|
|
121
122
|
method: 'POST',
|
|
122
123
|
headers: {
|
|
123
|
-
'Content-Type': 'application/json'
|
|
124
|
+
'Content-Type': 'application/json'
|
|
124
125
|
},
|
|
125
|
-
body: JSON.stringify(payload)
|
|
126
|
+
body: JSON.stringify(payload)
|
|
126
127
|
});
|
|
127
128
|
if (!res.ok) {
|
|
128
129
|
console.log('🚨🚨🚨🗄️ error firing server event', res.val);
|
|
129
130
|
}
|
|
130
131
|
};
|
|
131
|
-
export const trackGAServer = async (user, name, data)
|
|
132
|
-
|
|
132
|
+
export const trackGAServer = async (user, name, data)=>trackGAServerMultiple(user, [
|
|
133
|
+
{
|
|
134
|
+
name,
|
|
135
|
+
data
|
|
136
|
+
}
|
|
137
|
+
]);
|
package/dist/track.js
CHANGED
|
@@ -4,29 +4,29 @@ import { config } from './config.js';
|
|
|
4
4
|
import { convertGAUserData, extractAnalyticClientId } from './utils.js';
|
|
5
5
|
const eventsQueue = new Set();
|
|
6
6
|
const TIMEOUT_TO_CLEAR_EVENTS = 500;
|
|
7
|
-
const drainEvents = ()
|
|
8
|
-
const events = [
|
|
7
|
+
const drainEvents = ()=>{
|
|
8
|
+
const events = [
|
|
9
|
+
...eventsQueue
|
|
10
|
+
];
|
|
9
11
|
eventsQueue.clear();
|
|
10
|
-
for (const event of events)
|
|
12
|
+
for (const event of events){
|
|
11
13
|
sendGTMEvent(event);
|
|
12
14
|
}
|
|
13
15
|
};
|
|
14
|
-
const interval = setInterval(()
|
|
15
|
-
if (typeof window === 'undefined')
|
|
16
|
-
return;
|
|
16
|
+
const interval = setInterval(()=>{
|
|
17
|
+
if (typeof window === 'undefined') return;
|
|
17
18
|
if (window.fluxDataLayer) {
|
|
18
19
|
drainEvents();
|
|
19
20
|
clearInterval(interval);
|
|
20
21
|
}
|
|
21
22
|
}, TIMEOUT_TO_CLEAR_EVENTS);
|
|
22
23
|
const ud = typeof localStorage !== 'undefined' && localStorage.getItem('ud');
|
|
23
|
-
let defaultUserData
|
|
24
|
+
let defaultUserData;
|
|
24
25
|
if (ud) {
|
|
25
26
|
try {
|
|
26
27
|
const json = Buffer.from(ud, 'base64').toString('utf8');
|
|
27
28
|
defaultUserData = JSON.parse(json);
|
|
28
|
-
}
|
|
29
|
-
catch (e) { }
|
|
29
|
+
} catch (_e) {}
|
|
30
30
|
}
|
|
31
31
|
export function getAnalyticClientId(type) {
|
|
32
32
|
if (typeof document === 'undefined') {
|
|
@@ -34,30 +34,30 @@ export function getAnalyticClientId(type) {
|
|
|
34
34
|
}
|
|
35
35
|
const prefix = type === 'facebook' ? 'fbp' : 'ga';
|
|
36
36
|
const cookies = document.cookie.split(';');
|
|
37
|
-
const cookie = cookies.find((cookie)
|
|
37
|
+
const cookie = cookies.find((cookie)=>cookie.trim().startsWith(`_${prefix}=`));
|
|
38
38
|
if (cookie) {
|
|
39
39
|
return extractAnalyticClientId(cookie);
|
|
40
40
|
}
|
|
41
|
-
return null
|
|
41
|
+
return null // If no cookie is found or format is unexpected
|
|
42
|
+
;
|
|
42
43
|
}
|
|
43
|
-
const sendGTMEvent = (data)
|
|
44
|
+
const sendGTMEvent = (data)=>{
|
|
44
45
|
if (window.fluxDataLayer) {
|
|
45
46
|
window.fluxDataLayer.push(data);
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
47
|
+
} else {
|
|
48
48
|
console.warn('GTM dataLayer fluxDataLayer does not exist');
|
|
49
49
|
}
|
|
50
50
|
};
|
|
51
|
-
export const safeSendGTMEvent = async (event)
|
|
51
|
+
export const safeSendGTMEvent = async (event)=>{
|
|
52
52
|
if (!window.fluxDataLayer) {
|
|
53
53
|
eventsQueue.add(event);
|
|
54
54
|
return;
|
|
55
55
|
}
|
|
56
56
|
sendGTMEvent(event);
|
|
57
57
|
};
|
|
58
|
-
export const useTrackEvent = ()
|
|
58
|
+
export const useTrackEvent = ()=>{
|
|
59
59
|
const userData = useRef(defaultUserData);
|
|
60
|
-
const track = useCallback((eventName, eventData, clearMode)
|
|
60
|
+
const track = useCallback((eventName, eventData, clearMode)=>{
|
|
61
61
|
if (!eventName) {
|
|
62
62
|
console.error('No event name provided');
|
|
63
63
|
return;
|
|
@@ -70,33 +70,32 @@ export const useTrackEvent = () => {
|
|
|
70
70
|
}
|
|
71
71
|
const event = {
|
|
72
72
|
event: eventName,
|
|
73
|
-
...
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
: {}),
|
|
78
|
-
...eventData,
|
|
73
|
+
...userData.current ? {
|
|
74
|
+
user_data: userData.current
|
|
75
|
+
} : {},
|
|
76
|
+
...eventData
|
|
79
77
|
};
|
|
80
78
|
if (clearMode === 'clearItems') {
|
|
81
|
-
safeSendGTMEvent({
|
|
79
|
+
safeSendGTMEvent({
|
|
80
|
+
items: undefined
|
|
81
|
+
});
|
|
82
82
|
}
|
|
83
83
|
safeSendGTMEvent(event);
|
|
84
84
|
}, []);
|
|
85
|
-
const setUserData = useCallback(async (dataInput)
|
|
85
|
+
const setUserData = useCallback(async (dataInput)=>{
|
|
86
86
|
userData.current = await convertGAUserData(dataInput);
|
|
87
87
|
localStorage.setItem('ud', Buffer.from(JSON.stringify(userData.current), 'utf8').toString('base64'));
|
|
88
88
|
}, []);
|
|
89
89
|
return {
|
|
90
90
|
track,
|
|
91
|
-
setUserData
|
|
91
|
+
setUserData
|
|
92
92
|
};
|
|
93
93
|
};
|
|
94
|
-
export const useAutoTrackEvent = (eventName, eventData)
|
|
94
|
+
export const useAutoTrackEvent = (eventName, eventData)=>{
|
|
95
95
|
const previousEventData = useRef(undefined);
|
|
96
96
|
const firedFirstEvent = useRef(false);
|
|
97
|
-
useEffect(()
|
|
98
|
-
if (isEqual(previousEventData.current, eventData) &&
|
|
99
|
-
firedFirstEvent.current) {
|
|
97
|
+
useEffect(()=>{
|
|
98
|
+
if (isEqual(previousEventData.current, eventData) && firedFirstEvent.current) {
|
|
100
99
|
return;
|
|
101
100
|
}
|
|
102
101
|
firedFirstEvent.current = true;
|
|
@@ -105,10 +104,12 @@ export const useAutoTrackEvent = (eventName, eventData) => {
|
|
|
105
104
|
}
|
|
106
105
|
const event = {
|
|
107
106
|
event: eventName,
|
|
108
|
-
...eventData
|
|
107
|
+
...eventData
|
|
109
108
|
};
|
|
110
109
|
safeSendGTMEvent(event);
|
|
111
110
|
previousEventData.current = eventData;
|
|
112
|
-
}, [
|
|
111
|
+
}, [
|
|
112
|
+
eventData,
|
|
113
|
+
eventName
|
|
114
|
+
]);
|
|
113
115
|
};
|
|
114
|
-
//# sourceMappingURL=track.js.map
|
package/dist/track.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track.js","sourceRoot":"","sources":["../src/track.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,mBAAmB,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAUvE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAuB,CAAA;AAClD,MAAM,uBAAuB,GAAG,GAAG,CAAA;AAEnC,MAAM,WAAW,GAAG,GAAG,EAAE;IACxB,MAAM,MAAM,GAAG,CAAC,GAAG,WAAW,CAAC,CAAA;IAC/B,WAAW,CAAC,KAAK,EAAE,CAAA;IACnB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,YAAY,CAAC,KAAK,CAAC,CAAA;IACpB,CAAC;AACF,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;IACjC,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAM;IAEzC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QAC1B,WAAW,EAAE,CAAA;QACb,aAAa,CAAC,QAAQ,CAAC,CAAA;IACxB,CAAC;AACF,CAAC,EAAE,uBAAuB,CAAC,CAAA;AAE3B,MAAM,EAAE,GAAG,OAAO,YAAY,KAAK,WAAW,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AAC5E,IAAI,
|
|
1
|
+
{"version":3,"file":"track.js","sourceRoot":"","sources":["../src/track.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=types.js.map
|
|
1
|
+
export { };
|
package/dist/utils.js
CHANGED
|
@@ -2,58 +2,54 @@ export async function hashData(input) {
|
|
|
2
2
|
const encoder = new TextEncoder();
|
|
3
3
|
const data = encoder.encode(input);
|
|
4
4
|
const hashBuffer = await crypto.subtle.digest('SHA-256', data);
|
|
5
|
-
const hashArray = Array.from(new Uint8Array(hashBuffer))
|
|
6
|
-
|
|
5
|
+
const hashArray = Array.from(new Uint8Array(hashBuffer)) // Convert buffer to byte array
|
|
6
|
+
;
|
|
7
|
+
const hashHex = hashArray.map((b)=>b.toString(16).padStart(2, '0')).join('') // Convert bytes to hex string
|
|
8
|
+
;
|
|
7
9
|
return hashHex;
|
|
8
10
|
}
|
|
9
|
-
export const getCurrentTimestampMicros = ()
|
|
11
|
+
export const getCurrentTimestampMicros = ()=>{
|
|
10
12
|
const now = new Date();
|
|
11
13
|
const epochMillis = now.getTime();
|
|
12
14
|
const epochMicros = epochMillis * 1000;
|
|
13
15
|
return epochMicros.toString();
|
|
14
16
|
};
|
|
15
|
-
export const extractAnalyticClientId = (cookie)
|
|
17
|
+
export const extractAnalyticClientId = (cookie)=>{
|
|
16
18
|
const matches = cookie.split('.');
|
|
17
19
|
if (matches.length > 2) {
|
|
18
20
|
return `${matches[2]}.${matches[3]}`;
|
|
19
21
|
}
|
|
20
22
|
return null;
|
|
21
23
|
};
|
|
22
|
-
export const extractAnalyticSessionId = (cookie)
|
|
24
|
+
export const extractAnalyticSessionId = (cookie)=>{
|
|
23
25
|
const matches = cookie.split('.');
|
|
24
26
|
if (matches.length > 2) {
|
|
25
|
-
return Number.parseInt(`${matches[2]}
|
|
27
|
+
return Number.parseInt(`${matches[2]}`, 10);
|
|
26
28
|
}
|
|
27
29
|
return null;
|
|
28
30
|
};
|
|
29
|
-
export const convertGAUserData = async (dataInput)
|
|
31
|
+
export const convertGAUserData = async (dataInput)=>{
|
|
30
32
|
const userAddress = dataInput.addresses?.home || dataInput.addresses?.billing;
|
|
31
33
|
return {
|
|
32
34
|
user_id: dataInput.id,
|
|
33
35
|
email: await hashData(dataInput.email),
|
|
34
|
-
phone_number: dataInput.phoneNumber
|
|
35
|
-
|
|
36
|
-
: undefined,
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
region: userAddress.state,
|
|
48
|
-
postal_code: userAddress.postalCode,
|
|
49
|
-
country: userAddress.country,
|
|
50
|
-
}
|
|
51
|
-
: undefined,
|
|
36
|
+
phone_number: dataInput.phoneNumber ? await hashData(dataInput.phoneNumber) : undefined,
|
|
37
|
+
address: userAddress ? {
|
|
38
|
+
first_name: dataInput.firstName ? await hashData(dataInput.firstName) : undefined,
|
|
39
|
+
last_name: dataInput.lastName ? await hashData(dataInput.lastName) : undefined,
|
|
40
|
+
street: [
|
|
41
|
+
userAddress.street1,
|
|
42
|
+
userAddress.street2
|
|
43
|
+
].join(', '),
|
|
44
|
+
city: userAddress.city,
|
|
45
|
+
region: userAddress.state,
|
|
46
|
+
postal_code: userAddress.postalCode,
|
|
47
|
+
country: userAddress.country
|
|
48
|
+
} : undefined
|
|
52
49
|
};
|
|
53
50
|
};
|
|
54
|
-
export const convertFacebookUserData = async (userData)
|
|
55
|
-
if (!userData)
|
|
56
|
-
return {};
|
|
51
|
+
export const convertFacebookUserData = async (userData)=>{
|
|
52
|
+
if (!userData) return {};
|
|
57
53
|
const data = {};
|
|
58
54
|
if (userData.email) {
|
|
59
55
|
data.em = await hashData(userData.email.toLowerCase().trim());
|
|
@@ -71,4 +67,3 @@ export const convertFacebookUserData = async (userData) => {
|
|
|
71
67
|
}
|
|
72
68
|
return data;
|
|
73
69
|
};
|
|
74
|
-
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,KAAa;IAC3C,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;IACjC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAClC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;IAC9D,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAA,CAAC,+BAA+B;IACxF,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,CAAC,8BAA8B;IAC7G,OAAO,OAAO,CAAA;AACf,CAAC;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAW,EAAE;IACrD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;IACtB,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,EAAE,CAAA;IACjC,MAAM,WAAW,GAAG,WAAW,GAAG,IAAI,CAAA;IACtC,OAAO,WAAW,CAAC,QAAQ,EAAE,CAAA;AAC9B,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,MAAc,EAAE,EAAE;IACzD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACjC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;IACrC,CAAC;IACD,OAAO,IAAI,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,MAAc,EAAE,EAAE;IAC1D,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACjC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@driveflux/web-analytics",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.4-next.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
"./track": {
|
|
@@ -20,26 +20,23 @@
|
|
|
20
20
|
"dist"
|
|
21
21
|
],
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@driveflux/fetch": "7.0.
|
|
24
|
-
"@driveflux/singleton": "2.0.
|
|
25
|
-
"@next/third-parties": "^15.
|
|
23
|
+
"@driveflux/fetch": "7.0.4-next.0",
|
|
24
|
+
"@driveflux/singleton": "2.0.3-next.0",
|
|
25
|
+
"@next/third-parties": "^15.5.2",
|
|
26
26
|
"lodash": "^4.17.21"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
|
-
"@driveflux/fab": "3.0.
|
|
30
|
-
"@driveflux/tsconfig": "2.0.
|
|
31
|
-
"@swc/cli": "0.7.
|
|
32
|
-
"@swc/core": "1.
|
|
33
|
-
"@types/lodash": "^4.17.
|
|
34
|
-
"@types/node": "^
|
|
35
|
-
"@types/react": "^19.1.
|
|
29
|
+
"@driveflux/fab": "3.0.3-next.0",
|
|
30
|
+
"@driveflux/tsconfig": "2.0.3-next.0",
|
|
31
|
+
"@swc/cli": "^0.7.8",
|
|
32
|
+
"@swc/core": "^1.13.5",
|
|
33
|
+
"@types/lodash": "^4.17.20",
|
|
34
|
+
"@types/node": "^24.3.0",
|
|
35
|
+
"@types/react": "^19.1.12",
|
|
36
36
|
"del-cli": "^6.0.0",
|
|
37
|
-
"react": "
|
|
37
|
+
"react": "*",
|
|
38
38
|
"type-fest": "^4.41.0",
|
|
39
|
-
"typescript": "^5.
|
|
40
|
-
},
|
|
41
|
-
"peerDependencies": {
|
|
42
|
-
"react": "19.1.0"
|
|
39
|
+
"typescript": "^5.9.2"
|
|
43
40
|
},
|
|
44
41
|
"scripts": {
|
|
45
42
|
"build": "fab",
|