@mparticle/web-facebook-kit 2.1.0 → 2.1.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.
@@ -11,6 +11,16 @@ function isObject(val) {
11
11
  return val != null && typeof val === 'object' && Array.isArray(val) === false;
12
12
  }
13
13
 
14
+ var isobject = /*#__PURE__*/Object.freeze({
15
+ 'default': isObject
16
+ });
17
+
18
+ function getCjsExportFromNamespace (n) {
19
+ return n && n['default'] || n;
20
+ }
21
+
22
+ var isobject$1 = getCjsExportFromNamespace(isobject);
23
+
14
24
  /* eslint-disable no-undef */
15
25
  // Copyright 2015 mParticle, Inc.
16
26
  //
@@ -63,13 +73,13 @@ function isObject(val) {
63
73
  },
64
74
  SupportedCommerceTypes = [],
65
75
  // Standard FB Event Names from https://developers.facebook.com/docs/facebook-pixel/reference#standard-events
66
- ADD_TO_CART_EVENT_NAME = 'AddToCart';
67
- ADD_TO_WISHLIST_EVENT_NAME = 'AddToWishlist';
68
- CHECKOUT_EVENT_NAME = 'InitiateCheckout';
69
- PAGE_VIEW_EVENT_NAME = 'PageView';
70
- PURCHASE_EVENT_NAME = 'Purchase';
71
- REMOVE_FROM_CART_EVENT_NAME = 'RemoveFromCart';
72
- VIEW_CONTENT_EVENT_NAME = 'ViewContent';
76
+ ADD_TO_CART_EVENT_NAME = 'AddToCart',
77
+ ADD_TO_WISHLIST_EVENT_NAME = 'AddToWishlist',
78
+ CHECKOUT_EVENT_NAME = 'InitiateCheckout',
79
+ PAGE_VIEW_EVENT_NAME = 'PageView',
80
+ PURCHASE_EVENT_NAME = 'Purchase',
81
+ REMOVE_FROM_CART_EVENT_NAME = 'RemoveFromCart',
82
+ VIEW_CONTENT_EVENT_NAME = 'ViewContent',
73
83
  constructor = function () {
74
84
  var self = this,
75
85
  isInitialized = false,
@@ -357,12 +367,12 @@ function isObject(val) {
357
367
  return;
358
368
  }
359
369
 
360
- if (!isObject(config)) {
370
+ if (!isobject$1(config)) {
361
371
  console.log('\'config\' must be an object. You passed in a ' + typeof config);
362
372
  return;
363
373
  }
364
374
 
365
- if (isObject(config.kits)) {
375
+ if (isobject$1(config.kits)) {
366
376
  config.kits[name] = {
367
377
  constructor: constructor
368
378
  };
@@ -0,0 +1,392 @@
1
+ /*!
2
+ * isobject <https://github.com/jonschlinkert/isobject>
3
+ *
4
+ * Copyright (c) 2014-2017, Jon Schlinkert.
5
+ * Released under the MIT License.
6
+ */
7
+
8
+ function isObject(val) {
9
+ return val != null && typeof val === 'object' && Array.isArray(val) === false;
10
+ }
11
+
12
+ /* eslint-disable no-undef */
13
+ // Copyright 2015 mParticle, Inc.
14
+ //
15
+ // Licensed under the Apache License, Version 2.0 (the "License");
16
+ // you may not use this file except in compliance with the License.
17
+ // You may obtain a copy of the License at
18
+ //
19
+ // http://www.apache.org/licenses/LICENSE-2.0
20
+ //
21
+ // Unless required by applicable law or agreed to in writing, software
22
+ // distributed under the License is distributed on an "AS IS" BASIS,
23
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
24
+ // See the License for the specific language governing permissions and
25
+ // limitations under the License.
26
+
27
+
28
+ var name = 'Facebook',
29
+ moduleId = 45,
30
+ MessageType = {
31
+ SessionStart: 1,
32
+ SessionEnd: 2,
33
+ PageView: 3,
34
+ PageEvent: 4,
35
+ CrashReport: 5,
36
+ OptOut: 6,
37
+ Commerce: 16,
38
+ },
39
+ IdentityType = {
40
+ Other: 0,
41
+ CustomerId: 1,
42
+ Facebook: 2,
43
+ Twitter: 3,
44
+ Google: 4,
45
+ Microsoft: 5,
46
+ Yahoo: 6,
47
+ Email: 7,
48
+ FacebookCustomAudienceId: 9,
49
+ Other2: 10,
50
+ Other3: 11,
51
+ Other4: 12,
52
+ Other5: 13,
53
+ Other6: 14,
54
+ Other7: 15,
55
+ Other8: 16,
56
+ Other9: 17,
57
+ Other10: 18,
58
+ MobileNumber: 19,
59
+ PhoneNumber2: 20,
60
+ PhoneNumber3: 21,
61
+ },
62
+ SupportedCommerceTypes = [],
63
+ // Standard FB Event Names from https://developers.facebook.com/docs/facebook-pixel/reference#standard-events
64
+ ADD_TO_CART_EVENT_NAME = 'AddToCart',
65
+ ADD_TO_WISHLIST_EVENT_NAME = 'AddToWishlist',
66
+ CHECKOUT_EVENT_NAME = 'InitiateCheckout',
67
+ PAGE_VIEW_EVENT_NAME = 'PageView',
68
+ PURCHASE_EVENT_NAME = 'Purchase',
69
+ REMOVE_FROM_CART_EVENT_NAME = 'RemoveFromCart',
70
+ VIEW_CONTENT_EVENT_NAME = 'ViewContent',
71
+ constructor = function () {
72
+ var self = this,
73
+ isInitialized = false,
74
+ reportingService = null;
75
+
76
+ self.name = name;
77
+
78
+ function initForwarder(settings, service, testMode, trackerId, userAttributes, userIdentities) {
79
+ reportingService = service;
80
+
81
+ SupportedCommerceTypes = [
82
+ mParticle.ProductActionType.Checkout,
83
+ mParticle.ProductActionType.Purchase,
84
+ mParticle.ProductActionType.AddToCart,
85
+ mParticle.ProductActionType.RemoveFromCart,
86
+ mParticle.ProductActionType.AddToWishlist,
87
+ mParticle.ProductActionType.ViewDetail
88
+ ];
89
+
90
+ try {
91
+ if (!testMode) {
92
+ !function (f, b, e, v, n, t, s) {
93
+ if (f.fbq) return; n = f.fbq = function () { n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments); }; if (!f._fbq) f._fbq = n;
94
+ n.push = n; n.loaded = !0; n.version = '2.0'; n.queue = []; t = b.createElement(e); t.async = !0; t.src = v; s = b.getElementsByTagName(e)[0];
95
+ s.parentNode.insertBefore(t, s);
96
+ } (window, document, 'script', 'https://connect.facebook.net/en_US/fbevents.js');
97
+
98
+ var visitorData = {};
99
+
100
+ if(settings.externalUserIdentityType && userIdentities && userIdentities.length > 0) {
101
+ var selectedType = IdentityType[settings.externalUserIdentityType];
102
+ var selectedIdentity = userIdentities.filter(function (identityElement) {
103
+ if (identityElement.Type === selectedType) {
104
+ return identityElement.Identity;
105
+ }
106
+ });
107
+
108
+ if (selectedIdentity.length > 0) {
109
+ visitorData['external_id'] = selectedIdentity[0].Identity;
110
+ }
111
+ }
112
+ }
113
+
114
+ if (settings.disablePushState === 'True') {
115
+ // Facebook will automatically track page views whenever a new state is pushed to the HTML 5 History State API
116
+ // this option can be disabled to prevent duplicate page views
117
+ // https://developers.facebook.com/docs/facebook-pixel/implementation/tag_spa/#tagging-single-page-applications
118
+ fbq.disablePushState = true;
119
+ }
120
+ fbq('init', settings.pixelId, visitorData);
121
+
122
+ isInitialized = true;
123
+
124
+ return 'Successfully initialized: ' + name;
125
+
126
+ }
127
+ catch (e) {
128
+ return 'Can\'t initialize forwarder: ' + name + ':' + e;
129
+ }
130
+ }
131
+
132
+ function processEvent(event) {
133
+ var reportEvent = false;
134
+
135
+ if (!isInitialized) {
136
+ return 'Can\'t send forwarder ' + name + ', not initialized';
137
+ }
138
+
139
+ try {
140
+ if (event.EventDataType == MessageType.PageView) {
141
+ reportEvent = true;
142
+ logPageView(event);
143
+ }
144
+ else if (event.EventDataType == MessageType.PageEvent) {
145
+ reportEvent = true;
146
+ logPageEvent(event);
147
+ }
148
+ else if (event.EventDataType == MessageType.Commerce) {
149
+ reportEvent = logCommerceEvent(event);
150
+ }
151
+
152
+ if (reportEvent && reportingService) {
153
+ reportingService(self, event);
154
+ }
155
+
156
+ return 'Successfully sent to forwarder ' + name;
157
+ }
158
+ catch (error) {
159
+ return 'Can\'t send to forwarder: ' + name + ' ' + error;
160
+ }
161
+ }
162
+
163
+ function logCommerceEvent(event) {
164
+ if (event.ProductAction &&
165
+ event.ProductAction.ProductList &&
166
+ event.ProductAction.ProductActionType &&
167
+ SupportedCommerceTypes.indexOf(event.ProductAction.ProductActionType) > -1) {
168
+
169
+ var eventName,
170
+ totalValue,
171
+ params = cloneEventAttributes(event),
172
+ eventID = createEventId(event);
173
+ params['currency'] = event.CurrencyCode || 'USD';
174
+
175
+ if (event.EventName) {
176
+ params['content_name'] = event.EventName;
177
+ }
178
+
179
+ var productSkus = event.ProductAction.ProductList.reduce(function (arr, curr) {
180
+ if (curr.Sku) {
181
+ arr.push(curr.Sku);
182
+ }
183
+ return arr;
184
+ }, []);
185
+
186
+ if (productSkus && productSkus.length > 0) {
187
+ params['content_ids'] = productSkus;
188
+ }
189
+
190
+ if (event.ProductAction.ProductActionType == mParticle.ProductActionType.AddToWishlist ||
191
+ event.ProductAction.ProductActionType == mParticle.ProductActionType.Checkout) {
192
+ var eventCategory = getEventCategoryString(event);
193
+ if (eventCategory) {
194
+ params['content_category'] = eventCategory;
195
+ }
196
+ if (event.ProductAction.ProductActionType == mParticle.ProductActionType.Checkout && event.ProductAction.CheckoutStep) {
197
+ params['checkout_step'] = event.ProductAction.CheckoutStep;
198
+ }
199
+ }
200
+
201
+ if (event.ProductAction.ProductActionType == mParticle.ProductActionType.AddToCart ||
202
+ event.ProductAction.ProductActionType == mParticle.ProductActionType.AddToWishlist ||
203
+ event.ProductAction.ProductActionType == mParticle.ProductActionType.ViewDetail) {
204
+
205
+ totalValue = event.ProductAction.ProductList.reduce(function(sum, product){
206
+ if (isNumeric(product.Price) && isNumeric(product.Quantity)) {
207
+ sum += product.Price * product.Quantity;
208
+ }
209
+ return sum;
210
+ }, 0);
211
+
212
+ params['value'] = totalValue;
213
+
214
+ if (event.ProductAction.ProductActionType == mParticle.ProductActionType.AddToWishlist){
215
+ eventName = ADD_TO_WISHLIST_EVENT_NAME;
216
+ }
217
+ else if (event.ProductAction.ProductActionType == mParticle.ProductActionType.AddToCart){
218
+ eventName = ADD_TO_CART_EVENT_NAME;
219
+ }
220
+ else{
221
+ eventName = VIEW_CONTENT_EVENT_NAME;
222
+ }
223
+
224
+ }
225
+ else if (event.ProductAction.ProductActionType == mParticle.ProductActionType.Checkout ||
226
+ event.ProductAction.ProductActionType == mParticle.ProductActionType.Purchase) {
227
+
228
+ eventName = event.ProductAction.ProductActionType == mParticle.ProductActionType.Checkout ? CHECKOUT_EVENT_NAME : PURCHASE_EVENT_NAME;
229
+
230
+ if (event.ProductAction.TotalAmount) {
231
+ params['value'] = event.ProductAction.TotalAmount;
232
+ }
233
+
234
+ var num_items = event.ProductAction.ProductList.reduce(function(sum, product){
235
+ if (isNumeric(product.Quantity)) {
236
+ sum += product.Quantity;
237
+ }
238
+ return sum;
239
+ }, 0);
240
+ params['num_items'] = num_items;
241
+ }
242
+ else if (event.ProductAction.ProductActionType == mParticle.ProductActionType.RemoveFromCart) {
243
+ eventName = REMOVE_FROM_CART_EVENT_NAME;
244
+
245
+ // remove from cart can be performed in 1 of 2 ways:
246
+ // 1. mParticle.eCommerce.logProductEvent(), which contains event.ProductAction.TotalAmount
247
+ // 2. mParticle.eCommerce.Cart.remove(), which does not contain event.ProductAction.TotalAmount
248
+ // when there is no TotalAmount, a manual calculation must be done
249
+ if (event.ProductAction.TotalAmount) {
250
+ totalValue = event.ProductAction.TotalAmount;
251
+ } else {
252
+ totalValue = event.ProductAction.ProductList.reduce(function(sum, product) {
253
+ if (isNumeric(product.TotalAmount)) {
254
+ sum += product.TotalAmount;
255
+ }
256
+ return sum;
257
+ }, 0);
258
+ }
259
+
260
+ params['value'] = totalValue;
261
+
262
+ fbq('trackCustom', eventName || 'customEvent', params, eventID);
263
+ return true;
264
+ }
265
+
266
+ if (eventName) {
267
+ fbq('track', eventName, params, eventID);
268
+ }
269
+ else {
270
+ return false;
271
+ }
272
+
273
+ return true;
274
+ }
275
+
276
+ return false;
277
+ }
278
+
279
+ function logPageView(event) {
280
+ logPageEvent(event, PAGE_VIEW_EVENT_NAME);
281
+ }
282
+
283
+ function logPageEvent(event, eventName) {
284
+ var params = cloneEventAttributes(event);
285
+ var eventID = createEventId(event);
286
+
287
+ eventName = eventName || event.EventName;
288
+ if (event.EventName) {
289
+ params['content_name'] = event.EventName;
290
+ }
291
+
292
+ fbq('trackCustom', eventName || 'customEvent', params, eventID);
293
+ }
294
+
295
+ function cloneEventAttributes(event) {
296
+ var attr = {};
297
+ if (event && event.EventAttributes) {
298
+ try {
299
+ attr = JSON.parse(JSON.stringify(event.EventAttributes));
300
+ }
301
+ catch (e) {
302
+ //
303
+ }
304
+ }
305
+ return attr;
306
+ }
307
+
308
+ function isNumeric(n) {
309
+ return !isNaN(parseFloat(n)) && isFinite(n);
310
+ }
311
+
312
+ function getEventCategoryString(event) {
313
+
314
+ var enumTypeValues;
315
+ var enumValue;
316
+ if (event.EventDataType == MessageType.Commerce) {
317
+ enumTypeValues = event.EventCategory ? mParticle.CommerceEventType : mParticle.ProductActionType;
318
+ enumValue = event.EventCategory || event.ProductAction.ProductActionType;
319
+ }
320
+ else {
321
+ enumTypeValues = mParticle.EventType;
322
+ enumValue = event.EventCategory;
323
+ }
324
+
325
+ if (enumTypeValues && enumValue) {
326
+
327
+ for (var category in enumTypeValues) {
328
+ if (enumValue == enumTypeValues[category]) {
329
+ return category;
330
+ }
331
+ }
332
+ }
333
+
334
+ return null;
335
+ }
336
+
337
+ // https://developers.facebook.com/docs/marketing-api/conversions-api/deduplicate-pixel-and-server-events#event-deduplication-options
338
+ function createEventId(event) {
339
+ return {
340
+ eventID: event.SourceMessageId || null
341
+ }
342
+ }
343
+
344
+ this.init = initForwarder;
345
+ this.process = processEvent;
346
+ };
347
+
348
+ function getId() {
349
+ return moduleId;
350
+ }
351
+
352
+ function register(config) {
353
+ if (!config) {
354
+ console.log('You must pass a config object to register the kit ' + name);
355
+ return;
356
+ }
357
+
358
+ if (!isObject(config)) {
359
+ console.log('\'config\' must be an object. You passed in a ' + typeof config);
360
+ return;
361
+ }
362
+
363
+ if (isObject(config.kits)) {
364
+ config.kits[name] = {
365
+ constructor: constructor
366
+ };
367
+ } else {
368
+ config.kits = {};
369
+ config.kits[name] = {
370
+ constructor: constructor
371
+ };
372
+ }
373
+ console.log('Successfully registered ' + name + ' to your mParticle configuration');
374
+ }
375
+
376
+ if (typeof window !== 'undefined') {
377
+ if (window && window.mParticle && window.mParticle.addForwarder) {
378
+ window.mParticle.addForwarder({
379
+ name: name,
380
+ constructor: constructor,
381
+ getId: getId
382
+ });
383
+ }
384
+ }
385
+
386
+ var FacebookEventForwarder = {
387
+ register: register
388
+ };
389
+ var FacebookEventForwarder_1 = FacebookEventForwarder.register;
390
+
391
+ export default FacebookEventForwarder;
392
+ export { FacebookEventForwarder_1 as register };
package/package.json CHANGED
@@ -1,12 +1,14 @@
1
1
  {
2
2
  "name": "@mparticle/web-facebook-kit",
3
- "version": "2.1.0",
3
+ "version": "2.1.1",
4
4
  "author": "mParticle Developers <developers@mparticle.com> (https://www.mparticle.com)",
5
5
  "description": "mParticle integration sdk for facebook",
6
6
  "main": "dist/FacebookEventForwarder.common.js",
7
+ "module": "dist/FacebookEventForwarder.esm.js",
7
8
  "browser": "dist/FacebookEventForwarder.common.js",
8
9
  "files": [
9
- "dist/FacebookEventForwarder.common.js"
10
+ "dist/FacebookEventForwarder.common.js",
11
+ "dist/FacebookEventForwarder.esm.js"
10
12
  ],
11
13
  "repository": "https://github.com/mparticle-integrations/mparticle-javascript-integration-facebook",
12
14
  "scripts": {
package/CHANGELOG.md DELETED
@@ -1,7 +0,0 @@
1
- ## Releases
2
-
3
- --
4
-
5
- #### 2.1.0 - 2021-07-26
6
-
7
- - feat: Support page view de-duplication