@blotoutio/providers-google-analytics-4-sdk 0.26.5 → 0.26.6

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/index.cjs.js ADDED
@@ -0,0 +1,288 @@
1
+ 'use strict';
2
+
3
+ const initGA4 = (ID) => {
4
+ window.dataLayer = window.dataLayer || [];
5
+ window.gtag = function gtag() {
6
+ // eslint-disable-next-line prefer-rest-params
7
+ window.dataLayer.push(arguments);
8
+ };
9
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
10
+ // @ts-ignore
11
+ window.gtag('js', new Date());
12
+ const element = document.createElement('script');
13
+ element.async = !0;
14
+ element.src = `https://www.googletagmanager.com/gtag/js?id=${ID}`;
15
+ const script = document.getElementsByTagName('script')[0];
16
+ if (script && script.parentNode) {
17
+ script.parentNode.insertBefore(element, script);
18
+ }
19
+ };
20
+ const init = ({ manifest, userId }) => {
21
+ if (!window ||
22
+ !manifest.variables ||
23
+ manifest.variables['flowType'] === 'server') {
24
+ return;
25
+ }
26
+ if (!window.gtag) {
27
+ initGA4(manifest.variables['measurementId']);
28
+ }
29
+ if (window.gtag) {
30
+ window.gtag('config', manifest.variables['measurementId'], {
31
+ user_id: userId,
32
+ send_page_view: false,
33
+ });
34
+ }
35
+ };
36
+
37
+ const getItems = (contents = []) => {
38
+ return contents.map((content) => {
39
+ const data = {
40
+ item_id: content.id.toString(),
41
+ quantity: content.quantity || 1,
42
+ };
43
+ if (content.title) {
44
+ data['item_name'] = content.title;
45
+ }
46
+ if (content.category) {
47
+ const categories = content.category.split(',');
48
+ data['item_category'] = categories[0];
49
+ for (let i = 1; i < Math.min(categories.length, 5); i++) {
50
+ if (categories[i].trim()) {
51
+ data[`item_category${i + 1}`] =
52
+ categories[i].trim();
53
+ }
54
+ }
55
+ }
56
+ if (content.item_price) {
57
+ data['price'] = content.item_price;
58
+ }
59
+ if (content.brand) {
60
+ data['item_brand'] = content.brand;
61
+ }
62
+ if (content.variantId) {
63
+ data['item_variant'] = content.variantId.toString();
64
+ }
65
+ return data;
66
+ });
67
+ };
68
+ const getEvent = (eventName, data, eventId) => {
69
+ switch (eventName) {
70
+ case 'PageView': {
71
+ return {
72
+ event: 'page_view',
73
+ eventData: {},
74
+ };
75
+ }
76
+ case 'ViewContent': {
77
+ return {
78
+ event: 'view_item',
79
+ eventData: {
80
+ currency: data['currency'],
81
+ value: data['value'],
82
+ items: getItems(data['contents']),
83
+ },
84
+ };
85
+ }
86
+ case 'ViewCart': {
87
+ return {
88
+ event: 'view_cart',
89
+ eventData: {
90
+ currency: data['currency'],
91
+ value: data['value'],
92
+ items: getItems(data['contents']),
93
+ },
94
+ };
95
+ }
96
+ case 'RemoveFromCart': {
97
+ return {
98
+ event: 'remove_from_cart',
99
+ eventData: {
100
+ currency: data['currency'],
101
+ value: data['value'],
102
+ items: getItems(data['contents']),
103
+ },
104
+ };
105
+ }
106
+ case 'AddToWishlist': {
107
+ return {
108
+ event: 'add_to_wishlist',
109
+ eventData: {
110
+ currency: data['currency'],
111
+ value: data['value'],
112
+ items: getItems(data['contents']),
113
+ },
114
+ };
115
+ }
116
+ case 'ViewList': {
117
+ return {
118
+ event: 'view_item_list',
119
+ eventData: {
120
+ item_list_name: data['listName'],
121
+ item_list_id: data['listId'],
122
+ items: getItems(data['contents']),
123
+ },
124
+ };
125
+ }
126
+ case 'Login': {
127
+ return {
128
+ event: 'login',
129
+ eventData: {
130
+ method: data['method'],
131
+ },
132
+ };
133
+ }
134
+ case 'SignUp': {
135
+ return {
136
+ event: 'sign_up',
137
+ eventData: {
138
+ method: data['method'],
139
+ },
140
+ };
141
+ }
142
+ case 'AddToCart': {
143
+ return {
144
+ event: 'add_to_cart',
145
+ eventData: {
146
+ currency: data['currency'],
147
+ value: data['value'],
148
+ items: getItems(data['contents']),
149
+ },
150
+ };
151
+ }
152
+ case 'InitiateCheckout': {
153
+ return {
154
+ event: 'begin_checkout',
155
+ eventData: {
156
+ currency: data['currency'],
157
+ value: data['value'],
158
+ items: getItems(data['contents']),
159
+ },
160
+ };
161
+ }
162
+ case 'AddShippingInfo': {
163
+ return {
164
+ event: 'add_shipping_info',
165
+ eventData: {
166
+ currency: data['currency'],
167
+ value: data['value'],
168
+ items: getItems(data['contents']),
169
+ },
170
+ };
171
+ }
172
+ case 'AddPaymentInfo': {
173
+ return {
174
+ event: 'add_payment_info',
175
+ eventData: {
176
+ currency: data['currency'],
177
+ value: data['value'],
178
+ items: getItems(data['contents']),
179
+ },
180
+ };
181
+ }
182
+ case 'Purchase': {
183
+ return {
184
+ event: 'purchase',
185
+ eventData: {
186
+ currency: data['currency'],
187
+ transaction_id: data['orderId'] || eventId,
188
+ value: data['value'],
189
+ items: getItems(data['contents']),
190
+ },
191
+ };
192
+ }
193
+ case 'Search': {
194
+ return {
195
+ event: 'search',
196
+ eventData: {
197
+ search_term: data['search'],
198
+ },
199
+ };
200
+ }
201
+ case 'Lead': {
202
+ return {
203
+ event: 'generate_lead',
204
+ eventData: {
205
+ currency: data['currency'],
206
+ value: data['value'],
207
+ },
208
+ };
209
+ }
210
+ default: {
211
+ return {
212
+ event: eventName,
213
+ eventData: data,
214
+ };
215
+ }
216
+ }
217
+ };
218
+ const handleTag = ({ data = {}, eventName, eventId, manifestVariables, }) => {
219
+ if (!eventName ||
220
+ !window.gtag ||
221
+ (manifestVariables === null || manifestVariables === void 0 ? void 0 : manifestVariables['flowType']) === 'server') {
222
+ return;
223
+ }
224
+ const { event, eventData } = getEvent(eventName, data, eventId);
225
+ if (manifestVariables) {
226
+ if (manifestVariables['measurementId']) {
227
+ eventData['send_to'] = manifestVariables['measurementId'];
228
+ }
229
+ if (manifestVariables['debug'] === '1') {
230
+ eventData['debug_mode'] = true;
231
+ }
232
+ }
233
+ window.gtag('event', event, { ...eventData, app: 'blotout' });
234
+ };
235
+
236
+ const getCookieValue = (key) => {
237
+ try {
238
+ if (!document || !document.cookie) {
239
+ return '';
240
+ }
241
+ const name = `${key}=`;
242
+ const decodedCookie = decodeURIComponent(document.cookie);
243
+ const ca = decodedCookie.split(';');
244
+ for (let i = 0; i < ca.length; i++) {
245
+ let c = ca[i];
246
+ while (c.charAt(0) === ' ') {
247
+ c = c.substring(1);
248
+ }
249
+ if (c.indexOf(name) === 0) {
250
+ return c.substring(name.length, c.length);
251
+ }
252
+ }
253
+ return '';
254
+ }
255
+ catch {
256
+ return '';
257
+ }
258
+ };
259
+
260
+ const tag = ({ data, eventName, manifestVariables, eventId }) => {
261
+ const isLoaded = window && window.gtag && !!getCookieValue('_ga');
262
+ if (isLoaded) {
263
+ handleTag({ data, eventName, manifestVariables, eventId });
264
+ }
265
+ return {
266
+ loaded: isLoaded,
267
+ sdkVersion: "0.26.6" ,
268
+ };
269
+ };
270
+
271
+ const data = {
272
+ name: 'googleAnalytics4',
273
+ init,
274
+ tag,
275
+ };
276
+ try {
277
+ if (window) {
278
+ if (!window.edgetagProviders) {
279
+ window.edgetagProviders = [];
280
+ }
281
+ window.edgetagProviders.push(data);
282
+ }
283
+ }
284
+ catch {
285
+ // No window
286
+ }
287
+
288
+ module.exports = data;
package/index.js CHANGED
@@ -265,7 +265,7 @@ var ProvidersGoogleAnalytics4Sdk = (function () {
265
265
  }
266
266
  return {
267
267
  loaded: isLoaded,
268
- sdkVersion: "0.26.5" ,
268
+ sdkVersion: "0.26.6" ,
269
269
  };
270
270
  };
271
271
 
package/index.mjs ADDED
@@ -0,0 +1,286 @@
1
+ const initGA4 = (ID) => {
2
+ window.dataLayer = window.dataLayer || [];
3
+ window.gtag = function gtag() {
4
+ // eslint-disable-next-line prefer-rest-params
5
+ window.dataLayer.push(arguments);
6
+ };
7
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
8
+ // @ts-ignore
9
+ window.gtag('js', new Date());
10
+ const element = document.createElement('script');
11
+ element.async = !0;
12
+ element.src = `https://www.googletagmanager.com/gtag/js?id=${ID}`;
13
+ const script = document.getElementsByTagName('script')[0];
14
+ if (script && script.parentNode) {
15
+ script.parentNode.insertBefore(element, script);
16
+ }
17
+ };
18
+ const init = ({ manifest, userId }) => {
19
+ if (!window ||
20
+ !manifest.variables ||
21
+ manifest.variables['flowType'] === 'server') {
22
+ return;
23
+ }
24
+ if (!window.gtag) {
25
+ initGA4(manifest.variables['measurementId']);
26
+ }
27
+ if (window.gtag) {
28
+ window.gtag('config', manifest.variables['measurementId'], {
29
+ user_id: userId,
30
+ send_page_view: false,
31
+ });
32
+ }
33
+ };
34
+
35
+ const getItems = (contents = []) => {
36
+ return contents.map((content) => {
37
+ const data = {
38
+ item_id: content.id.toString(),
39
+ quantity: content.quantity || 1,
40
+ };
41
+ if (content.title) {
42
+ data['item_name'] = content.title;
43
+ }
44
+ if (content.category) {
45
+ const categories = content.category.split(',');
46
+ data['item_category'] = categories[0];
47
+ for (let i = 1; i < Math.min(categories.length, 5); i++) {
48
+ if (categories[i].trim()) {
49
+ data[`item_category${i + 1}`] =
50
+ categories[i].trim();
51
+ }
52
+ }
53
+ }
54
+ if (content.item_price) {
55
+ data['price'] = content.item_price;
56
+ }
57
+ if (content.brand) {
58
+ data['item_brand'] = content.brand;
59
+ }
60
+ if (content.variantId) {
61
+ data['item_variant'] = content.variantId.toString();
62
+ }
63
+ return data;
64
+ });
65
+ };
66
+ const getEvent = (eventName, data, eventId) => {
67
+ switch (eventName) {
68
+ case 'PageView': {
69
+ return {
70
+ event: 'page_view',
71
+ eventData: {},
72
+ };
73
+ }
74
+ case 'ViewContent': {
75
+ return {
76
+ event: 'view_item',
77
+ eventData: {
78
+ currency: data['currency'],
79
+ value: data['value'],
80
+ items: getItems(data['contents']),
81
+ },
82
+ };
83
+ }
84
+ case 'ViewCart': {
85
+ return {
86
+ event: 'view_cart',
87
+ eventData: {
88
+ currency: data['currency'],
89
+ value: data['value'],
90
+ items: getItems(data['contents']),
91
+ },
92
+ };
93
+ }
94
+ case 'RemoveFromCart': {
95
+ return {
96
+ event: 'remove_from_cart',
97
+ eventData: {
98
+ currency: data['currency'],
99
+ value: data['value'],
100
+ items: getItems(data['contents']),
101
+ },
102
+ };
103
+ }
104
+ case 'AddToWishlist': {
105
+ return {
106
+ event: 'add_to_wishlist',
107
+ eventData: {
108
+ currency: data['currency'],
109
+ value: data['value'],
110
+ items: getItems(data['contents']),
111
+ },
112
+ };
113
+ }
114
+ case 'ViewList': {
115
+ return {
116
+ event: 'view_item_list',
117
+ eventData: {
118
+ item_list_name: data['listName'],
119
+ item_list_id: data['listId'],
120
+ items: getItems(data['contents']),
121
+ },
122
+ };
123
+ }
124
+ case 'Login': {
125
+ return {
126
+ event: 'login',
127
+ eventData: {
128
+ method: data['method'],
129
+ },
130
+ };
131
+ }
132
+ case 'SignUp': {
133
+ return {
134
+ event: 'sign_up',
135
+ eventData: {
136
+ method: data['method'],
137
+ },
138
+ };
139
+ }
140
+ case 'AddToCart': {
141
+ return {
142
+ event: 'add_to_cart',
143
+ eventData: {
144
+ currency: data['currency'],
145
+ value: data['value'],
146
+ items: getItems(data['contents']),
147
+ },
148
+ };
149
+ }
150
+ case 'InitiateCheckout': {
151
+ return {
152
+ event: 'begin_checkout',
153
+ eventData: {
154
+ currency: data['currency'],
155
+ value: data['value'],
156
+ items: getItems(data['contents']),
157
+ },
158
+ };
159
+ }
160
+ case 'AddShippingInfo': {
161
+ return {
162
+ event: 'add_shipping_info',
163
+ eventData: {
164
+ currency: data['currency'],
165
+ value: data['value'],
166
+ items: getItems(data['contents']),
167
+ },
168
+ };
169
+ }
170
+ case 'AddPaymentInfo': {
171
+ return {
172
+ event: 'add_payment_info',
173
+ eventData: {
174
+ currency: data['currency'],
175
+ value: data['value'],
176
+ items: getItems(data['contents']),
177
+ },
178
+ };
179
+ }
180
+ case 'Purchase': {
181
+ return {
182
+ event: 'purchase',
183
+ eventData: {
184
+ currency: data['currency'],
185
+ transaction_id: data['orderId'] || eventId,
186
+ value: data['value'],
187
+ items: getItems(data['contents']),
188
+ },
189
+ };
190
+ }
191
+ case 'Search': {
192
+ return {
193
+ event: 'search',
194
+ eventData: {
195
+ search_term: data['search'],
196
+ },
197
+ };
198
+ }
199
+ case 'Lead': {
200
+ return {
201
+ event: 'generate_lead',
202
+ eventData: {
203
+ currency: data['currency'],
204
+ value: data['value'],
205
+ },
206
+ };
207
+ }
208
+ default: {
209
+ return {
210
+ event: eventName,
211
+ eventData: data,
212
+ };
213
+ }
214
+ }
215
+ };
216
+ const handleTag = ({ data = {}, eventName, eventId, manifestVariables, }) => {
217
+ if (!eventName ||
218
+ !window.gtag ||
219
+ (manifestVariables === null || manifestVariables === void 0 ? void 0 : manifestVariables['flowType']) === 'server') {
220
+ return;
221
+ }
222
+ const { event, eventData } = getEvent(eventName, data, eventId);
223
+ if (manifestVariables) {
224
+ if (manifestVariables['measurementId']) {
225
+ eventData['send_to'] = manifestVariables['measurementId'];
226
+ }
227
+ if (manifestVariables['debug'] === '1') {
228
+ eventData['debug_mode'] = true;
229
+ }
230
+ }
231
+ window.gtag('event', event, { ...eventData, app: 'blotout' });
232
+ };
233
+
234
+ const getCookieValue = (key) => {
235
+ try {
236
+ if (!document || !document.cookie) {
237
+ return '';
238
+ }
239
+ const name = `${key}=`;
240
+ const decodedCookie = decodeURIComponent(document.cookie);
241
+ const ca = decodedCookie.split(';');
242
+ for (let i = 0; i < ca.length; i++) {
243
+ let c = ca[i];
244
+ while (c.charAt(0) === ' ') {
245
+ c = c.substring(1);
246
+ }
247
+ if (c.indexOf(name) === 0) {
248
+ return c.substring(name.length, c.length);
249
+ }
250
+ }
251
+ return '';
252
+ }
253
+ catch {
254
+ return '';
255
+ }
256
+ };
257
+
258
+ const tag = ({ data, eventName, manifestVariables, eventId }) => {
259
+ const isLoaded = window && window.gtag && !!getCookieValue('_ga');
260
+ if (isLoaded) {
261
+ handleTag({ data, eventName, manifestVariables, eventId });
262
+ }
263
+ return {
264
+ loaded: isLoaded,
265
+ sdkVersion: "0.26.6" ,
266
+ };
267
+ };
268
+
269
+ const data = {
270
+ name: 'googleAnalytics4',
271
+ init,
272
+ tag,
273
+ };
274
+ try {
275
+ if (window) {
276
+ if (!window.edgetagProviders) {
277
+ window.edgetagProviders = [];
278
+ }
279
+ window.edgetagProviders.push(data);
280
+ }
281
+ }
282
+ catch {
283
+ // No window
284
+ }
285
+
286
+ export { data as default };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blotoutio/providers-google-analytics-4-sdk",
3
- "version": "0.26.5",
3
+ "version": "0.26.6",
4
4
  "description": "Google Analytics 4 Browser SDK for EdgeTag",
5
5
  "author": "Blotout",
6
6
  "license": "MIT",
@@ -8,13 +8,16 @@
8
8
  "publishConfig": {
9
9
  "access": "public"
10
10
  },
11
- "main": "./index.js",
11
+ "main": "./index.cjs.js",
12
+ "module": "./index.mjs",
12
13
  "repository": {
13
14
  "type": "git",
14
15
  "url": "git+https://github.com/blotoutio/edgetag-sdk.git"
15
16
  },
16
17
  "files": [
17
18
  "index.js",
19
+ "index.cjs.js",
20
+ "index.mjs",
18
21
  "package.json",
19
22
  "README.md"
20
23
  ]