@mparticle/web-facebook-kit 2.2.0 → 2.3.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.
@@ -34,446 +34,473 @@ var isobject$1 = getCjsExportFromNamespace(isobject);
34
34
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
35
35
  // See the License for the specific language governing permissions and
36
36
  // limitations under the License.
37
-
38
-
39
- var name = 'Facebook',
40
- moduleId = 45,
41
- MessageType = {
42
- SessionStart: 1,
43
- SessionEnd: 2,
44
- PageView: 3,
45
- PageEvent: 4,
46
- CrashReport: 5,
47
- OptOut: 6,
48
- Commerce: 16,
49
- },
50
- IdentityType = {
51
- Other: 0,
52
- CustomerId: 1,
53
- Facebook: 2,
54
- Twitter: 3,
55
- Google: 4,
56
- Microsoft: 5,
57
- Yahoo: 6,
58
- Email: 7,
59
- FacebookCustomAudienceId: 9,
60
- Other2: 10,
61
- Other3: 11,
62
- Other4: 12,
63
- Other5: 13,
64
- Other6: 14,
65
- Other7: 15,
66
- Other8: 16,
67
- Other9: 17,
68
- Other10: 18,
69
- MobileNumber: 19,
70
- PhoneNumber2: 20,
71
- PhoneNumber3: 21,
72
- },
73
- SupportedCommerceTypes = [],
74
- // Standard FB Event Names from https://developers.facebook.com/docs/facebook-pixel/reference#standard-events
75
- ADD_TO_CART_EVENT_NAME = 'AddToCart',
76
- ADD_TO_WISHLIST_EVENT_NAME = 'AddToWishlist',
77
- CHECKOUT_EVENT_NAME = 'InitiateCheckout',
78
- PAGE_VIEW_EVENT_NAME = 'PageView',
79
- PURCHASE_EVENT_NAME = 'Purchase',
80
- REMOVE_FROM_CART_EVENT_NAME = 'RemoveFromCart',
81
- VIEW_CONTENT_EVENT_NAME = 'ViewContent',
82
- constructor = function () {
83
- var self = this,
84
- isInitialized = false,
85
- reportingService = null,
86
- settings,
87
- productAttributeMapping;
88
-
89
- self.name = name;
90
-
91
- function initForwarder(forwarderSettings, service, testMode, trackerId, userAttributes, userIdentities) {
92
- settings = forwarderSettings;
93
- reportingService = service;
94
-
95
- SupportedCommerceTypes = [
96
- mParticle.ProductActionType.Checkout,
97
- mParticle.ProductActionType.Purchase,
98
- mParticle.ProductActionType.AddToCart,
99
- mParticle.ProductActionType.RemoveFromCart,
100
- mParticle.ProductActionType.AddToWishlist,
101
- mParticle.ProductActionType.ViewDetail
102
- ];
103
37
 
104
- try {
105
- if (!testMode) {
106
- !function (f, b, e, v, n, t, s) {
107
- 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;
108
- 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];
109
- s.parentNode.insertBefore(t, s);
110
- } (window, document, 'script', 'https://connect.facebook.net/en_US/fbevents.js');
111
-
112
- var visitorData = {};
113
-
114
- if(settings.externalUserIdentityType && userIdentities && userIdentities.length > 0) {
115
- var selectedType = IdentityType[settings.externalUserIdentityType];
116
- var selectedIdentity = userIdentities.filter(function (identityElement) {
117
- if (identityElement.Type === selectedType) {
118
- return identityElement.Identity;
119
- }
120
- });
121
-
122
- if (selectedIdentity.length > 0) {
123
- visitorData['external_id'] = selectedIdentity[0].Identity;
38
+
39
+ var name = 'Facebook',
40
+ moduleId = 45,
41
+ MessageType = {
42
+ SessionStart: 1,
43
+ SessionEnd: 2,
44
+ PageView: 3,
45
+ PageEvent: 4,
46
+ CrashReport: 5,
47
+ OptOut: 6,
48
+ Commerce: 16,
49
+ },
50
+ IdentityType = {
51
+ Other: 0,
52
+ CustomerId: 1,
53
+ Facebook: 2,
54
+ Twitter: 3,
55
+ Google: 4,
56
+ Microsoft: 5,
57
+ Yahoo: 6,
58
+ Email: 7,
59
+ FacebookCustomAudienceId: 9,
60
+ Other2: 10,
61
+ Other3: 11,
62
+ Other4: 12,
63
+ Other5: 13,
64
+ Other6: 14,
65
+ Other7: 15,
66
+ Other8: 16,
67
+ Other9: 17,
68
+ Other10: 18,
69
+ MobileNumber: 19,
70
+ PhoneNumber2: 20,
71
+ PhoneNumber3: 21,
72
+ },
73
+ SupportedCommerceTypes = [],
74
+ // Standard FB Event Names from https://developers.facebook.com/docs/facebook-pixel/reference#standard-events
75
+ ADD_TO_CART_EVENT_NAME = 'AddToCart',
76
+ ADD_TO_WISHLIST_EVENT_NAME = 'AddToWishlist',
77
+ CHECKOUT_EVENT_NAME = 'InitiateCheckout',
78
+ PAGE_VIEW_EVENT_NAME = 'PageView',
79
+ PURCHASE_EVENT_NAME = 'Purchase',
80
+ REMOVE_FROM_CART_EVENT_NAME = 'RemoveFromCart',
81
+ VIEW_CONTENT_EVENT_NAME = 'ViewContent',
82
+ constructor = function () {
83
+ var self = this,
84
+ isInitialized = false,
85
+ reportingService = null,
86
+ settings,
87
+ productAttributeMapping;
88
+
89
+ self.name = name;
90
+
91
+ function initForwarder(forwarderSettings, service, testMode, trackerId, userAttributes, userIdentities) {
92
+ settings = forwarderSettings;
93
+ reportingService = service;
94
+
95
+ SupportedCommerceTypes = [
96
+ mParticle.ProductActionType.Checkout,
97
+ mParticle.ProductActionType.Purchase,
98
+ mParticle.ProductActionType.AddToCart,
99
+ mParticle.ProductActionType.RemoveFromCart,
100
+ mParticle.ProductActionType.AddToWishlist,
101
+ mParticle.ProductActionType.ViewDetail
102
+ ];
103
+
104
+ try {
105
+ if (!testMode) {
106
+ !function (f, b, e, v, n, t, s) {
107
+ 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;
108
+ 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];
109
+ s.parentNode.insertBefore(t, s);
110
+ } (window, document, 'script', 'https://connect.facebook.net/en_US/fbevents.js');
111
+
112
+ var visitorData = {};
113
+
114
+ if(settings.externalUserIdentityType && userIdentities && userIdentities.length > 0) {
115
+ var selectedType = IdentityType[settings.externalUserIdentityType];
116
+ var selectedIdentity = userIdentities.filter(function (identityElement) {
117
+ if (identityElement.Type === selectedType) {
118
+ return identityElement.Identity;
124
119
  }
120
+ });
121
+
122
+ if (selectedIdentity.length > 0) {
123
+ visitorData['external_id'] = selectedIdentity[0].Identity;
125
124
  }
126
125
  }
126
+ }
127
127
 
128
- if (settings.disablePushState === 'True') {
129
- // Facebook will automatically track page views whenever a new state is pushed to the HTML 5 History State API
130
- // this option can be disabled to prevent duplicate page views
131
- // https://developers.facebook.com/docs/facebook-pixel/implementation/tag_spa/#tagging-single-page-applications
132
- fbq.disablePushState = true;
133
- }
134
- fbq('init', settings.pixelId, visitorData);
135
-
136
- loadMappings();
128
+ if (settings.disablePushState === 'True') {
129
+ // Facebook will automatically track page views whenever a new state is pushed to the HTML 5 History State API
130
+ // this option can be disabled to prevent duplicate page views
131
+ // https://developers.facebook.com/docs/facebook-pixel/implementation/tag_spa/#tagging-single-page-applications
132
+ fbq.disablePushState = true;
133
+ }
134
+ fbq('init', settings.pixelId, visitorData);
135
+
136
+ loadMappings();
137
137
 
138
- isInitialized = true;
138
+ isInitialized = true;
139
139
 
140
- return 'Successfully initialized: ' + name;
140
+ return 'Successfully initialized: ' + name;
141
141
 
142
- }
143
- catch (e) {
144
- return 'Can\'t initialize forwarder: ' + name + ':' + e;
145
- }
146
142
  }
147
-
148
- function loadMappings() {
149
- productAttributeMapping = settings.productAttributeMapping
150
- ? JSON.parse(settings.productAttributeMapping.replace(/"/g, '"'))
151
- : [];
143
+ catch (e) {
144
+ return 'Can\'t initialize forwarder: ' + name + ':' + e;
152
145
  }
146
+ }
153
147
 
154
- function processEvent(event) {
155
- var reportEvent = false;
148
+ function loadMappings() {
149
+ productAttributeMapping = settings.productAttributeMapping
150
+ ? JSON.parse(settings.productAttributeMapping.replace(/"/g, '"'))
151
+ : [];
152
+ }
156
153
 
157
- if (!isInitialized) {
158
- return 'Can\'t send forwarder ' + name + ', not initialized';
159
- }
154
+ function processEvent(event) {
155
+ var reportEvent = false;
160
156
 
161
- try {
162
- if (event.EventDataType == MessageType.PageView) {
163
- reportEvent = true;
164
- logPageView(event);
165
- }
166
- else if (event.EventDataType == MessageType.PageEvent) {
167
- reportEvent = true;
168
- logPageEvent(event);
169
- }
170
- else if (event.EventDataType == MessageType.Commerce) {
171
- reportEvent = logCommerceEvent(event);
172
- }
173
-
174
- if (reportEvent && reportingService) {
175
- reportingService(self, event);
176
- }
157
+ if (!isInitialized) {
158
+ return 'Can\'t send forwarder ' + name + ', not initialized';
159
+ }
177
160
 
178
- return 'Successfully sent to forwarder ' + name;
161
+ try {
162
+ if (event.EventDataType == MessageType.PageView) {
163
+ reportEvent = true;
164
+ logPageView(event);
179
165
  }
180
- catch (error) {
181
- return 'Can\'t send to forwarder: ' + name + ' ' + error;
166
+ else if (event.EventDataType == MessageType.PageEvent) {
167
+ reportEvent = true;
168
+ logPageEvent(event);
169
+ }
170
+ else if (event.EventDataType == MessageType.Commerce) {
171
+ reportEvent = logCommerceEvent(event);
182
172
  }
183
- }
184
173
 
185
- function logCommerceEvent(event) {
186
- if (event.ProductAction &&
187
- event.ProductAction.ProductList &&
188
- event.ProductAction.ProductActionType &&
189
- SupportedCommerceTypes.indexOf(event.ProductAction.ProductActionType) > -1) {
174
+ if (reportEvent && reportingService) {
175
+ reportingService(self, event);
176
+ }
190
177
 
191
- var eventName,
192
- totalValue,
193
- params = cloneEventAttributes(event),
194
- eventID = createEventId(event);
195
- params['currency'] = event.CurrencyCode || 'USD';
178
+ return 'Successfully sent to forwarder ' + name;
179
+ }
180
+ catch (error) {
181
+ return 'Can\'t send to forwarder: ' + name + ' ' + error;
182
+ }
183
+ }
196
184
 
197
- if (event.EventName) {
198
- params['content_name'] = event.EventName;
199
- }
185
+ function logCommerceEvent(event) {
186
+ if (event.ProductAction &&
187
+ event.ProductAction.ProductList &&
188
+ event.ProductAction.ProductActionType &&
189
+ SupportedCommerceTypes.indexOf(event.ProductAction.ProductActionType) > -1) {
190
+ var eventName,
191
+ totalValue,
192
+ params = cloneEventAttributes(event),
193
+ eventID = createEventId(event),
194
+ sendProductNamesAsContents = settings.sendProductNamesasContents || false;
200
195
 
201
- var productSkus = event.ProductAction.ProductList.reduce(function (arr, curr) {
202
- if (curr.Sku) {
203
- arr.push(curr.Sku);
204
- }
205
- return arr;
206
- }, []);
196
+ params['currency'] = event.CurrencyCode || 'USD';
207
197
 
208
- if (productSkus && productSkus.length > 0) {
209
- params['content_ids'] = productSkus;
210
- }
198
+ if (event.EventName) {
199
+ params['content_name'] = event.EventName;
200
+ }
211
201
 
212
- if (event.ProductAction.ProductActionType == mParticle.ProductActionType.AddToWishlist ||
213
- event.ProductAction.ProductActionType == mParticle.ProductActionType.Checkout) {
214
- var eventCategory = getEventCategoryString(event);
215
- if (eventCategory) {
216
- params['content_category'] = eventCategory;
217
- }
218
- if (event.ProductAction.ProductActionType == mParticle.ProductActionType.Checkout && event.ProductAction.CheckoutStep) {
219
- params['checkout_step'] = event.ProductAction.CheckoutStep;
220
- }
202
+ var productSkus = event.ProductAction.ProductList.reduce(function (arr, curr) {
203
+ if (curr.Sku) {
204
+ arr.push(curr.Sku);
221
205
  }
206
+ return arr;
207
+ }, []);
222
208
 
223
- if (event.ProductAction.ProductActionType == mParticle.ProductActionType.AddToCart ||
224
- event.ProductAction.ProductActionType == mParticle.ProductActionType.AddToWishlist ||
225
- event.ProductAction.ProductActionType == mParticle.ProductActionType.ViewDetail) {
209
+ if (productSkus && productSkus.length > 0) {
210
+ params['content_ids'] = productSkus;
211
+ }
226
212
 
227
- totalValue = event.ProductAction.ProductList.reduce(function(sum, product){
228
- if (isNumeric(product.Price) && isNumeric(product.Quantity)) {
229
- sum += product.Price * product.Quantity;
230
- }
231
- return sum;
232
- }, 0);
213
+ // Override content_name with product names array if setting enabled
214
+ if (sendProductNamesAsContents) {
215
+ var productNames = buildProductNames(event.ProductAction.ProductList);
216
+ if (productNames && productNames.length > 0) {
217
+ params['content_name'] = productNames;
218
+ }
219
+ }
233
220
 
234
- params['value'] = totalValue;
221
+ // Set order_id if TransactionId exists
222
+ if (event.ProductAction.TransactionId) {
223
+ params['order_id'] = event.ProductAction.TransactionId;
224
+ }
235
225
 
236
- if (event.ProductAction.ProductActionType == mParticle.ProductActionType.AddToWishlist){
237
- eventName = ADD_TO_WISHLIST_EVENT_NAME;
238
- }
239
- else if (event.ProductAction.ProductActionType == mParticle.ProductActionType.AddToCart){
240
- eventName = ADD_TO_CART_EVENT_NAME;
241
- }
242
- else {
243
- eventName = VIEW_CONTENT_EVENT_NAME;
244
- }
226
+ // Build contents array
227
+ var contents = buildProductContents(event.ProductAction.ProductList);
228
+ if (contents && contents.length > 0) {
229
+ params['contents'] = contents;
230
+ }
245
231
 
232
+ if (event.ProductAction.ProductActionType == mParticle.ProductActionType.AddToWishlist ||
233
+ event.ProductAction.ProductActionType == mParticle.ProductActionType.Checkout) {
234
+ var eventCategory = getEventCategoryString(event);
235
+ if (eventCategory) {
236
+ params['content_category'] = eventCategory;
246
237
  }
247
- else if (event.ProductAction.ProductActionType == mParticle.ProductActionType.Checkout ||
248
- event.ProductAction.ProductActionType == mParticle.ProductActionType.Purchase) {
238
+ if (event.ProductAction.ProductActionType == mParticle.ProductActionType.Checkout && event.ProductAction.CheckoutStep) {
239
+ params['checkout_step'] = event.ProductAction.CheckoutStep;
240
+ }
241
+ }
249
242
 
250
- eventName = event.ProductAction.ProductActionType == mParticle.ProductActionType.Checkout ? CHECKOUT_EVENT_NAME : PURCHASE_EVENT_NAME;
243
+ if (event.ProductAction.ProductActionType == mParticle.ProductActionType.AddToCart ||
244
+ event.ProductAction.ProductActionType == mParticle.ProductActionType.AddToWishlist ||
245
+ event.ProductAction.ProductActionType == mParticle.ProductActionType.ViewDetail) {
251
246
 
252
- if (event.ProductAction.TotalAmount) {
253
- params['value'] = event.ProductAction.TotalAmount;
247
+ totalValue = event.ProductAction.ProductList.reduce(function(sum, product){
248
+ if (isNumeric(product.Price) && isNumeric(product.Quantity)) {
249
+ sum += product.Price * product.Quantity;
254
250
  }
251
+ return sum;
252
+ }, 0);
255
253
 
256
- var num_items = event.ProductAction.ProductList.reduce(function(sum, product){
257
- if (isNumeric(product.Quantity)) {
258
- sum += product.Quantity;
259
- }
260
- return sum;
261
- }, 0);
262
- params['num_items'] = num_items;
263
-
264
- if (event.ProductAction.TransactionId) {
265
- params['order_id'] = event.ProductAction.TransactionId;
266
- }
254
+ params['value'] = totalValue;
267
255
 
268
- // Build contents array for Purchase events
269
- if (event.ProductAction.ProductActionType == mParticle.ProductActionType.Purchase) {
270
- var contents = buildProductContents(event.ProductAction.ProductList);
271
- if (contents && contents.length > 0) {
272
- params['contents'] = contents;
273
- }
274
- }
256
+ if (event.ProductAction.ProductActionType == mParticle.ProductActionType.AddToWishlist){
257
+ eventName = ADD_TO_WISHLIST_EVENT_NAME;
258
+ }
259
+ else if (event.ProductAction.ProductActionType == mParticle.ProductActionType.AddToCart){
260
+ eventName = ADD_TO_CART_EVENT_NAME;
261
+ }
262
+ else {
263
+ eventName = VIEW_CONTENT_EVENT_NAME;
275
264
  }
276
- else if (event.ProductAction.ProductActionType == mParticle.ProductActionType.RemoveFromCart) {
277
- eventName = REMOVE_FROM_CART_EVENT_NAME;
278
-
279
- // remove from cart can be performed in 1 of 2 ways:
280
- // 1. mParticle.eCommerce.logProductEvent(), which contains event.ProductAction.TotalAmount
281
- // 2. mParticle.eCommerce.Cart.remove(), which does not contain event.ProductAction.TotalAmount
282
- // when there is no TotalAmount, a manual calculation must be done
283
- if (event.ProductAction.TotalAmount) {
284
- totalValue = event.ProductAction.TotalAmount;
285
- } else {
286
- totalValue = event.ProductAction.ProductList.reduce(function(sum, product) {
287
- if (isNumeric(product.TotalAmount)) {
288
- sum += product.TotalAmount;
289
- }
290
- return sum;
291
- }, 0);
292
- }
293
265
 
294
- params['value'] = totalValue;
266
+ }
267
+ else if (event.ProductAction.ProductActionType == mParticle.ProductActionType.Checkout ||
268
+ event.ProductAction.ProductActionType == mParticle.ProductActionType.Purchase) {
295
269
 
296
- fbq('trackCustom', eventName || 'customEvent', params, eventID);
297
- return true;
298
- }
270
+ eventName = event.ProductAction.ProductActionType == mParticle.ProductActionType.Checkout ? CHECKOUT_EVENT_NAME : PURCHASE_EVENT_NAME;
299
271
 
300
- if (eventName) {
301
- fbq('track', eventName, params, eventID);
272
+ if (event.ProductAction.TotalAmount) {
273
+ params['value'] = event.ProductAction.TotalAmount;
302
274
  }
303
- else {
304
- return false;
275
+
276
+ var num_items = event.ProductAction.ProductList.reduce(function(sum, product){
277
+ if (isNumeric(product.Quantity)) {
278
+ sum += product.Quantity;
279
+ }
280
+ return sum;
281
+ }, 0);
282
+ params['num_items'] = num_items;
283
+ }
284
+ else if (event.ProductAction.ProductActionType == mParticle.ProductActionType.RemoveFromCart) {
285
+ eventName = REMOVE_FROM_CART_EVENT_NAME;
286
+
287
+ // remove from cart can be performed in 1 of 2 ways:
288
+ // 1. mParticle.eCommerce.logProductEvent(), which contains event.ProductAction.TotalAmount
289
+ // 2. mParticle.eCommerce.Cart.remove(), which does not contain event.ProductAction.TotalAmount
290
+ // when there is no TotalAmount, a manual calculation must be done
291
+ if (event.ProductAction.TotalAmount) {
292
+ totalValue = event.ProductAction.TotalAmount;
293
+ } else {
294
+ totalValue = event.ProductAction.ProductList.reduce(function(sum, product) {
295
+ if (isNumeric(product.TotalAmount)) {
296
+ sum += product.TotalAmount;
297
+ }
298
+ return sum;
299
+ }, 0);
305
300
  }
306
301
 
302
+ params['value'] = totalValue;
303
+
304
+ fbq('trackCustom', eventName || 'customEvent', params, eventID);
307
305
  return true;
308
306
  }
309
307
 
310
- return false;
311
- }
308
+ if (eventName) {
309
+ fbq('track', eventName, params, eventID);
310
+ }
311
+ else {
312
+ return false;
313
+ }
312
314
 
313
- function logPageView(event) {
314
- logPageEvent(event, PAGE_VIEW_EVENT_NAME);
315
+ return true;
315
316
  }
316
317
 
317
- function logPageEvent(event, eventName) {
318
- var params = cloneEventAttributes(event);
319
- var eventID = createEventId(event);
318
+ return false;
319
+ }
320
320
 
321
- eventName = eventName || event.EventName;
322
- if (event.EventName) {
323
- params['content_name'] = event.EventName;
324
- }
321
+ function logPageView(event) {
322
+ logPageEvent(event, PAGE_VIEW_EVENT_NAME);
323
+ }
325
324
 
326
- fbq('trackCustom', eventName || 'customEvent', params, eventID);
327
- }
325
+ function logPageEvent(event, eventName) {
326
+ var params = cloneEventAttributes(event);
327
+ var eventID = createEventId(event);
328
328
 
329
- function cloneEventAttributes(event) {
330
- var attr = {};
331
- if (event && event.EventAttributes) {
332
- try {
333
- attr = JSON.parse(JSON.stringify(event.EventAttributes));
334
- }
335
- catch (e) {
336
- //
337
- }
338
- }
339
- return attr;
329
+ eventName = eventName || event.EventName;
330
+ if (event.EventName) {
331
+ params['content_name'] = event.EventName;
340
332
  }
341
333
 
342
- function isNumeric(n) {
343
- return !isNaN(parseFloat(n)) && isFinite(n);
344
- }
345
-
346
- function getEventCategoryString(event) {
334
+ fbq('trackCustom', eventName || 'customEvent', params, eventID);
335
+ }
347
336
 
348
- var enumTypeValues;
349
- var enumValue;
350
- if (event.EventDataType == MessageType.Commerce) {
351
- enumTypeValues = event.EventCategory ? mParticle.CommerceEventType : mParticle.ProductActionType;
352
- enumValue = event.EventCategory || event.ProductAction.ProductActionType;
337
+ function cloneEventAttributes(event) {
338
+ var attr = {};
339
+ if (event && event.EventAttributes) {
340
+ try {
341
+ attr = JSON.parse(JSON.stringify(event.EventAttributes));
353
342
  }
354
- else {
355
- enumTypeValues = mParticle.EventType;
356
- enumValue = event.EventCategory;
343
+ catch (e) {
344
+ //
357
345
  }
346
+ }
347
+ return attr;
348
+ }
358
349
 
359
- if (enumTypeValues && enumValue) {
350
+ function isNumeric(n) {
351
+ return !isNaN(parseFloat(n)) && isFinite(n);
352
+ }
360
353
 
361
- for (var category in enumTypeValues) {
362
- if (enumValue == enumTypeValues[category]) {
363
- return category;
364
- }
365
- }
366
- }
354
+ function getEventCategoryString(event) {
367
355
 
368
- return null;
356
+ var enumTypeValues;
357
+ var enumValue;
358
+ if (event.EventDataType == MessageType.Commerce) {
359
+ enumTypeValues = event.EventCategory ? mParticle.CommerceEventType : mParticle.ProductActionType;
360
+ enumValue = event.EventCategory || event.ProductAction.ProductActionType;
369
361
  }
370
-
371
- /**
372
- * Builds contents array for Facebook Pixel commerce events.
373
- * Creates a nested array of content items with product details.
374
- *
375
- * @param {Array} productList - Array of products from event.ProductAction.ProductList
376
- * @returns {Array} Array of content objects for Facebook Pixel
377
- */
378
- function buildProductContents(productList) {
379
- if (!productList || productList.length === 0) {
380
- return [];
381
- }
382
-
383
- return productList
384
- .filter(function(product) {
385
- return product && product.Sku;
386
- })
387
- .map(function(product) {
388
- var contentItem = {
389
- id: product.Sku,
390
- quantity: isNumeric(product.Quantity) ? product.Quantity : 1,
391
- name: product.Name,
392
- brand: product.Brand,
393
- category: product.Category,
394
- variant: product.Variant,
395
- item_price: isNumeric(product.Price) ? product.Price : null
396
- };
397
-
398
- // Apply configured mappings to custom attributes
399
- productAttributeMapping.forEach(function(productMapping) {
400
- if (!isobject$1(productMapping) || !productMapping.map || !productMapping.value) {
401
- return;
402
- }
403
-
404
- var sourceField = productMapping.map;
405
- var facebookFieldName = productMapping.value;
406
- var value = null;
407
-
408
- // Check for Product level field first
409
- if (product.hasOwnProperty(sourceField)) {
410
- value = product[sourceField];
411
- }
412
- // then check for Product.Attributes level field
413
- else if (product.Attributes && product.Attributes[sourceField]) {
414
- value = product.Attributes[sourceField];
415
- }
416
-
417
- if (value !== null && value !== undefined) {
418
- contentItem[facebookFieldName] = value;
419
- }
420
- });
421
- return contentItem;
422
- });
362
+ else {
363
+ enumTypeValues = mParticle.EventType;
364
+ enumValue = event.EventCategory;
423
365
  }
424
366
 
425
- // https://developers.facebook.com/docs/marketing-api/conversions-api/deduplicate-pixel-and-server-events#event-deduplication-options
426
- function createEventId(event) {
427
- return {
428
- eventID: event.SourceMessageId || null
367
+ if (enumTypeValues && enumValue) {
368
+
369
+ for (var category in enumTypeValues) {
370
+ if (enumValue == enumTypeValues[category]) {
371
+ return category;
372
+ }
429
373
  }
430
374
  }
431
375
 
432
- this.init = initForwarder;
433
- this.process = processEvent;
434
- };
435
-
436
- function getId() {
437
- return moduleId;
438
- }
376
+ return null;
377
+ }
439
378
 
440
- function register(config) {
441
- if (!config) {
442
- console.log('You must pass a config object to register the kit ' + name);
443
- return;
379
+ /**
380
+ * Builds contents array for Facebook Pixel commerce events.
381
+ * Creates a nested array of content items with product details.
382
+ *
383
+ * @param {Array} productList - Array of products from event.ProductAction.ProductList
384
+ * @returns {Array} Array of content objects for Facebook Pixel
385
+ */
386
+ function buildProductContents(productList) {
387
+ if (!productList || productList.length === 0) {
388
+ return [];
389
+ }
390
+
391
+ return productList
392
+ .filter(function(product) {
393
+ return product && product.Sku;
394
+ })
395
+ .map(function(product) {
396
+ var contentItem = {
397
+ id: product.Sku,
398
+ quantity: isNumeric(product.Quantity) ? product.Quantity : 1,
399
+ name: product.Name,
400
+ brand: product.Brand,
401
+ category: product.Category,
402
+ variant: product.Variant,
403
+ item_price: isNumeric(product.Price) ? product.Price : null
404
+ };
405
+
406
+ // Apply configured mappings to custom attributes
407
+ productAttributeMapping.forEach(function(productMapping) {
408
+ if (!isobject$1(productMapping) || !productMapping.map || !productMapping.value) {
409
+ return;
410
+ }
411
+
412
+ var sourceField = productMapping.map;
413
+ var facebookFieldName = productMapping.value;
414
+ var value = null;
415
+
416
+ // Check for Product level field first
417
+ if (product.hasOwnProperty(sourceField)) {
418
+ value = product[sourceField];
419
+ }
420
+ // then check for Product.Attributes level field
421
+ else if (product.Attributes && product.Attributes[sourceField]) {
422
+ value = product.Attributes[sourceField];
423
+ }
424
+
425
+ if (value !== null && value !== undefined) {
426
+ contentItem[facebookFieldName] = value;
427
+ }
428
+ });
429
+ return contentItem;
430
+ });
444
431
  }
445
432
 
446
- if (!isobject$1(config)) {
447
- console.log('\'config\' must be an object. You passed in a ' + typeof config);
448
- return;
433
+ // https://developers.facebook.com/docs/marketing-api/conversions-api/deduplicate-pixel-and-server-events#event-deduplication-options
434
+ function createEventId(event) {
435
+ return {
436
+ eventID: event.SourceMessageId || null
437
+ }
449
438
  }
450
439
 
451
- if (isobject$1(config.kits)) {
452
- config.kits[name] = {
453
- constructor: constructor
454
- };
455
- } else {
456
- config.kits = {};
457
- config.kits[name] = {
458
- constructor: constructor
459
- };
440
+ /**
441
+ * Builds array of product names from product list
442
+ * @param {Array} productList - Array of products
443
+ * @returns {Array} Array of product names
444
+ */
445
+ function buildProductNames(productList) {
446
+ if (!productList || productList.length === 0) {
447
+ return [];
448
+ }
449
+
450
+ return productList
451
+ .filter(function(product) {
452
+ return product && product.Name;
453
+ })
454
+ .map(function(product) {
455
+ return product.Name;
456
+ });
460
457
  }
461
- console.log('Successfully registered ' + name + ' to your mParticle configuration');
458
+
459
+ this.init = initForwarder;
460
+ this.process = processEvent;
461
+ };
462
+
463
+ function getId() {
464
+ return moduleId;
465
+ }
466
+
467
+ function register(config) {
468
+ if (!config) {
469
+ console.log('You must pass a config object to register the kit ' + name);
470
+ return;
462
471
  }
463
472
 
464
- if (typeof window !== 'undefined') {
465
- if (window && window.mParticle && window.mParticle.addForwarder) {
466
- window.mParticle.addForwarder({
467
- name: name,
468
- constructor: constructor,
469
- getId: getId
470
- });
471
- }
473
+ if (!isobject$1(config)) {
474
+ console.log('\'config\' must be an object. You passed in a ' + typeof config);
475
+ return;
476
+ }
477
+
478
+ if (isobject$1(config.kits)) {
479
+ config.kits[name] = {
480
+ constructor: constructor
481
+ };
482
+ } else {
483
+ config.kits = {};
484
+ config.kits[name] = {
485
+ constructor: constructor
486
+ };
487
+ }
488
+ console.log('Successfully registered ' + name + ' to your mParticle configuration');
489
+ }
490
+
491
+ if (typeof window !== 'undefined') {
492
+ if (window && window.mParticle && window.mParticle.addForwarder) {
493
+ window.mParticle.addForwarder({
494
+ name: name,
495
+ constructor: constructor,
496
+ getId: getId
497
+ });
472
498
  }
499
+ }
473
500
 
474
- var FacebookEventForwarder = {
475
- register: register
476
- };
501
+ var FacebookEventForwarder = {
502
+ register: register
503
+ };
477
504
  var FacebookEventForwarder_1 = FacebookEventForwarder.register;
478
505
 
479
506
  export default FacebookEventForwarder;