@constructor-io/constructorio-client-javascript 2.21.0 → 2.25.2

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.
@@ -1,18 +1,18 @@
1
1
  "use strict";
2
2
 
3
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
5
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
6
6
 
7
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
7
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
8
8
 
9
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
9
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
10
10
 
11
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
11
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
12
12
 
13
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
13
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
14
14
 
15
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
15
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
16
16
 
17
17
  /* eslint-disable object-curly-newline, no-underscore-dangle, camelcase, no-unneeded-ternary */
18
18
  var qs = require('qs');
@@ -106,8 +106,7 @@ function applyParamsAsString(parameters, options) {
106
106
 
107
107
  var Tracker = /*#__PURE__*/function () {
108
108
  function Tracker(options) {
109
- _classCallCheck(this, Tracker);
110
-
109
+ (0, _classCallCheck2["default"])(this, Tracker);
111
110
  this.options = options || {};
112
111
  this.eventemitter = new EventEmitter();
113
112
  this.requests = new RequestQueue(options, this.eventemitter);
@@ -124,7 +123,7 @@ var Tracker = /*#__PURE__*/function () {
124
123
  */
125
124
 
126
125
 
127
- _createClass(Tracker, [{
126
+ (0, _createClass2["default"])(Tracker, [{
128
127
  key: "trackSessionStart",
129
128
  value: function trackSessionStart() {
130
129
  var networkParameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -176,13 +175,16 @@ var Tracker = /*#__PURE__*/function () {
176
175
  * @returns {(true|Error)}
177
176
  * @description User selected (clicked, or navigated to via keyboard) a result that appeared within autocomplete
178
177
  * @example
179
- * constructorio.tracker.trackAutocompleteSelect('T-Shirt', {
180
- * original_query: 'Shirt',
181
- * section: 'Products',
182
- * tr: 'click',
183
- * group_id: '88JU230',
184
- * display_name: 'apparel',
185
- * });
178
+ * constructorio.tracker.trackAutocompleteSelect(
179
+ * 'T-Shirt',
180
+ * {
181
+ * original_query: 'Shirt',
182
+ * section: 'Products',
183
+ * tr: 'click',
184
+ * group_id: '88JU230',
185
+ * display_name: 'apparel',
186
+ * },
187
+ * );
186
188
  */
187
189
 
188
190
  }, {
@@ -193,7 +195,7 @@ var Tracker = /*#__PURE__*/function () {
193
195
  // Ensure term is provided (required)
194
196
  if (term && typeof term === 'string') {
195
197
  // Ensure parameters are provided (required)
196
- if (parameters && _typeof(parameters) === 'object' && !Array.isArray(parameters)) {
198
+ if (parameters && (0, _typeof2["default"])(parameters) === 'object' && !Array.isArray(parameters)) {
197
199
  var url = "".concat(this.options.serviceUrl, "/autocomplete/").concat(helpers.ourEncodeURIComponent(term), "/select?");
198
200
  var queryParams = {};
199
201
  var original_query = parameters.original_query,
@@ -248,11 +250,14 @@ var Tracker = /*#__PURE__*/function () {
248
250
  * @returns {(true|Error)}
249
251
  * @description User submitted a search (pressing enter within input element, or clicking submit element)
250
252
  * @example
251
- * constructorio.tracker.trackSearchSubmit('T-Shirt', {
252
- * original_query: 'Shirt',
253
- * group_id: '88JU230',
254
- * display_name: 'apparel',
255
- * });
253
+ * constructorio.tracker.trackSearchSubmit(
254
+ * 'T-Shirt',
255
+ * {
256
+ * original_query: 'Shirt',
257
+ * group_id: '88JU230',
258
+ * display_name: 'apparel',
259
+ * },
260
+ * );
256
261
  */
257
262
 
258
263
  }, {
@@ -263,7 +268,7 @@ var Tracker = /*#__PURE__*/function () {
263
268
  // Ensure term is provided (required)
264
269
  if (term && typeof term === 'string') {
265
270
  // Ensure parameters are provided (required)
266
- if (parameters && _typeof(parameters) === 'object' && !Array.isArray(parameters)) {
271
+ if (parameters && (0, _typeof2["default"])(parameters) === 'object' && !Array.isArray(parameters)) {
267
272
  var url = "".concat(this.options.serviceUrl, "/autocomplete/").concat(helpers.ourEncodeURIComponent(term), "/search?");
268
273
  var queryParams = {};
269
274
  var original_query = parameters.original_query,
@@ -300,16 +305,19 @@ var Tracker = /*#__PURE__*/function () {
300
305
  * @param {string} term - Search results query term
301
306
  * @param {object} parameters - Additional parameters to be sent with request
302
307
  * @param {number} parameters.num_results - Number of search results in total
303
- * @param {array} [parameters.item_ids] - List of product item unique identifiers in search results listing
308
+ * @param {string[]} [parameters.item_ids] - List of product item unique identifiers in search results listing
304
309
  * @param {object} [networkParameters] - Parameters relevant to the network request
305
310
  * @param {number} [networkParameters.timeout] - Request timeout (in milliseconds)
306
311
  * @returns {(true|Error)}
307
312
  * @description User viewed a search product listing page
308
313
  * @example
309
- * constructorio.tracker.trackSearchResultsLoaded('T-Shirt', {
310
- * num_results: 167,
311
- * item_ids: ['KMH876', 'KMH140', 'KMH437'],
312
- * });
314
+ * constructorio.tracker.trackSearchResultsLoaded(
315
+ * 'T-Shirt',
316
+ * {
317
+ * num_results: 167,
318
+ * item_ids: ['KMH876', 'KMH140', 'KMH437'],
319
+ * },
320
+ * );
313
321
  */
314
322
 
315
323
  }, {
@@ -320,7 +328,7 @@ var Tracker = /*#__PURE__*/function () {
320
328
  // Ensure term is provided (required)
321
329
  if (term && typeof term === 'string') {
322
330
  // Ensure parameters are provided (required)
323
- if (parameters && _typeof(parameters) === 'object' && !Array.isArray(parameters)) {
331
+ if (parameters && (0, _typeof2["default"])(parameters) === 'object' && !Array.isArray(parameters)) {
324
332
  var url = "".concat(this.options.serviceUrl, "/behavior?");
325
333
  var queryParams = {
326
334
  action: 'search-results',
@@ -329,16 +337,21 @@ var Tracker = /*#__PURE__*/function () {
329
337
  var num_results = parameters.num_results,
330
338
  customer_ids = parameters.customer_ids,
331
339
  item_ids = parameters.item_ids;
340
+ var customerIDs;
332
341
 
333
342
  if (!helpers.isNil(num_results)) {
334
343
  queryParams.num_results = num_results;
335
344
  } // Ensure support for both item_ids and customer_ids as parameters
336
345
 
337
346
 
338
- if (item_ids && Array.isArray(item_ids)) {
339
- queryParams.customer_ids = item_ids.join(',');
340
- } else if (customer_ids && Array.isArray(customer_ids)) {
341
- queryParams.customer_ids = customer_ids.join(',');
347
+ if (item_ids && Array.isArray(item_ids) && item_ids.length) {
348
+ customerIDs = item_ids;
349
+ } else if (customer_ids && Array.isArray(customer_ids) && customer_ids.length) {
350
+ customerIDs = customer_ids;
351
+ }
352
+
353
+ if (customerIDs && customerIDs.length) {
354
+ queryParams.customer_ids = customerIDs.slice(0, 100).join(',');
342
355
  }
343
356
 
344
357
  this.requests.queue("".concat(url).concat(applyParamsAsString(queryParams, this.options)), undefined, undefined, networkParameters);
@@ -368,11 +381,14 @@ var Tracker = /*#__PURE__*/function () {
368
381
  * @returns {(true|Error)}
369
382
  * @description User clicked a result that appeared within a search product listing page
370
383
  * @example
371
- * constructorio.tracker.trackSearchResultClick('T-Shirt', {
372
- * item_name: 'Red T-Shirt',
373
- * item_id: 'KMH876',
374
- * result_id: '019927c2-f955-4020-8b8d-6b21b93cb5a2',
375
- * });
384
+ * constructorio.tracker.trackSearchResultClick(
385
+ * 'T-Shirt',
386
+ * {
387
+ * item_name: 'Red T-Shirt',
388
+ * item_id: 'KMH876',
389
+ * result_id: '019927c2-f955-4020-8b8d-6b21b93cb5a2',
390
+ * },
391
+ * );
376
392
  */
377
393
 
378
394
  }, {
@@ -383,7 +399,7 @@ var Tracker = /*#__PURE__*/function () {
383
399
  // Ensure term is provided (required)
384
400
  if (term && typeof term === 'string') {
385
401
  // Ensure parameters are provided (required)
386
- if (parameters && _typeof(parameters) === 'object' && !Array.isArray(parameters)) {
402
+ if (parameters && (0, _typeof2["default"])(parameters) === 'object' && !Array.isArray(parameters)) {
387
403
  var url = "".concat(this.options.serviceUrl, "/autocomplete/").concat(helpers.ourEncodeURIComponent(term), "/click_through?");
388
404
  var queryParams = {};
389
405
  var item_name = parameters.item_name,
@@ -430,10 +446,10 @@ var Tracker = /*#__PURE__*/function () {
430
446
  * Send conversion event to API
431
447
  *
432
448
  * @function trackConversion
433
- * @param {string} term - Search results query term
449
+ * @param {string} [term] - Search results query term that led to conversion event
434
450
  * @param {object} parameters - Additional parameters to be sent with request
435
451
  * @param {string} parameters.item_id - Product item unique identifier
436
- * @param {string} parameters.revenue - Revenue (price) of product item
452
+ * @param {number} [parameters.revenue] - Sale price if available, otherwise the regular (retail) price of item
437
453
  * @param {string} [parameters.item_name] - Product item name
438
454
  * @param {string} [parameters.variation_id] - Product item variation unique identifier
439
455
  * @param {string} [parameters.type='add_to_cart'] - Conversion type
@@ -445,16 +461,20 @@ var Tracker = /*#__PURE__*/function () {
445
461
  * @param {number} [networkParameters.timeout] - Request timeout (in milliseconds)
446
462
  * @returns {(true|Error)}
447
463
  * @description User performed an action indicating interest in an item (add to cart, add to wishlist, etc.)
464
+ * @see https://docs.constructor.io/rest_api/behavioral_logging/conversions
448
465
  * @example
449
- * constructorio.tracker.trackConversion('T-Shirt', {
450
- * item_id: 'KMH876',
451
- * revenue: 12.00,
452
- * item_name: 'Red T-Shirt',
453
- * variation_id: 'KMH879-7632',
454
- * type: 'like',
455
- * result_id: '019927c2-f955-4020-8b8d-6b21b93cb5a2',
456
- * section: 'Products',
457
- * });
466
+ * constructorio.tracker.trackConversion(
467
+ * 'T-Shirt',
468
+ * {
469
+ * item_id: 'KMH876',
470
+ * revenue: 12.00,
471
+ * item_name: 'Red T-Shirt',
472
+ * variation_id: 'KMH879-7632',
473
+ * type: 'like',
474
+ * result_id: '019927c2-f955-4020-8b8d-6b21b93cb5a2',
475
+ * section: 'Products',
476
+ * },
477
+ * );
458
478
  */
459
479
 
460
480
  }, {
@@ -463,7 +483,7 @@ var Tracker = /*#__PURE__*/function () {
463
483
  var networkParameters = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
464
484
 
465
485
  // Ensure parameters are provided (required)
466
- if (parameters && _typeof(parameters) === 'object' && !Array.isArray(parameters)) {
486
+ if (parameters && (0, _typeof2["default"])(parameters) === 'object' && !Array.isArray(parameters)) {
467
487
  var searchTerm = helpers.ourEncodeURIComponent(term) || 'TERM_UNKNOWN';
468
488
  var requestPath = "".concat(this.options.serviceUrl, "/v2/behavioral_action/conversion?");
469
489
  var queryParams = {};
@@ -540,8 +560,8 @@ var Tracker = /*#__PURE__*/function () {
540
560
  *
541
561
  * @function trackPurchase
542
562
  * @param {object} parameters - Additional parameters to be sent with request
543
- * @param {array} parameters.items - List of product item objects
544
- * @param {number} parameters.revenue - Revenue
563
+ * @param {object[]} parameters.items - List of product item objects
564
+ * @param {number} parameters.revenue - The subtotal (not including taxes, shipping, etc.) of the entire order
545
565
  * @param {string} [parameters.order_id] - Unique order identifier
546
566
  * @param {string} [parameters.section] - Index section
547
567
  * @param {object} [networkParameters] - Parameters relevant to the network request
@@ -549,12 +569,14 @@ var Tracker = /*#__PURE__*/function () {
549
569
  * @returns {(true|Error)}
550
570
  * @description User completed an order (usually fired on order confirmation page)
551
571
  * @example
552
- * constructorio.tracker.trackPurchase({
553
- * items: [{ item_id: 'KMH876' }, { item_id: 'KMH140' }],
554
- * revenue: 12.00,
555
- * order_id: 'OUNXBG2HMA',
556
- * section: 'Products',
557
- * });
572
+ * constructorio.tracker.trackPurchase(
573
+ * {
574
+ * items: [{ item_id: 'KMH876' }, { item_id: 'KMH140' }],
575
+ * revenue: 12.00,
576
+ * order_id: 'OUNXBG2HMA',
577
+ * section: 'Products',
578
+ * },
579
+ * );
558
580
  */
559
581
 
560
582
  }, {
@@ -563,7 +585,7 @@ var Tracker = /*#__PURE__*/function () {
563
585
  var networkParameters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
564
586
 
565
587
  // Ensure parameters are provided (required)
566
- if (parameters && _typeof(parameters) === 'object' && !Array.isArray(parameters)) {
588
+ if (parameters && (0, _typeof2["default"])(parameters) === 'object' && !Array.isArray(parameters)) {
567
589
  var requestPath = "".concat(this.options.serviceUrl, "/v2/behavioral_action/purchase?");
568
590
  var queryParams = {};
569
591
  var bodyParams = {};
@@ -627,14 +649,16 @@ var Tracker = /*#__PURE__*/function () {
627
649
  * @returns {(true|Error)}
628
650
  * @description User viewed a set of recommendations
629
651
  * @example
630
- * constructorio.tracker.trackRecommendationView({
631
- * result_count: 22,
632
- * result_page: 2,
633
- * result_id: '019927c2-f955-4020-8b8d-6b21b93cb5a2',
634
- * url: 'https://demo.constructor.io/sandbox/farmstand',
635
- * pod_id: '019927c2-f955-4020',
636
- * num_results_viewed: 3,
637
- * });
652
+ * constructorio.tracker.trackRecommendationView(
653
+ * {
654
+ * result_count: 22,
655
+ * result_page: 2,
656
+ * result_id: '019927c2-f955-4020-8b8d-6b21b93cb5a2',
657
+ * url: 'https://demo.constructor.io/sandbox/farmstand',
658
+ * pod_id: '019927c2-f955-4020',
659
+ * num_results_viewed: 3,
660
+ * },
661
+ * );
638
662
  */
639
663
 
640
664
  }, {
@@ -643,7 +667,7 @@ var Tracker = /*#__PURE__*/function () {
643
667
  var networkParameters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
644
668
 
645
669
  // Ensure parameters are provided (required)
646
- if (parameters && _typeof(parameters) === 'object' && !Array.isArray(parameters)) {
670
+ if (parameters && (0, _typeof2["default"])(parameters) === 'object' && !Array.isArray(parameters)) {
647
671
  var requestPath = "".concat(this.options.serviceUrl, "/v2/behavioral_action/recommendation_result_view?");
648
672
  var bodyParams = {};
649
673
  var result_count = parameters.result_count,
@@ -717,17 +741,19 @@ var Tracker = /*#__PURE__*/function () {
717
741
  * @returns {(true|Error)}
718
742
  * @description User clicked an item that appeared within a list of recommended results
719
743
  * @example
720
- * constructorio.tracker.trackRecommendationClick({
721
- * variation_id: 'KMH879-7632',
722
- * result_id: '019927c2-f955-4020-8b8d-6b21b93cb5a2',
723
- * result_count: 22,
724
- * result_page: 2,
725
- * result_position_on_page: 2,
726
- * num_results_per_page: 12,
727
- * pod_id: '019927c2-f955-4020',
728
- * strategy_id: 'complimentary',
729
- * item_id: 'KMH876',
730
- * });
744
+ * constructorio.tracker.trackRecommendationClick(
745
+ * {
746
+ * variation_id: 'KMH879-7632',
747
+ * result_id: '019927c2-f955-4020-8b8d-6b21b93cb5a2',
748
+ * result_count: 22,
749
+ * result_page: 2,
750
+ * result_position_on_page: 2,
751
+ * num_results_per_page: 12,
752
+ * pod_id: '019927c2-f955-4020',
753
+ * strategy_id: 'complimentary',
754
+ * item_id: 'KMH876',
755
+ * },
756
+ * );
731
757
  */
732
758
 
733
759
  }, {
@@ -736,7 +762,7 @@ var Tracker = /*#__PURE__*/function () {
736
762
  var networkParameters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
737
763
 
738
764
  // Ensure parameters are provided (required)
739
- if (parameters && _typeof(parameters) === 'object' && !Array.isArray(parameters)) {
765
+ if (parameters && (0, _typeof2["default"])(parameters) === 'object' && !Array.isArray(parameters)) {
740
766
  var requestPath = "".concat(this.options.serviceUrl, "/v2/behavioral_action/recommendation_result_click?");
741
767
  var bodyParams = {};
742
768
  var variation_id = parameters.variation_id,
@@ -817,27 +843,29 @@ var Tracker = /*#__PURE__*/function () {
817
843
  * @param {number} [parameters.result_count] - Number of results displayed
818
844
  * @param {number} [parameters.result_page] - Page number of results
819
845
  * @param {string} [parameters.result_id] - Browse result identifier (returned in response from Constructor)
820
- * @param {string} [parameters.selected_filters] - Selected filters
846
+ * @param {string} [parameters.selected_filters] - Selected filters
821
847
  * @param {string} [parameters.sort_order] - Sort order ('ascending' or 'descending')
822
848
  * @param {string} [parameters.sort_by] - Sorting method
823
- * @param {array} [parameters.items] - List of product item objects
849
+ * @param {object[]} [parameters.items] - List of product item objects
824
850
  * @param {object} [networkParameters] - Parameters relevant to the network request
825
851
  * @param {number} [networkParameters.timeout] - Request timeout (in milliseconds)
826
852
  * @returns {(true|Error)}
827
853
  * @description User viewed a browse product listing page
828
854
  * @example
829
- * constructorio.tracker.trackBrowseResultsLoaded({
830
- * result_count: 22,
831
- * result_page: 2,
832
- * result_id: '019927c2-f955-4020-8b8d-6b21b93cb5a2',
833
- * selected_filters: [ 'brand', 'color' ],
834
- * sort_order: 'ascending',
835
- * sort_by: 'price',
836
- * items: [{ item_id: 'KMH876' }, { item_id: 'KMH140' }],
837
- * url: 'https://demo.constructor.io/sandbox/farmstand',
838
- * filter_name: 'brand',
839
- * filter_value: 'XYZ',
840
- * });
855
+ * constructorio.tracker.trackBrowseResultsLoaded(
856
+ * {
857
+ * result_count: 22,
858
+ * result_page: 2,
859
+ * result_id: '019927c2-f955-4020-8b8d-6b21b93cb5a2',
860
+ * selected_filters: { brand: ['foo'], color: ['black'] },
861
+ * sort_order: 'ascending',
862
+ * sort_by: 'price',
863
+ * items: [{ item_id: 'KMH876' }, { item_id: 'KMH140' }],
864
+ * url: 'https://demo.constructor.io/sandbox/farmstand',
865
+ * filter_name: 'brand',
866
+ * filter_value: 'XYZ',
867
+ * },
868
+ * );
841
869
  */
842
870
 
843
871
  }, {
@@ -846,7 +874,7 @@ var Tracker = /*#__PURE__*/function () {
846
874
  var networkParameters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
847
875
 
848
876
  // Ensure parameters are provided (required)
849
- if (parameters && _typeof(parameters) === 'object' && !Array.isArray(parameters)) {
877
+ if (parameters && (0, _typeof2["default"])(parameters) === 'object' && !Array.isArray(parameters)) {
850
878
  var requestPath = "".concat(this.options.serviceUrl, "/v2/behavioral_action/browse_result_load?");
851
879
  var bodyParams = {};
852
880
  var section = parameters.section,
@@ -904,7 +932,7 @@ var Tracker = /*#__PURE__*/function () {
904
932
  }
905
933
 
906
934
  if (items && Array.isArray(items)) {
907
- bodyParams.items = items;
935
+ bodyParams.items = items.slice(0, 100);
908
936
  }
909
937
 
910
938
  var requestURL = "".concat(requestPath).concat(applyParamsAsString({}, this.options));
@@ -935,24 +963,26 @@ var Tracker = /*#__PURE__*/function () {
935
963
  * @param {number} [parameters.result_page] - Page number of results
936
964
  * @param {number} [parameters.result_position_on_page] - Position of clicked item
937
965
  * @param {number} [parameters.num_results_per_page] - Number of results shown
938
- * @param {string} [parameters.selected_filters] - Selected filters
966
+ * @param {object} [parameters.selected_filters] - Selected filters
939
967
  * @param {object} [networkParameters] - Parameters relevant to the network request
940
968
  * @param {number} [networkParameters.timeout] - Request timeout (in milliseconds)
941
969
  * @returns {(true|Error)}
942
970
  * @description User clicked a result that appeared within a browse product listing page
943
971
  * @example
944
- * constructorio.tracker.trackBrowseResultClick({
945
- * variation_id: 'KMH879-7632',
946
- * result_id: '019927c2-f955-4020-8b8d-6b21b93cb5a2',
947
- * result_count: 22,
948
- * result_page: 2,
949
- * result_position_on_page: 2,
950
- * num_results_per_page: 12,
951
- * selected_filters: [ 'brand', 'color' ],
952
- * filter_name: 'brand',
953
- * filter_value: 'XYZ',
954
- * item_id: 'KMH876',
955
- * });
972
+ * constructorio.tracker.trackBrowseResultClick(
973
+ * {
974
+ * variation_id: 'KMH879-7632',
975
+ * result_id: '019927c2-f955-4020-8b8d-6b21b93cb5a2',
976
+ * result_count: 22,
977
+ * result_page: 2,
978
+ * result_position_on_page: 2,
979
+ * num_results_per_page: 12,
980
+ * selected_filters: { brand: ['foo'], color: ['black'] },
981
+ * filter_name: 'brand',
982
+ * filter_value: 'XYZ',
983
+ * item_id: 'KMH876',
984
+ * },
985
+ * );
956
986
  */
957
987
 
958
988
  }, {
@@ -961,7 +991,7 @@ var Tracker = /*#__PURE__*/function () {
961
991
  var networkParameters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
962
992
 
963
993
  // Ensure parameters are provided (required)
964
- if (parameters && _typeof(parameters) === 'object' && !Array.isArray(parameters)) {
994
+ if (parameters && (0, _typeof2["default"])(parameters) === 'object' && !Array.isArray(parameters)) {
965
995
  var requestPath = "".concat(this.options.serviceUrl, "/v2/behavioral_action/browse_result_click?");
966
996
  var bodyParams = {};
967
997
  var section = parameters.section,
@@ -1049,11 +1079,13 @@ var Tracker = /*#__PURE__*/function () {
1049
1079
  * @returns {(true|Error)}
1050
1080
  * @description User clicked a result that appeared outside of the scope of search / browse / recommendations
1051
1081
  * @example
1052
- * constructorio.tracker.trackGenericResultClick({
1053
- * item_id: 'KMH876',
1054
- * item_name: 'Red T-Shirt',
1055
- * variation_id: 'KMH879-7632',
1056
- * });
1082
+ * constructorio.tracker.trackGenericResultClick(
1083
+ * {
1084
+ * item_id: 'KMH876',
1085
+ * item_name: 'Red T-Shirt',
1086
+ * variation_id: 'KMH879-7632',
1087
+ * },
1088
+ * );
1057
1089
  */
1058
1090
 
1059
1091
  }, {
@@ -1062,7 +1094,7 @@ var Tracker = /*#__PURE__*/function () {
1062
1094
  var networkParameters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1063
1095
 
1064
1096
  // Ensure required parameters are provided
1065
- if (_typeof(parameters) === 'object' && !!parameters.item_id) {
1097
+ if ((0, _typeof2["default"])(parameters) === 'object' && !!parameters.item_id) {
1066
1098
  var requestPath = "".concat(this.options.serviceUrl, "/v2/behavioral_action/result_click?");
1067
1099
  var bodyParams = {};
1068
1100
  var item_id = parameters.item_id,
@@ -1102,7 +1134,7 @@ var Tracker = /*#__PURE__*/function () {
1102
1134
  * @returns {(true|Error)}
1103
1135
  * @example
1104
1136
  * constructorio.tracker.on('error', (data) => {
1105
- * // Handle tracking error
1137
+ * // Handle tracking error
1106
1138
  * });
1107
1139
  */
1108
1140
 
@@ -1121,8 +1153,9 @@ var Tracker = /*#__PURE__*/function () {
1121
1153
  return true;
1122
1154
  }
1123
1155
  }]);
1124
-
1125
1156
  return Tracker;
1126
- }();
1157
+ }(); // Exposed for testing
1158
+
1127
1159
 
1160
+ Tracker.RequestQueue = RequestQueue;
1128
1161
  module.exports = Tracker;
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
 
3
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
5
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
6
6
 
7
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
7
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
8
8
 
9
9
  /* eslint-disable no-unneeded-ternary */
10
10
  var helpers = require('../utils/helpers');
@@ -13,8 +13,7 @@ var EventDispatcher = /*#__PURE__*/function () {
13
13
  function EventDispatcher(options) {
14
14
  var _this = this;
15
15
 
16
- _classCallCheck(this, EventDispatcher);
17
-
16
+ (0, _classCallCheck2["default"])(this, EventDispatcher);
18
17
  this.events = [];
19
18
  this.enabled = options && options.enabled === false ? false : true; // Defaults to 'true'
20
19
 
@@ -50,7 +49,7 @@ var EventDispatcher = /*#__PURE__*/function () {
50
49
  } // Push event data to queue
51
50
 
52
51
 
53
- _createClass(EventDispatcher, [{
52
+ (0, _createClass2["default"])(EventDispatcher, [{
54
53
  key: "queue",
55
54
  value: function queue(name, data) {
56
55
  this.events.push({
@@ -75,7 +74,6 @@ var EventDispatcher = /*#__PURE__*/function () {
75
74
  }
76
75
  }
77
76
  }]);
78
-
79
77
  return EventDispatcher;
80
78
  }();
81
79
 
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
 
3
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
4
6
 
5
7
  /* eslint-disable no-param-reassign */
6
8
  var qs = require('qs');
@@ -12,8 +14,13 @@ var store = require('./store');
12
14
  var purchaseEventStorageKey = '_constructorio_purchase_order_ids';
13
15
  var utils = {
14
16
  ourEncodeURIComponent: function ourEncodeURIComponent(str) {
15
- if (str) {
16
- var parsedStrObj = qs.parse("s=".concat(encodeURIComponent(str)));
17
+ if (str && typeof str === 'string') {
18
+ var cleanedString = str.replace(/\[/g, '%5B') // Replace [
19
+ .replace(/\]/g, '%5D') // Replace ]
20
+ .replace(/&/g, '%26'); // Replace &
21
+
22
+ var trimmedCleanedString = cleanedString.trim();
23
+ var parsedStrObj = qs.parse("s=".concat(trimmedCleanedString));
17
24
  parsedStrObj.s = parsedStrObj.s.replace(/\s/g, ' ');
18
25
  return qs.stringify(parsedStrObj).split('=')[1];
19
26
  }
@@ -99,8 +106,12 @@ var utils = {
99
106
  return null;
100
107
  },
101
108
  hasOrderIdRecord: function hasOrderIdRecord(orderId) {
102
- var purchaseEventStorage = JSON.parse(store.session.get(purchaseEventStorageKey));
103
109
  var orderIdHash = CRC32.str(orderId.toString());
110
+ var purchaseEventStorage = store.session.get(purchaseEventStorageKey);
111
+
112
+ if (typeof purchaseEventStorage === 'string') {
113
+ purchaseEventStorage = JSON.parse(purchaseEventStorage);
114
+ }
104
115
 
105
116
  if (purchaseEventStorage && purchaseEventStorage[orderIdHash]) {
106
117
  return true;
@@ -109,8 +120,12 @@ var utils = {
109
120
  return null;
110
121
  },
111
122
  addOrderIdRecord: function addOrderIdRecord(orderId) {
112
- var purchaseEventStorage = JSON.parse(store.session.get(purchaseEventStorageKey));
113
123
  var orderIdHash = CRC32.str(orderId.toString());
124
+ var purchaseEventStorage = store.session.get(purchaseEventStorageKey);
125
+
126
+ if (typeof purchaseEventStorage === 'string') {
127
+ purchaseEventStorage = JSON.parse(purchaseEventStorage);
128
+ }
114
129
 
115
130
  if (purchaseEventStorage) {
116
131
  // If the order already exists, do nothing
@@ -121,7 +136,7 @@ var utils = {
121
136
  purchaseEventStorage[orderIdHash] = true;
122
137
  } else {
123
138
  // Create a new object map for the order ids
124
- purchaseEventStorage = _defineProperty({}, orderIdHash, true);
139
+ purchaseEventStorage = (0, _defineProperty2["default"])({}, orderIdHash, true);
125
140
  } // Push the order id map into session storage
126
141
 
127
142