@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.
- package/README.md +6 -1
- package/lib/constructorio.js +38 -33
- package/lib/modules/autocomplete.js +5 -7
- package/lib/modules/browse.js +23 -17
- package/lib/modules/recommendations.js +5 -7
- package/lib/modules/search.js +6 -7
- package/lib/modules/tracker.js +154 -121
- package/lib/utils/event-dispatcher.js +5 -7
- package/lib/utils/helpers.js +21 -6
- package/lib/utils/humanity-check.js +16 -9
- package/lib/utils/request-queue.js +98 -92
- package/package.json +20 -15
package/lib/modules/tracker.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
12
12
|
|
|
13
|
-
function
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
180
|
-
*
|
|
181
|
-
*
|
|
182
|
-
*
|
|
183
|
-
*
|
|
184
|
-
*
|
|
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 &&
|
|
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(
|
|
252
|
-
*
|
|
253
|
-
*
|
|
254
|
-
*
|
|
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 &&
|
|
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 {
|
|
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(
|
|
310
|
-
*
|
|
311
|
-
*
|
|
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 &&
|
|
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
|
-
|
|
340
|
-
} else if (customer_ids && Array.isArray(customer_ids)) {
|
|
341
|
-
|
|
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(
|
|
372
|
-
*
|
|
373
|
-
*
|
|
374
|
-
*
|
|
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 &&
|
|
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 {
|
|
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(
|
|
450
|
-
*
|
|
451
|
-
*
|
|
452
|
-
*
|
|
453
|
-
*
|
|
454
|
-
*
|
|
455
|
-
*
|
|
456
|
-
*
|
|
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 &&
|
|
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 {
|
|
544
|
-
* @param {number} parameters.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
|
-
*
|
|
554
|
-
*
|
|
555
|
-
*
|
|
556
|
-
*
|
|
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 &&
|
|
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
|
-
*
|
|
632
|
-
*
|
|
633
|
-
*
|
|
634
|
-
*
|
|
635
|
-
*
|
|
636
|
-
*
|
|
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 &&
|
|
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
|
-
*
|
|
722
|
-
*
|
|
723
|
-
*
|
|
724
|
-
*
|
|
725
|
-
*
|
|
726
|
-
*
|
|
727
|
-
*
|
|
728
|
-
*
|
|
729
|
-
*
|
|
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 &&
|
|
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] -
|
|
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 {
|
|
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
|
-
*
|
|
831
|
-
*
|
|
832
|
-
*
|
|
833
|
-
*
|
|
834
|
-
*
|
|
835
|
-
*
|
|
836
|
-
*
|
|
837
|
-
*
|
|
838
|
-
*
|
|
839
|
-
*
|
|
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 &&
|
|
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 {
|
|
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
|
-
*
|
|
946
|
-
*
|
|
947
|
-
*
|
|
948
|
-
*
|
|
949
|
-
*
|
|
950
|
-
*
|
|
951
|
-
*
|
|
952
|
-
*
|
|
953
|
-
*
|
|
954
|
-
*
|
|
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 &&
|
|
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
|
-
*
|
|
1054
|
-
*
|
|
1055
|
-
*
|
|
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 (
|
|
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
|
-
*
|
|
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
|
-
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
6
6
|
|
|
7
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
package/lib/utils/helpers.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
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
|
|
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 =
|
|
139
|
+
purchaseEventStorage = (0, _defineProperty2["default"])({}, orderIdHash, true);
|
|
125
140
|
} // Push the order id map into session storage
|
|
126
141
|
|
|
127
142
|
|