@driveflux/web-analytics 1.3.3 → 1.4.1

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.d.ts CHANGED
@@ -3,6 +3,7 @@ type Config = {
3
3
  measurementId: string;
4
4
  apiSecret: string;
5
5
  };
6
+ consoleLogEvents: boolean;
6
7
  };
7
8
  export declare let config: Config;
8
9
  export declare const resetConfig: () => Config;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,KAAK,MAAM,GAAG;IACb,EAAE,EAAE;QACH,aAAa,EAAE,MAAM,CAAA;QACrB,SAAS,EAAE,MAAM,CAAA;KACjB,CAAA;CACD,CAAA;AASD,eAAO,IAAI,MAAM,EAAE,MAAqD,CAAA;AAExE,eAAO,MAAM,WAAW,cAGvB,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,GAAG,SAAS,MAAM,MAAM,OAC5C,GAAG,SACD,MAAM,CAAC,GAAG,CAAC,SAGlB,CAAA"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,KAAK,MAAM,GAAG;IACb,EAAE,EAAE;QACH,aAAa,EAAE,MAAM,CAAA;QACrB,SAAS,EAAE,MAAM,CAAA;KACjB,CAAA;IACD,gBAAgB,EAAE,OAAO,CAAA;CACzB,CAAA;AAYD,eAAO,IAAI,MAAM,EAAE,MAAqD,CAAA;AAExE,eAAO,MAAM,WAAW,cAGvB,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,GAAG,SAAS,MAAM,MAAM,OAC5C,GAAG,SACD,MAAM,CAAC,GAAG,CAAC,SAGlB,CAAA"}
package/dist/config.js CHANGED
@@ -3,7 +3,8 @@ const getConfig = ()=>({
3
3
  ga: {
4
4
  measurementId: process.env.GA_MEASUREMENT_ID,
5
5
  apiSecret: process.env.GA_API_SECRET
6
- }
6
+ },
7
+ consoleLogEvents: process.env.ANALYTICS_LOG_EVENTS === 'true' || process.env.APP_ENV !== 'production'
7
8
  });
8
9
  export let config = singleton('webAnalyticsConfig', getConfig());
9
10
  export const resetConfig = ()=>{
@@ -1 +1 @@
1
- {"version":3,"file":"track.d.ts","sourceRoot":"","sources":["../src/track.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAoB,YAAY,EAAE,MAAM,YAAY,CAAA;AAGhE,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,MAAM;QACf,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;KACxB;CACD;AAED,KAAK,SAAS,GAAG,YAAY,CAAA;AAa7B,wBAAgB,cAAc,kBAW7B;AAED,eAAO,MAAM,gBAAgB,UAAiB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,kBAOhE,CAAA;AAED,eAAO,MAAM,aAAa;uBAKZ,MAAM,cACL,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,cACnB,SAAS;6BA4B2B,YAAY;CAkC9D,CAAA;AAED,eAAO,MAAM,iBAAiB,cAClB,MAAM,cACL,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,SAmC/B,CAAA"}
1
+ {"version":3,"file":"track.d.ts","sourceRoot":"","sources":["../src/track.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAoB,YAAY,EAAE,MAAM,YAAY,CAAA;AAGhE,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,MAAM;QACf,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;KACxB;CACD;AAED,KAAK,SAAS,GAAG,YAAY,CAAA;AA+B7B,wBAAgB,cAAc,kBAW7B;AAUD,eAAO,MAAM,gBAAgB,UAAiB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,kBAOhE,CAAA;AAED,eAAO,MAAM,aAAa;uBAKZ,MAAM,cACL,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,cACnB,SAAS;6BA8B2B,YAAY;CAY9D,CAAA;AAED,eAAO,MAAM,iBAAiB,cAClB,MAAM,cACL,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,SA0B/B,CAAA"}
package/dist/track.js CHANGED
@@ -1,6 +1,6 @@
1
- import { sendGTMEvent } from '@next/third-parties/google';
2
1
  import isEqual from 'lodash/isEqual.js';
3
2
  import { useCallback, useEffect, useRef } from 'react';
3
+ import { config } from './config.js';
4
4
  import { convertUserData, extractGA4ClientId } from './utils.js';
5
5
  const eventsQueue = new Set();
6
6
  const TIMEOUT_TO_CLEAR_EVENTS = 500;
@@ -13,6 +13,21 @@ const drainEvents = ()=>{
13
13
  sendGTMEvent(event);
14
14
  }
15
15
  };
16
+ const interval = setInterval(()=>{
17
+ if (typeof window === 'undefined') return;
18
+ if (window.fluxDataLayer) {
19
+ drainEvents();
20
+ clearInterval(interval);
21
+ }
22
+ }, TIMEOUT_TO_CLEAR_EVENTS);
23
+ const ud = typeof localStorage !== 'undefined' && localStorage.getItem('ud');
24
+ let defaultUserData = undefined;
25
+ if (ud) {
26
+ try {
27
+ const json = Buffer.from(ud, 'base64').toString('utf8');
28
+ defaultUserData = JSON.parse(json);
29
+ } catch (e) {}
30
+ }
16
31
  export function getGA4ClientId() {
17
32
  if (typeof document === 'undefined') {
18
33
  return null;
@@ -25,6 +40,13 @@ export function getGA4ClientId() {
25
40
  return null // If no GA cookie is found or format is unexpected
26
41
  ;
27
42
  }
43
+ const sendGTMEvent = (data)=>{
44
+ if (window.fluxDataLayer) {
45
+ window.fluxDataLayer.push(data);
46
+ } else {
47
+ console.warn('GTM dataLayer fluxDataLayer does not exist');
48
+ }
49
+ };
28
50
  export const safeSendGTMEvent = async (event)=>{
29
51
  if (!window.fluxDataLayer) {
30
52
  eventsQueue.add(event);
@@ -33,9 +55,11 @@ export const safeSendGTMEvent = async (event)=>{
33
55
  sendGTMEvent(event);
34
56
  };
35
57
  export const useTrackEvent = ()=>{
36
- const userData = useRef();
58
+ const userData = useRef(defaultUserData);
37
59
  const track = useCallback((eventName, eventData, clearMode)=>{
38
- console.log('🚨🚨🚨 firing event', eventName, eventData);
60
+ if (config.consoleLogEvents) {
61
+ console.log('🚨🚨🚨 firing event', eventName, eventData);
62
+ }
39
63
  if (!eventName) {
40
64
  console.error('No event name provided');
41
65
  return;
@@ -58,25 +82,6 @@ export const useTrackEvent = ()=>{
58
82
  userData.current = await convertUserData(dataInput);
59
83
  localStorage.setItem('ud', Buffer.from(JSON.stringify(userData.current), 'utf8').toString('base64'));
60
84
  }, []);
61
- useEffect(()=>{
62
- const interval = setInterval(()=>{
63
- if (window.fluxDataLayer) {
64
- drainEvents();
65
- clearInterval(interval);
66
- }
67
- }, TIMEOUT_TO_CLEAR_EVENTS);
68
- return ()=>clearInterval(interval);
69
- }, []);
70
- useEffect(()=>{
71
- const ud = localStorage.getItem('ud');
72
- if (!ud) {
73
- return;
74
- }
75
- try {
76
- const json = Buffer.from(ud, 'base64').toString('utf8');
77
- userData.current = JSON.parse(json);
78
- } catch (e) {}
79
- }, []);
80
85
  return {
81
86
  track,
82
87
  setUserData
@@ -85,21 +90,14 @@ export const useTrackEvent = ()=>{
85
90
  export const useAutoTrackEvent = (eventName, eventData)=>{
86
91
  const previousEventData = useRef();
87
92
  const firedFirstEvent = useRef(false);
88
- useEffect(()=>{
89
- const interval = setInterval(()=>{
90
- if (window.fluxDataLayer) {
91
- drainEvents();
92
- clearInterval(interval);
93
- }
94
- }, TIMEOUT_TO_CLEAR_EVENTS);
95
- return ()=>clearInterval(interval);
96
- }, []);
97
93
  useEffect(()=>{
98
94
  if (isEqual(previousEventData.current, eventData) && firedFirstEvent.current) {
99
95
  return;
100
96
  }
101
97
  firedFirstEvent.current = true;
102
- console.log('🚨🚨🚨 firing event', eventName, eventData);
98
+ if (config.consoleLogEvents) {
99
+ console.log('🚨🚨🚨 firing event', eventName, eventData);
100
+ }
103
101
  const event = {
104
102
  event: eventName,
105
103
  ...eventData
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@driveflux/web-analytics",
3
- "version": "1.3.3",
3
+ "version": "1.4.1",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./track": {
@@ -22,21 +22,20 @@
22
22
  "dependencies": {
23
23
  "@driveflux/fetch": "6.2.2",
24
24
  "@driveflux/singleton": "1.2.1",
25
- "@next/third-parties": "^14.2.13",
26
25
  "lodash": "^4.17.21"
27
26
  },
28
27
  "devDependencies": {
29
28
  "@driveflux/fab": "2.2.1",
30
29
  "@driveflux/tsconfig": "1.2.1",
31
- "@swc/cli": "0.4.1-nightly.20240914",
32
- "@swc/core": "1.7.26",
30
+ "@swc/cli": "^0.4.0",
31
+ "@swc/core": "1.7.2",
33
32
  "@types/lodash": "^4.17.7",
34
- "@types/node": "^22.5.5",
35
- "@types/react": "^18.3.8",
33
+ "@types/node": "^20.14.12",
34
+ "@types/react": "^18.3.3",
36
35
  "del-cli": "^5.1.0",
37
36
  "react": "^18.3.1",
38
- "type-fest": "^4.26.1",
39
- "typescript": "^5.6.2"
37
+ "type-fest": "^4.23.0",
38
+ "typescript": "^5.5.4"
40
39
  },
41
40
  "peerDependencies": {
42
41
  "react": "^18.3.1"
@@ -1,3 +0,0 @@
1
- {
2
- "type": "commonjs"
3
- }