@driveflux/web-analytics 1.3.0 → 1.3.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.js CHANGED
@@ -1,17 +1,15 @@
1
1
  import { singleton } from '@driveflux/singleton';
2
- var getConfig = function() {
3
- return {
2
+ const getConfig = ()=>({
4
3
  ga: {
5
4
  measurementId: process.env.GA_MEASUREMENT_ID,
6
5
  apiSecret: process.env.GA_API_SECRET
7
6
  }
8
- };
9
- };
10
- export var config = singleton('webAnalyticsConfig', getConfig());
11
- export var resetConfig = function() {
7
+ });
8
+ export let config = singleton('webAnalyticsConfig', getConfig());
9
+ export const resetConfig = ()=>{
12
10
  config = singleton('webAnalyticsConfig', getConfig(), true);
13
11
  return config;
14
12
  };
15
- export var setConfig = function(key, value) {
13
+ export const setConfig = (key, value)=>{
16
14
  config[key] = value;
17
15
  };
@@ -1,299 +1,66 @@
1
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
2
- try {
3
- var info = gen[key](arg);
4
- var value = info.value;
5
- } catch (error) {
6
- reject(error);
7
- return;
8
- }
9
- if (info.done) {
10
- resolve(value);
11
- } else {
12
- Promise.resolve(value).then(_next, _throw);
13
- }
14
- }
15
- function _async_to_generator(fn) {
16
- return function() {
17
- var self = this, args = arguments;
18
- return new Promise(function(resolve, reject) {
19
- var gen = fn.apply(self, args);
20
- function _next(value) {
21
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
22
- }
23
- function _throw(err) {
24
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
25
- }
26
- _next(undefined);
27
- });
28
- };
29
- }
30
- function _define_property(obj, key, value) {
31
- if (key in obj) {
32
- Object.defineProperty(obj, key, {
33
- value: value,
34
- enumerable: true,
35
- configurable: true,
36
- writable: true
37
- });
38
- } else {
39
- obj[key] = value;
40
- }
41
- return obj;
42
- }
43
- function _object_spread(target) {
44
- for(var i = 1; i < arguments.length; i++){
45
- var source = arguments[i] != null ? arguments[i] : {};
46
- var ownKeys = Object.keys(source);
47
- if (typeof Object.getOwnPropertySymbols === "function") {
48
- ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
49
- return Object.getOwnPropertyDescriptor(source, sym).enumerable;
50
- }));
51
- }
52
- ownKeys.forEach(function(key) {
53
- _define_property(target, key, source[key]);
54
- });
55
- }
56
- return target;
57
- }
58
- function ownKeys(object, enumerableOnly) {
59
- var keys = Object.keys(object);
60
- if (Object.getOwnPropertySymbols) {
61
- var symbols = Object.getOwnPropertySymbols(object);
62
- if (enumerableOnly) {
63
- symbols = symbols.filter(function(sym) {
64
- return Object.getOwnPropertyDescriptor(object, sym).enumerable;
65
- });
1
+ export * from './config.js';
2
+ import { enhancedFetch } from '@driveflux/fetch';
3
+ import { config } from './config';
4
+ import { convertUserData, extractGA4ClientId, extractGA4SessionId, getCurrentTimestampMicros } from './utils.js';
5
+ export const trackServerMultiple = async (user, events)=>{
6
+ if (events.length > 1) {
7
+ console.log('🚨🚨🚨🗄️ firing multiple server events', events);
8
+ const filtered = events.filter((e)=>!!e.name);
9
+ if (filtered.length !== events.length) {
10
+ console.log('Not all events have names');
11
+ return;
66
12
  }
67
- keys.push.apply(keys, symbols);
68
- }
69
- return keys;
70
- }
71
- function _object_spread_props(target, source) {
72
- source = source != null ? source : {};
73
- if (Object.getOwnPropertyDescriptors) {
74
- Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
75
13
  } else {
76
- ownKeys(Object(source)).forEach(function(key) {
77
- Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
78
- });
14
+ console.log('🚨🚨🚨🗄️ firing server event', events?.[0]?.name, events?.[0]?.data);
15
+ if (!events?.[0]?.name) {
16
+ console.error('The name of the event is missing');
17
+ return;
18
+ }
79
19
  }
80
- return target;
81
- }
82
- function _ts_generator(thisArg, body) {
83
- var f, y, t, g, _ = {
84
- label: 0,
85
- sent: function() {
86
- if (t[0] & 1) throw t[1];
87
- return t[1];
88
- },
89
- trys: [],
90
- ops: []
91
- };
92
- return g = {
93
- next: verb(0),
94
- "throw": verb(1),
95
- "return": verb(2)
96
- }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
97
- return this;
98
- }), g;
99
- function verb(n) {
100
- return function(v) {
101
- return step([
102
- n,
103
- v
104
- ]);
105
- };
20
+ const measurementId = config.ga.measurementId;
21
+ const apiSecret = config.ga.apiSecret;
22
+ if (!measurementId || !apiSecret) {
23
+ console.log('The configuration is not set up correctly.');
24
+ return;
106
25
  }
107
- function step(op) {
108
- if (f) throw new TypeError("Generator is already executing.");
109
- while(_)try {
110
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
111
- if (y = 0, t) op = [
112
- op[0] & 2,
113
- t.value
114
- ];
115
- switch(op[0]){
116
- case 0:
117
- case 1:
118
- t = op;
119
- break;
120
- case 4:
121
- _.label++;
122
- return {
123
- value: op[1],
124
- done: false
125
- };
126
- case 5:
127
- _.label++;
128
- y = op[1];
129
- op = [
130
- 0
131
- ];
132
- continue;
133
- case 7:
134
- op = _.ops.pop();
135
- _.trys.pop();
136
- continue;
137
- default:
138
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
139
- _ = 0;
140
- continue;
141
- }
142
- if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
143
- _.label = op[1];
144
- break;
145
- }
146
- if (op[0] === 6 && _.label < t[1]) {
147
- _.label = t[1];
148
- t = op;
149
- break;
150
- }
151
- if (t && _.label < t[2]) {
152
- _.label = t[2];
153
- _.ops.push(op);
154
- break;
155
- }
156
- if (t[2]) _.ops.pop();
157
- _.trys.pop();
158
- continue;
159
- }
160
- op = body.call(thisArg, _);
161
- } catch (e) {
162
- op = [
163
- 6,
164
- e
165
- ];
166
- y = 0;
167
- } finally{
168
- f = t = 0;
169
- }
170
- if (op[0] & 5) throw op[1];
171
- return {
172
- value: op[0] ? op[1] : void 0,
173
- done: true
174
- };
26
+ const clientId = extractGA4ClientId(user.clientIdCookie);
27
+ const sessionId = extractGA4SessionId(user.sessionIdCookie);
28
+ if (!clientId || !sessionId) {
29
+ console.log('The user client id or session id are not provided');
30
+ return;
175
31
  }
176
- }
177
- export * from './config.js';
178
- import { enhancedFetch } from '@driveflux/fetch';
179
- import { config } from './config';
180
- import { convertUserData, extractGA4ClientId, extractGA4SessionId, getCurrentTimestampMicros } from './utils.js';
181
- export var trackServerMultiple = function() {
182
- var _ref = _async_to_generator(function(user, events) {
183
- var filtered, _events_, _events_1, _events_2, measurementId, apiSecret, clientId, sessionId, userData, _tmp, _tmp1, url, payload;
184
- return _ts_generator(this, function(_state) {
185
- switch(_state.label){
186
- case 0:
187
- if (events.length > 1) {
188
- console.log('🚨🚨🚨🗄️ firing multiple server events', events);
189
- filtered = events.filter(function(e) {
190
- return !!e.name;
191
- });
192
- if (filtered.length !== events.length) {
193
- console.log('Not all events have names');
194
- return [
195
- 2
196
- ];
197
- }
198
- } else {
199
- ;
200
- console.log('🚨🚨🚨🗄️ firing server event', events === null || events === void 0 ? void 0 : (_events_ = events[0]) === null || _events_ === void 0 ? void 0 : _events_.name, events === null || events === void 0 ? void 0 : (_events_1 = events[0]) === null || _events_1 === void 0 ? void 0 : _events_1.data);
201
- if (!(events === null || events === void 0 ? void 0 : (_events_2 = events[0]) === null || _events_2 === void 0 ? void 0 : _events_2.name)) {
202
- console.error('The name of the event is missing');
203
- return [
204
- 2
205
- ];
206
- }
207
- }
208
- measurementId = config.ga.measurementId;
209
- apiSecret = config.ga.apiSecret;
210
- if (!measurementId || !apiSecret) {
211
- console.log('The configuration is not set up correctly.');
212
- return [
213
- 2
214
- ];
32
+ const userData = user.data ? {
33
+ user_data: await convertUserData(user.data)
34
+ } : {};
35
+ const url = `https://www.google-analytics.com/mp/collect?measurement_id=${measurementId}&api_secret=${apiSecret}`;
36
+ const payload = {
37
+ client_id: clientId,
38
+ timestamp_micros: getCurrentTimestampMicros(),
39
+ events: events.map((e)=>{
40
+ if (e.name) {
41
+ return {
42
+ name: e.name,
43
+ params: {
44
+ ...userData,
45
+ ...e.data,
46
+ session_id: sessionId
215
47
  }
216
- clientId = extractGA4ClientId(user.clientIdCookie);
217
- sessionId = extractGA4SessionId(user.sessionIdCookie);
218
- if (!clientId || !sessionId) {
219
- console.log('The user client id or session id are not provided');
220
- return [
221
- 2
222
- ];
223
- }
224
- if (!user.data) return [
225
- 3,
226
- 2
227
- ];
228
- _tmp1 = {};
229
- return [
230
- 4,
231
- convertUserData(user.data)
232
- ];
233
- case 1:
234
- _tmp = (_tmp1.user_data = _state.sent(), _tmp1);
235
- return [
236
- 3,
237
- 3
238
- ];
239
- case 2:
240
- _tmp = {};
241
- _state.label = 3;
242
- case 3:
243
- userData = _tmp;
244
- url = "https://www.google-analytics.com/mp/collect?measurement_id=".concat(measurementId, "&api_secret=").concat(apiSecret);
245
- payload = {
246
- client_id: clientId,
247
- timestamp_micros: getCurrentTimestampMicros(),
248
- events: events.map(function(e) {
249
- if (e.name) {
250
- return {
251
- name: e.name,
252
- params: _object_spread_props(_object_spread({}, userData, e.data), {
253
- session_id: sessionId
254
- })
255
- };
256
- }
257
- return null;
258
- })
259
- };
260
- return [
261
- 4,
262
- enhancedFetch(url, {
263
- method: 'POST',
264
- headers: {
265
- 'Content-Type': 'application/json'
266
- },
267
- body: JSON.stringify(payload)
268
- })
269
- ];
270
- case 4:
271
- _state.sent();
272
- return [
273
- 2
274
- ];
48
+ };
275
49
  }
276
- });
277
- });
278
- return function trackServerMultiple(user, events) {
279
- return _ref.apply(this, arguments);
50
+ return null;
51
+ })
280
52
  };
281
- }();
282
- export var trackServer = function() {
283
- var _ref = _async_to_generator(function(user, name, data) {
284
- return _ts_generator(this, function(_state) {
285
- return [
286
- 2,
287
- trackServerMultiple(user, [
288
- {
289
- name: name,
290
- data: data
291
- }
292
- ])
293
- ];
294
- });
53
+ await enhancedFetch(url, {
54
+ method: 'POST',
55
+ headers: {
56
+ 'Content-Type': 'application/json'
57
+ },
58
+ body: JSON.stringify(payload)
295
59
  });
296
- return function trackServer(user, name, data) {
297
- return _ref.apply(this, arguments);
298
- };
299
- }();
60
+ };
61
+ export const trackServer = async (user, name, data)=>trackServerMultiple(user, [
62
+ {
63
+ name,
64
+ data
65
+ }
66
+ ]);
package/dist/track.js CHANGED
@@ -1,256 +1,52 @@
1
- function _array_like_to_array(arr, len) {
2
- if (len == null || len > arr.length) len = arr.length;
3
- for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
4
- return arr2;
5
- }
6
- function _array_without_holes(arr) {
7
- if (Array.isArray(arr)) return _array_like_to_array(arr);
8
- }
9
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
10
- try {
11
- var info = gen[key](arg);
12
- var value = info.value;
13
- } catch (error) {
14
- reject(error);
15
- return;
16
- }
17
- if (info.done) {
18
- resolve(value);
19
- } else {
20
- Promise.resolve(value).then(_next, _throw);
21
- }
22
- }
23
- function _async_to_generator(fn) {
24
- return function() {
25
- var self = this, args = arguments;
26
- return new Promise(function(resolve, reject) {
27
- var gen = fn.apply(self, args);
28
- function _next(value) {
29
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
30
- }
31
- function _throw(err) {
32
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
33
- }
34
- _next(undefined);
35
- });
36
- };
37
- }
38
- function _define_property(obj, key, value) {
39
- if (key in obj) {
40
- Object.defineProperty(obj, key, {
41
- value: value,
42
- enumerable: true,
43
- configurable: true,
44
- writable: true
45
- });
46
- } else {
47
- obj[key] = value;
48
- }
49
- return obj;
50
- }
51
- function _iterable_to_array(iter) {
52
- if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
53
- }
54
- function _non_iterable_spread() {
55
- throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
56
- }
57
- function _object_spread(target) {
58
- for(var i = 1; i < arguments.length; i++){
59
- var source = arguments[i] != null ? arguments[i] : {};
60
- var ownKeys = Object.keys(source);
61
- if (typeof Object.getOwnPropertySymbols === "function") {
62
- ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
63
- return Object.getOwnPropertyDescriptor(source, sym).enumerable;
64
- }));
65
- }
66
- ownKeys.forEach(function(key) {
67
- _define_property(target, key, source[key]);
68
- });
69
- }
70
- return target;
71
- }
72
- function _to_consumable_array(arr) {
73
- return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
74
- }
75
- function _unsupported_iterable_to_array(o, minLen) {
76
- if (!o) return;
77
- if (typeof o === "string") return _array_like_to_array(o, minLen);
78
- var n = Object.prototype.toString.call(o).slice(8, -1);
79
- if (n === "Object" && o.constructor) n = o.constructor.name;
80
- if (n === "Map" || n === "Set") return Array.from(n);
81
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
82
- }
83
- function _ts_generator(thisArg, body) {
84
- var f, y, t, g, _ = {
85
- label: 0,
86
- sent: function() {
87
- if (t[0] & 1) throw t[1];
88
- return t[1];
89
- },
90
- trys: [],
91
- ops: []
92
- };
93
- return g = {
94
- next: verb(0),
95
- "throw": verb(1),
96
- "return": verb(2)
97
- }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
98
- return this;
99
- }), g;
100
- function verb(n) {
101
- return function(v) {
102
- return step([
103
- n,
104
- v
105
- ]);
106
- };
107
- }
108
- function step(op) {
109
- if (f) throw new TypeError("Generator is already executing.");
110
- while(_)try {
111
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
112
- if (y = 0, t) op = [
113
- op[0] & 2,
114
- t.value
115
- ];
116
- switch(op[0]){
117
- case 0:
118
- case 1:
119
- t = op;
120
- break;
121
- case 4:
122
- _.label++;
123
- return {
124
- value: op[1],
125
- done: false
126
- };
127
- case 5:
128
- _.label++;
129
- y = op[1];
130
- op = [
131
- 0
132
- ];
133
- continue;
134
- case 7:
135
- op = _.ops.pop();
136
- _.trys.pop();
137
- continue;
138
- default:
139
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
140
- _ = 0;
141
- continue;
142
- }
143
- if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
144
- _.label = op[1];
145
- break;
146
- }
147
- if (op[0] === 6 && _.label < t[1]) {
148
- _.label = t[1];
149
- t = op;
150
- break;
151
- }
152
- if (t && _.label < t[2]) {
153
- _.label = t[2];
154
- _.ops.push(op);
155
- break;
156
- }
157
- if (t[2]) _.ops.pop();
158
- _.trys.pop();
159
- continue;
160
- }
161
- op = body.call(thisArg, _);
162
- } catch (e) {
163
- op = [
164
- 6,
165
- e
166
- ];
167
- y = 0;
168
- } finally{
169
- f = t = 0;
170
- }
171
- if (op[0] & 5) throw op[1];
172
- return {
173
- value: op[0] ? op[1] : void 0,
174
- done: true
175
- };
176
- }
177
- }
178
1
  import { sendGTMEvent } from '@next/third-parties/google';
179
2
  import isEqual from 'lodash/isEqual.js';
180
3
  import { useCallback, useEffect, useRef } from 'react';
181
4
  import { convertUserData, extractGA4ClientId } from './utils';
182
- var eventsQueue = new Set();
183
- var TIMEOUT_TO_CLEAR_EVENTS = 500;
184
- var drainEvents = function() {
185
- var events = _to_consumable_array(eventsQueue);
5
+ const eventsQueue = new Set();
6
+ const TIMEOUT_TO_CLEAR_EVENTS = 500;
7
+ const drainEvents = ()=>{
8
+ const events = [
9
+ ...eventsQueue
10
+ ];
186
11
  eventsQueue.clear();
187
- var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
188
- try {
189
- for(var _iterator = events[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
190
- var event = _step.value;
191
- sendGTMEvent(event);
192
- }
193
- } catch (err) {
194
- _didIteratorError = true;
195
- _iteratorError = err;
196
- } finally{
197
- try {
198
- if (!_iteratorNormalCompletion && _iterator.return != null) {
199
- _iterator.return();
200
- }
201
- } finally{
202
- if (_didIteratorError) {
203
- throw _iteratorError;
204
- }
205
- }
12
+ for (const event of events){
13
+ sendGTMEvent(event);
206
14
  }
207
15
  };
208
16
  export function getGA4ClientId() {
209
17
  if (typeof document === 'undefined') {
210
18
  return null;
211
19
  }
212
- var cookies = document.cookie.split(';');
213
- var gaCookie = cookies.find(function(cookie) {
214
- return cookie.trim().startsWith('_ga=');
215
- });
20
+ const cookies = document.cookie.split(';');
21
+ const gaCookie = cookies.find((cookie)=>cookie.trim().startsWith('_ga='));
216
22
  if (gaCookie) {
217
23
  return extractGA4ClientId(gaCookie);
218
24
  }
219
25
  return null // If no GA cookie is found or format is unexpected
220
26
  ;
221
27
  }
222
- export var safeSendGTMEvent = function() {
223
- var _ref = _async_to_generator(function(event) {
224
- return _ts_generator(this, function(_state) {
225
- if (!window.fluxDataLayer) {
226
- eventsQueue.add(event);
227
- return [
228
- 2
229
- ];
230
- }
231
- sendGTMEvent(event);
232
- return [
233
- 2
234
- ];
235
- });
236
- });
237
- return function safeSendGTMEvent(event) {
238
- return _ref.apply(this, arguments);
239
- };
240
- }();
241
- export var useTrackEvent = function() {
242
- var userData = useRef();
243
- var track = useCallback(function(eventName, eventData, clearMode) {
28
+ export const safeSendGTMEvent = async (event)=>{
29
+ if (!window.fluxDataLayer) {
30
+ eventsQueue.add(event);
31
+ return;
32
+ }
33
+ sendGTMEvent(event);
34
+ };
35
+ export const useTrackEvent = ()=>{
36
+ const userData = useRef();
37
+ const track = useCallback((eventName, eventData, clearMode)=>{
244
38
  console.log('🚨🚨🚨 firing event', eventName, eventData);
245
39
  if (!eventName) {
246
40
  console.error('No event name provided');
247
41
  return;
248
42
  }
249
- var event = _object_spread({
250
- event: eventName
251
- }, userData.current ? {
252
- user_data: userData.current
253
- } : {}, eventData);
43
+ const event = {
44
+ event: eventName,
45
+ ...userData.current ? {
46
+ user_data: userData.current
47
+ } : {},
48
+ ...eventData
49
+ };
254
50
  if (clearMode === 'clearItems') {
255
51
  safeSendGTMEvent({
256
52
  items: undefined
@@ -258,77 +54,56 @@ export var useTrackEvent = function() {
258
54
  }
259
55
  safeSendGTMEvent(event);
260
56
  }, []);
261
- var setUserData = useCallback(function() {
262
- var _ref = _async_to_generator(function(dataInput) {
263
- return _ts_generator(this, function(_state) {
264
- switch(_state.label){
265
- case 0:
266
- return [
267
- 4,
268
- convertUserData(dataInput)
269
- ];
270
- case 1:
271
- userData.current = _state.sent();
272
- localStorage.setItem('ud', Buffer.from(JSON.stringify(userData.current), 'utf8').toString('base64'));
273
- return [
274
- 2
275
- ];
276
- }
277
- });
278
- });
279
- return function(dataInput) {
280
- return _ref.apply(this, arguments);
281
- };
282
- }(), []);
283
- useEffect(function() {
284
- var interval = setInterval(function() {
57
+ const setUserData = useCallback(async (dataInput)=>{
58
+ userData.current = await convertUserData(dataInput);
59
+ localStorage.setItem('ud', Buffer.from(JSON.stringify(userData.current), 'utf8').toString('base64'));
60
+ }, []);
61
+ useEffect(()=>{
62
+ const interval = setInterval(()=>{
285
63
  if (window.fluxDataLayer) {
286
64
  drainEvents();
287
65
  clearInterval(interval);
288
66
  }
289
67
  }, TIMEOUT_TO_CLEAR_EVENTS);
290
- return function() {
291
- return clearInterval(interval);
292
- };
68
+ return ()=>clearInterval(interval);
293
69
  }, []);
294
- useEffect(function() {
295
- var ud = localStorage.getItem('ud');
70
+ useEffect(()=>{
71
+ const ud = localStorage.getItem('ud');
296
72
  if (!ud) {
297
73
  return;
298
74
  }
299
75
  try {
300
- var json = Buffer.from(ud, 'base64').toString('utf8');
76
+ const json = Buffer.from(ud, 'base64').toString('utf8');
301
77
  userData.current = JSON.parse(json);
302
78
  } catch (e) {}
303
79
  }, []);
304
80
  return {
305
- track: track,
306
- setUserData: setUserData
81
+ track,
82
+ setUserData
307
83
  };
308
84
  };
309
- export var useAutoTrackEvent = function(eventName, eventData) {
310
- var previousEventData = useRef();
311
- var firedFirstEvent = useRef(false);
312
- useEffect(function() {
313
- var interval = setInterval(function() {
85
+ export const useAutoTrackEvent = (eventName, eventData)=>{
86
+ const previousEventData = useRef();
87
+ const firedFirstEvent = useRef(false);
88
+ useEffect(()=>{
89
+ const interval = setInterval(()=>{
314
90
  if (window.fluxDataLayer) {
315
91
  drainEvents();
316
92
  clearInterval(interval);
317
93
  }
318
94
  }, TIMEOUT_TO_CLEAR_EVENTS);
319
- return function() {
320
- return clearInterval(interval);
321
- };
95
+ return ()=>clearInterval(interval);
322
96
  }, []);
323
- useEffect(function() {
97
+ useEffect(()=>{
324
98
  if (isEqual(previousEventData.current, eventData) && firedFirstEvent.current) {
325
99
  return;
326
100
  }
327
101
  firedFirstEvent.current = true;
328
102
  console.log('🚨🚨🚨 firing event', eventName, eventData);
329
- var event = _object_spread({
330
- event: eventName
331
- }, eventData);
103
+ const event = {
104
+ event: eventName,
105
+ ...eventData
106
+ };
332
107
  safeSendGTMEvent(event);
333
108
  previousEventData.current = eventData;
334
109
  }, [
package/dist/utils.js CHANGED
@@ -1,276 +1,50 @@
1
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
2
- try {
3
- var info = gen[key](arg);
4
- var value = info.value;
5
- } catch (error) {
6
- reject(error);
7
- return;
8
- }
9
- if (info.done) {
10
- resolve(value);
11
- } else {
12
- Promise.resolve(value).then(_next, _throw);
13
- }
14
- }
15
- function _async_to_generator(fn) {
16
- return function() {
17
- var self = this, args = arguments;
18
- return new Promise(function(resolve, reject) {
19
- var gen = fn.apply(self, args);
20
- function _next(value) {
21
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
22
- }
23
- function _throw(err) {
24
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
25
- }
26
- _next(undefined);
27
- });
28
- };
1
+ export async function hashData(input) {
2
+ const encoder = new TextEncoder();
3
+ const data = encoder.encode(input);
4
+ const hashBuffer = await crypto.subtle.digest('SHA-256', data);
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
+ ;
9
+ return hashHex;
29
10
  }
30
- function _ts_generator(thisArg, body) {
31
- var f, y, t, g, _ = {
32
- label: 0,
33
- sent: function() {
34
- if (t[0] & 1) throw t[1];
35
- return t[1];
36
- },
37
- trys: [],
38
- ops: []
39
- };
40
- return g = {
41
- next: verb(0),
42
- "throw": verb(1),
43
- "return": verb(2)
44
- }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
45
- return this;
46
- }), g;
47
- function verb(n) {
48
- return function(v) {
49
- return step([
50
- n,
51
- v
52
- ]);
53
- };
54
- }
55
- function step(op) {
56
- if (f) throw new TypeError("Generator is already executing.");
57
- while(_)try {
58
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
59
- if (y = 0, t) op = [
60
- op[0] & 2,
61
- t.value
62
- ];
63
- switch(op[0]){
64
- case 0:
65
- case 1:
66
- t = op;
67
- break;
68
- case 4:
69
- _.label++;
70
- return {
71
- value: op[1],
72
- done: false
73
- };
74
- case 5:
75
- _.label++;
76
- y = op[1];
77
- op = [
78
- 0
79
- ];
80
- continue;
81
- case 7:
82
- op = _.ops.pop();
83
- _.trys.pop();
84
- continue;
85
- default:
86
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
87
- _ = 0;
88
- continue;
89
- }
90
- if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
91
- _.label = op[1];
92
- break;
93
- }
94
- if (op[0] === 6 && _.label < t[1]) {
95
- _.label = t[1];
96
- t = op;
97
- break;
98
- }
99
- if (t && _.label < t[2]) {
100
- _.label = t[2];
101
- _.ops.push(op);
102
- break;
103
- }
104
- if (t[2]) _.ops.pop();
105
- _.trys.pop();
106
- continue;
107
- }
108
- op = body.call(thisArg, _);
109
- } catch (e) {
110
- op = [
111
- 6,
112
- e
113
- ];
114
- y = 0;
115
- } finally{
116
- f = t = 0;
117
- }
118
- if (op[0] & 5) throw op[1];
119
- return {
120
- value: op[0] ? op[1] : void 0,
121
- done: true
122
- };
123
- }
124
- }
125
- export function hashData(input) {
126
- return _hashData.apply(this, arguments);
127
- }
128
- function _hashData() {
129
- _hashData = _async_to_generator(function(input) {
130
- var encoder, data, hashBuffer, hashArray, hashHex;
131
- return _ts_generator(this, function(_state) {
132
- switch(_state.label){
133
- case 0:
134
- encoder = new TextEncoder();
135
- data = encoder.encode(input);
136
- return [
137
- 4,
138
- crypto.subtle.digest('SHA-256', data)
139
- ];
140
- case 1:
141
- hashBuffer = _state.sent();
142
- hashArray = Array.from(new Uint8Array(hashBuffer)) // Convert buffer to byte array
143
- ;
144
- hashHex = hashArray.map(function(b) {
145
- return b.toString(16).padStart(2, '0');
146
- }).join('') // Convert bytes to hex string
147
- ;
148
- return [
149
- 2,
150
- hashHex
151
- ];
152
- }
153
- });
154
- });
155
- return _hashData.apply(this, arguments);
156
- }
157
- export var getCurrentTimestampMicros = function() {
158
- var now = new Date();
159
- var epochMillis = now.getTime();
160
- var epochMicros = epochMillis * 1000;
11
+ export const getCurrentTimestampMicros = ()=>{
12
+ const now = new Date();
13
+ const epochMillis = now.getTime();
14
+ const epochMicros = epochMillis * 1000;
161
15
  return epochMicros.toString();
162
16
  };
163
- export var extractGA4ClientId = function(gaCookie) {
164
- var matches = gaCookie.split('.');
17
+ export const extractGA4ClientId = (gaCookie)=>{
18
+ const matches = gaCookie.split('.');
165
19
  if (matches.length > 2) {
166
- return "".concat(matches[2], ".").concat(matches[3]);
20
+ return `${matches[2]}.${matches[3]}`;
167
21
  }
168
22
  return null;
169
23
  };
170
- export var extractGA4SessionId = function(gaCookie) {
171
- var matches = gaCookie.split('.');
24
+ export const extractGA4SessionId = (gaCookie)=>{
25
+ const matches = gaCookie.split('.');
172
26
  if (matches.length > 2) {
173
- return Number.parseInt("".concat(matches[2]));
27
+ return Number.parseInt(`${matches[2]}`);
174
28
  }
175
29
  return null;
176
30
  };
177
- export var convertUserData = function() {
178
- var _ref = _async_to_generator(function(dataInput) {
179
- var _dataInput_addresses, _dataInput_addresses1, userAddress, _tmp, _tmp1, _tmp2, _tmp3, _tmp4, _tmp5;
180
- return _ts_generator(this, function(_state) {
181
- switch(_state.label){
182
- case 0:
183
- userAddress = ((_dataInput_addresses = dataInput.addresses) === null || _dataInput_addresses === void 0 ? void 0 : _dataInput_addresses.home) || ((_dataInput_addresses1 = dataInput.addresses) === null || _dataInput_addresses1 === void 0 ? void 0 : _dataInput_addresses1.billing);
184
- _tmp = {
185
- user_id: dataInput.id
186
- };
187
- return [
188
- 4,
189
- hashData(dataInput.email)
190
- ];
191
- case 1:
192
- _tmp.email = _state.sent();
193
- if (!dataInput.phoneNumber) return [
194
- 3,
195
- 3
196
- ];
197
- return [
198
- 4,
199
- hashData(dataInput.phoneNumber)
200
- ];
201
- case 2:
202
- _tmp1 = _state.sent();
203
- return [
204
- 3,
205
- 4
206
- ];
207
- case 3:
208
- _tmp1 = undefined;
209
- _state.label = 4;
210
- case 4:
211
- _tmp.phone_number = _tmp1;
212
- if (!userAddress) return [
213
- 3,
214
- 11
215
- ];
216
- _tmp3 = {};
217
- if (!dataInput.firstName) return [
218
- 3,
219
- 6
220
- ];
221
- return [
222
- 4,
223
- hashData(dataInput.firstName)
224
- ];
225
- case 5:
226
- _tmp4 = _state.sent();
227
- return [
228
- 3,
229
- 7
230
- ];
231
- case 6:
232
- _tmp4 = undefined;
233
- _state.label = 7;
234
- case 7:
235
- _tmp3.first_name = _tmp4;
236
- if (!dataInput.lastName) return [
237
- 3,
238
- 9
239
- ];
240
- return [
241
- 4,
242
- hashData(dataInput.lastName)
243
- ];
244
- case 8:
245
- _tmp5 = _state.sent();
246
- return [
247
- 3,
248
- 10
249
- ];
250
- case 9:
251
- _tmp5 = undefined;
252
- _state.label = 10;
253
- case 10:
254
- _tmp2 = (_tmp3.last_name = _tmp5, _tmp3.street = [
255
- userAddress.street1,
256
- userAddress.street2
257
- ].join(', '), _tmp3.city = userAddress.city, _tmp3.region = userAddress.state, _tmp3.postal_code = userAddress.postalCode, _tmp3.country = userAddress.country, _tmp3);
258
- return [
259
- 3,
260
- 12
261
- ];
262
- case 11:
263
- _tmp2 = undefined;
264
- _state.label = 12;
265
- case 12:
266
- return [
267
- 2,
268
- (_tmp.address = _tmp2, _tmp)
269
- ];
270
- }
271
- });
272
- });
273
- return function convertUserData(dataInput) {
274
- return _ref.apply(this, arguments);
31
+ export const convertUserData = async (dataInput)=>{
32
+ const userAddress = dataInput.addresses?.home || dataInput.addresses?.billing;
33
+ return {
34
+ user_id: dataInput.id,
35
+ email: await hashData(dataInput.email),
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
275
49
  };
276
- }();
50
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@driveflux/web-analytics",
3
- "version": "1.3.0",
3
+ "version": "1.3.1",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./track": {
@@ -1,3 +0,0 @@
1
- {
2
- "type": "commonjs"
3
- }