@constructor-io/constructorio-node 4.17.1 → 4.18.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@constructor-io/constructorio-node",
3
- "version": "4.17.1",
3
+ "version": "4.18.0",
4
4
  "description": "Constructor.io Node.js client",
5
5
  "main": "src/constructorio.js",
6
6
  "types": "src/types/constructorio.d.ts",
@@ -570,9 +570,16 @@ class Tracker {
570
570
  * @function trackSearchResultsLoaded
571
571
  * @param {string} term - Search results query term
572
572
  * @param {object} parameters - Additional parameters to be sent with request
573
- * @param {number} parameters.numResults - Total number of results
574
- * @param {string[]} parameters.itemIds - List of product item unique identifiers in search results listing
575
- * @param {string} [parameters.section] - Index section
573
+ * @param {object[]} parameters.items - List of product item unique identifiers in search results listing
574
+ * @param {string} [parameters.url] - URL of the search results page
575
+ * @param {number} [parameters.resultCount] - Total number of results
576
+ * @param {number} [parameters.resultPage] - Current page of search results
577
+ * @param {string} [parameters.resultId] - Browse result identifier (returned in response from Constructor)
578
+ * @param {object} [parameters.selectedFilters] - Selected filters
579
+ * @param {string} [parameters.sortOrder] - Sort order ('ascending' or 'descending')
580
+ * @param {string} [parameters.sortBy] - Sorting method
581
+ * @param {string} [parameters.section] - The section name for the item Ex. "Products"
582
+ * @param {object} [parameters.analyticsTags] - Pass additional analytics data
576
583
  * @param {object} userParameters - Parameters relevant to the user request
577
584
  * @param {number} userParameters.sessionId - Session ID, utilized to personalize results
578
585
  * @param {string} userParameters.clientId - Client ID, utilized to personalize results
@@ -593,8 +600,8 @@ class Tracker {
593
600
  * constructorio.tracker.trackSearchResultsLoaded(
594
601
  * 'T-Shirt',
595
602
  * {
596
- * numResults: 167,
597
- * itemIds: ['KMH876', 'KMH140', 'KMH437'],
603
+ * resultCount: 167,
604
+ * items: [{ itemId: 'KMH876' }, { itemId: 'KMH140' }],
598
605
  * },
599
606
  * {
600
607
  * sessionId: 1,
@@ -610,45 +617,73 @@ class Tracker {
610
617
  if (term && typeof term === 'string') {
611
618
  // Ensure parameters are provided (required)
612
619
  if (parameters && typeof parameters === 'object' && !Array.isArray(parameters)) {
613
- const url = `${this.options.serviceUrl}/behavior?`;
614
- const queryParams = { action: 'search-results', term };
620
+ const baseUrl = `${this.options.serviceUrl}/v2/behavioral_action/search_result_load?`;
615
621
  const {
616
622
  num_results,
617
623
  numResults = num_results,
618
- customer_ids,
619
- customerIds = customer_ids,
620
- item_ids,
621
- itemIds = item_ids,
624
+ result_count,
625
+ customerIds,
626
+ customer_ids = customerIds,
627
+ itemIds,
628
+ item_ids = itemIds,
629
+ items = customer_ids || item_ids,
630
+ result_page,
631
+ resultPage = result_page,
632
+ result_id,
633
+ resultId = result_id,
634
+ sort_order,
635
+ sortOrder = sort_order,
636
+ sort_by,
637
+ sortBy = sort_by,
638
+ selected_filters,
639
+ selectedFilters = selected_filters,
640
+ url = 'N/A',
622
641
  section,
642
+ analyticsTags,
643
+ resultCount = numResults || result_count || items?.length || 0,
623
644
  } = parameters;
624
- let customerIDs;
625
-
626
- if (!helpers.isNil(numResults)) {
627
- queryParams.num_results = numResults;
628
- }
645
+ const queryParams = {};
646
+ let transformedItems;
629
647
 
630
- // Ensure support for both item_ids and customer_ids as parameters
631
- if (itemIds && Array.isArray(itemIds)) {
632
- customerIDs = itemIds;
633
- } else if (customerIds && Array.isArray(customerIds)) {
634
- customerIDs = customerIds;
635
- }
648
+ if (items && Array.isArray(items) && items.length !== 0) {
649
+ const trimmedItems = items.slice(0, 100);
636
650
 
637
- if (customerIDs && Array.isArray(customerIDs) && customerIDs.length) {
638
- queryParams.customer_ids = customerIDs.slice(0, 100).join(',');
651
+ if (typeof items[0] === 'string' || typeof items[0] === 'number') {
652
+ transformedItems = trimmedItems.map((itemId) => ({ item_id: String(itemId) }));
653
+ } else {
654
+ transformedItems = trimmedItems.map((item) => helpers.toSnakeCaseKeys(item, false));
655
+ }
639
656
  }
640
657
 
641
658
  if (section) {
642
659
  queryParams.section = section;
643
660
  }
644
661
 
645
- const requestUrl = `${url}${applyParamsAsString(queryParams, userParameters, this.options)}`;
662
+ const bodyParams = {
663
+ search_term: term,
664
+ result_count: resultCount,
665
+ items: transformedItems,
666
+ result_page: resultPage,
667
+ result_id: resultId,
668
+ sort_order: sortOrder,
669
+ sort_by: sortBy,
670
+ selected_filters: selectedFilters,
671
+ analytics_tags: analyticsTags,
672
+ url,
673
+ section,
674
+ };
675
+
676
+ const requestUrl = `${baseUrl}${applyParamsAsString({}, userParameters, this.options)}`;
677
+ const requestMethod = 'POST';
678
+ const requestBody = applyParams(bodyParams, userParameters, { ...this.options, requestMethod });
646
679
 
647
680
  send.call(
648
681
  this,
649
682
  requestUrl,
650
683
  userParameters,
651
684
  networkParameters,
685
+ requestMethod,
686
+ requestBody,
652
687
  );
653
688
 
654
689
  return true;
@@ -74,9 +74,16 @@ declare class Tracker {
74
74
  trackSearchResultsLoaded(
75
75
  term: string,
76
76
  parameters: {
77
- numResults: number;
78
- itemIds: string[];
77
+ url: string;
78
+ items: ItemTracked[];
79
+ resultCount?: number;
80
+ resultPage?: number;
81
+ resultId?: string;
82
+ selectedFilters?: Record<string, any>;
83
+ sortOrder?: string;
84
+ sortBy?: string;
79
85
  section?: string;
86
+ analyticsTags?: Record<string, string>;
80
87
  },
81
88
  userParameters?: TrackerUserParameters,
82
89
  networkParameters?: NetworkParameters
@@ -97,7 +104,7 @@ declare class Tracker {
97
104
  ): true | Error;
98
105
 
99
106
  trackConversion(
100
- term : string | null | undefined,
107
+ term: string | null | undefined,
101
108
  parameters: {
102
109
  itemId: string;
103
110
  revenue?: number;