@constructor-io/constructorio-node 3.8.1 → 3.8.5
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 +4 -6
- package/src/modules/autocomplete.js +10 -2
- package/src/modules/browse.js +115 -11
- package/src/modules/catalog.js +3 -3
- package/src/modules/recommendations.js +5 -1
- package/src/modules/search.js +21 -2
- package/src/modules/tracker.js +59 -24
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@constructor-io/constructorio-node",
|
|
3
|
-
"version": "3.8.
|
|
3
|
+
"version": "3.8.5",
|
|
4
4
|
"description": "Constructor.io Node.js client",
|
|
5
5
|
"main": "src/constructorio.js",
|
|
6
6
|
"scripts": {
|
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
"precoverage": "rm -rf ./coverage && rm -rf ./.nyc_output",
|
|
12
12
|
"coverage": "nyc --all --reporter=html npm run test",
|
|
13
13
|
"postcoverage": "serve --listen 8080 --config ./serve.json && rm -rf test",
|
|
14
|
-
"docs": "jsdoc --configure ./.jsdoc.json ./README.md --recurse ./src --destination ./docs"
|
|
14
|
+
"docs": "jsdoc --configure ./.jsdoc.json ./README.md --recurse ./src --destination ./docs",
|
|
15
|
+
"prepare": "husky install"
|
|
15
16
|
},
|
|
16
17
|
"repository": {
|
|
17
18
|
"type": "git",
|
|
@@ -26,9 +27,6 @@
|
|
|
26
27
|
"engines": {
|
|
27
28
|
"node": ">=8.3.0"
|
|
28
29
|
},
|
|
29
|
-
"pre-push": [
|
|
30
|
-
"lint"
|
|
31
|
-
],
|
|
32
30
|
"files": [
|
|
33
31
|
"src/**/*"
|
|
34
32
|
],
|
|
@@ -39,6 +37,7 @@
|
|
|
39
37
|
"eslint": "^8.2.0",
|
|
40
38
|
"eslint-config-airbnb-base": "^15.0.0",
|
|
41
39
|
"eslint-plugin-import": "^2.24.2",
|
|
40
|
+
"husky": "^7.0.4",
|
|
42
41
|
"jsdoc": "^3.6.7",
|
|
43
42
|
"jsdom": "^15.1.1",
|
|
44
43
|
"license-checker": "^25.0.1",
|
|
@@ -47,7 +46,6 @@
|
|
|
47
46
|
"mocha": "^9.1.3",
|
|
48
47
|
"mocha-jsdom": "^2.0.0",
|
|
49
48
|
"nyc": "^15.1.0",
|
|
50
|
-
"pre-push": "^0.1.1",
|
|
51
49
|
"serve": "^13.0.2",
|
|
52
50
|
"sinon": "^7.5.0",
|
|
53
51
|
"sinon-chai": "^3.7.0",
|
|
@@ -68,7 +68,11 @@ function createAutocompleteUrl(query, parameters, userParameters, options) {
|
|
|
68
68
|
|
|
69
69
|
// Pull hidden fields from parameters
|
|
70
70
|
if (hiddenFields) {
|
|
71
|
-
queryParams.
|
|
71
|
+
if (queryParams.fmt_options) {
|
|
72
|
+
queryParams.fmt_options.hidden_fields = hiddenFields;
|
|
73
|
+
} else {
|
|
74
|
+
queryParams.fmt_options = { hidden_fields: hiddenFields };
|
|
75
|
+
}
|
|
72
76
|
}
|
|
73
77
|
}
|
|
74
78
|
|
|
@@ -107,7 +111,7 @@ class Autocomplete {
|
|
|
107
111
|
* @param {number} [userParameters.clientId] - Client ID, utilized to personalize results
|
|
108
112
|
* @param {string} [userParameters.userId] - User ID, utilized to personalize results
|
|
109
113
|
* @param {string} [userParameters.segments] - User segments
|
|
110
|
-
* @param {
|
|
114
|
+
* @param {object} [userParameters.testCells] - User test cells
|
|
111
115
|
* @param {string} [userParameters.userIp] - Origin user IP, from client
|
|
112
116
|
* @param {string} [userParameters.userAgent] - Origin user agent, from client
|
|
113
117
|
* @param {object} [networkParameters] - Parameters relevant to the network request
|
|
@@ -123,6 +127,10 @@ class Autocomplete {
|
|
|
123
127
|
* filters: {
|
|
124
128
|
* size: 'medium'
|
|
125
129
|
* },
|
|
130
|
+
* }, {
|
|
131
|
+
* testCells: {
|
|
132
|
+
* testName: 'cellName',
|
|
133
|
+
* },
|
|
126
134
|
* });
|
|
127
135
|
*/
|
|
128
136
|
getAutocompleteResults(query, parameters = {}, userParameters = {}, networkParameters = {}) {
|
package/src/modules/browse.js
CHANGED
|
@@ -33,6 +33,7 @@ function createQueryParams(parameters, userParameters, options) {
|
|
|
33
33
|
section,
|
|
34
34
|
fmtOptions,
|
|
35
35
|
hiddenFields,
|
|
36
|
+
hiddenFacets,
|
|
36
37
|
} = parameters;
|
|
37
38
|
|
|
38
39
|
// Pull page from parameters
|
|
@@ -71,7 +72,20 @@ function createQueryParams(parameters, userParameters, options) {
|
|
|
71
72
|
|
|
72
73
|
// Pull hidden fields from parameters
|
|
73
74
|
if (hiddenFields) {
|
|
74
|
-
queryParams.
|
|
75
|
+
if (queryParams.fmt_options) {
|
|
76
|
+
queryParams.fmt_options.hidden_fields = hiddenFields;
|
|
77
|
+
} else {
|
|
78
|
+
queryParams.fmt_options = { hidden_fields: hiddenFields };
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Pull hidden facets from parameters
|
|
83
|
+
if (hiddenFacets) {
|
|
84
|
+
if (queryParams.fmt_options) {
|
|
85
|
+
queryParams.fmt_options.hidden_facets = hiddenFacets;
|
|
86
|
+
} else {
|
|
87
|
+
queryParams.fmt_options = { hidden_facets: hiddenFacets };
|
|
88
|
+
}
|
|
75
89
|
}
|
|
76
90
|
}
|
|
77
91
|
|
|
@@ -118,11 +132,11 @@ function createBrowseUrlFromFilter(filterName, filterValue, parameters, userPara
|
|
|
118
132
|
return `${serviceUrl}/browse/${encodeURIComponent(filterName)}/${encodeURIComponent(filterValue)}?${queryString}`;
|
|
119
133
|
}
|
|
120
134
|
|
|
121
|
-
// Create URL from supplied
|
|
135
|
+
// Create URL from supplied IDs and parameters
|
|
122
136
|
function createBrowseUrlFromIDs(itemIds, parameters, userParameters, options) {
|
|
123
137
|
const { serviceUrl } = options;
|
|
124
138
|
|
|
125
|
-
// Validate item
|
|
139
|
+
// Validate item IDs are provided
|
|
126
140
|
if (!itemIds || !(itemIds instanceof Array) || !itemIds.length) {
|
|
127
141
|
throw new Error('itemIds is a required parameter of type array');
|
|
128
142
|
}
|
|
@@ -133,7 +147,7 @@ function createBrowseUrlFromIDs(itemIds, parameters, userParameters, options) {
|
|
|
133
147
|
return `${serviceUrl}/browse/items?${queryString}`;
|
|
134
148
|
}
|
|
135
149
|
|
|
136
|
-
// Create URL from supplied
|
|
150
|
+
// Create URL from supplied parameters
|
|
137
151
|
function createBrowseUrlForFacets(parameters, userParameters, options) {
|
|
138
152
|
const { serviceUrl } = options;
|
|
139
153
|
const queryParams = { ...createQueryParams(parameters, userParameters, options) };
|
|
@@ -141,9 +155,28 @@ function createBrowseUrlForFacets(parameters, userParameters, options) {
|
|
|
141
155
|
delete queryParams._dt;
|
|
142
156
|
|
|
143
157
|
const queryString = qs.stringify(queryParams, { indices: false });
|
|
158
|
+
|
|
144
159
|
return `${serviceUrl}/browse/facets?${queryString}`;
|
|
145
160
|
}
|
|
146
161
|
|
|
162
|
+
// Create URL from supplied facet name and parameters
|
|
163
|
+
function createBrowseUrlForFacetOptions(facetName, parameters, userParameters, options) {
|
|
164
|
+
const { serviceUrl } = options;
|
|
165
|
+
|
|
166
|
+
// Validate facet name is provided
|
|
167
|
+
if (!facetName || typeof facetName !== 'string') {
|
|
168
|
+
throw new Error('facetName is a required parameter of type string');
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
const queryParams = { ...createQueryParams(parameters, userParameters, options) };
|
|
172
|
+
|
|
173
|
+
delete queryParams._dt;
|
|
174
|
+
|
|
175
|
+
const queryString = qs.stringify(queryParams, { indices: false });
|
|
176
|
+
|
|
177
|
+
return `${serviceUrl}/browse/facet_options?facet_name=${facetName}&${queryString}`;
|
|
178
|
+
}
|
|
179
|
+
|
|
147
180
|
// Create request headers using supplied options and user parameters
|
|
148
181
|
function createHeaders(options, userParameters) {
|
|
149
182
|
const headers = {};
|
|
@@ -192,12 +225,13 @@ class Browse {
|
|
|
192
225
|
* @param {string} [parameters.sortOrder='descending'] - The sort order for results
|
|
193
226
|
* @param {object} [parameters.fmtOptions] - The format options used to refine result groups
|
|
194
227
|
* @param {string[]} [parameters.hiddenFields] - Hidden metadata fields to return
|
|
228
|
+
* @param {string[]} [parameters.hiddenFacets] - Hidden facet fields to return
|
|
195
229
|
* @param {object} [userParameters] - Parameters relevant to the user request
|
|
196
230
|
* @param {number} [userParameters.sessionId] - Session ID, utilized to personalize results
|
|
197
231
|
* @param {number} [userParameters.clientId] - Client ID, utilized to personalize results
|
|
198
232
|
* @param {string} [userParameters.userId] - User ID, utilized to personalize results
|
|
199
233
|
* @param {string} [userParameters.segments] - User segments
|
|
200
|
-
* @param {
|
|
234
|
+
* @param {object} [userParameters.testCells] - User test cells
|
|
201
235
|
* @param {string} [userParameters.userIp] - Origin user IP, from client
|
|
202
236
|
* @param {string} [userParameters.userAgent] - Origin user agent, from client
|
|
203
237
|
* @param {object} [networkParameters] - Parameters relevant to the network request
|
|
@@ -210,6 +244,10 @@ class Browse {
|
|
|
210
244
|
* filters: {
|
|
211
245
|
* size: 'medium'
|
|
212
246
|
* },
|
|
247
|
+
* }, {
|
|
248
|
+
* testCells: {
|
|
249
|
+
* testName: 'cellName',
|
|
250
|
+
* },
|
|
213
251
|
* });
|
|
214
252
|
*/
|
|
215
253
|
getBrowseResults(filterName, filterValue, parameters = {}, userParameters = {}, networkParameters = {}) {
|
|
@@ -257,10 +295,10 @@ class Browse {
|
|
|
257
295
|
}
|
|
258
296
|
|
|
259
297
|
/**
|
|
260
|
-
* Retrieve browse results from API using item
|
|
298
|
+
* Retrieve browse results from API using item IDs
|
|
261
299
|
*
|
|
262
300
|
* @function getBrowseResultsForItemIds
|
|
263
|
-
* @param {string[]} itemIds - Item
|
|
301
|
+
* @param {string[]} itemIds - Item IDs of results to fetch
|
|
264
302
|
* @param {object} [parameters] - Additional parameters to refine result set
|
|
265
303
|
* @param {number} [parameters.page] - The page number of the results
|
|
266
304
|
* @param {number} [parameters.resultsPerPage] - The number of results per page to return
|
|
@@ -269,12 +307,13 @@ class Browse {
|
|
|
269
307
|
* @param {string} [parameters.sortOrder='descending'] - The sort order for results
|
|
270
308
|
* @param {object} [parameters.fmtOptions] - The format options used to refine result groups
|
|
271
309
|
* @param {string[]} [parameters.hiddenFields] - Hidden metadata fields to return
|
|
310
|
+
* @param {string[]} [parameters.hiddenFacets] - Hidden facet fields to return
|
|
272
311
|
* @param {object} [userParameters] - Parameters relevant to the user request
|
|
273
312
|
* @param {number} [userParameters.sessionId] - Session ID, utilized to personalize results
|
|
274
313
|
* @param {number} [userParameters.clientId] - Client ID, utilized to personalize results
|
|
275
314
|
* @param {string} [userParameters.userId] - User ID, utilized to personalize results
|
|
276
315
|
* @param {string} [userParameters.segments] - User segments
|
|
277
|
-
* @param {
|
|
316
|
+
* @param {object} [userParameters.testCells] - User test cells
|
|
278
317
|
* @param {string} [userParameters.userIp] - Origin user IP, from client
|
|
279
318
|
* @param {string} [userParameters.userAgent] - Origin user agent, from client
|
|
280
319
|
* @param {object} [networkParameters] - Parameters relevant to the network request
|
|
@@ -286,8 +325,12 @@ class Browse {
|
|
|
286
325
|
* filters: {
|
|
287
326
|
* size: 'medium'
|
|
288
327
|
* },
|
|
328
|
+
* }, {
|
|
329
|
+
* testCells: {
|
|
330
|
+
* 'testName': 'cellName',
|
|
331
|
+
* },
|
|
289
332
|
* });
|
|
290
|
-
|
|
333
|
+
*/
|
|
291
334
|
getBrowseResultsForItemIds(itemIds, parameters = {}, userParameters = {}, networkParameters = {}) {
|
|
292
335
|
let requestUrl;
|
|
293
336
|
const fetch = (this.options && this.options.fetch) || nodeFetch;
|
|
@@ -338,7 +381,7 @@ class Browse {
|
|
|
338
381
|
* @param {number} [userParameters.clientId] - Client ID, utilized to personalize results
|
|
339
382
|
* @param {string} [userParameters.userId] - User ID, utilized to personalize results
|
|
340
383
|
* @param {string} [userParameters.segments] - User segments
|
|
341
|
-
* @param {
|
|
384
|
+
* @param {object} [userParameters.testCells] - User test cells
|
|
342
385
|
* @param {string} [userParameters.userIp] - Origin user IP, from client
|
|
343
386
|
* @param {string} [userParameters.userAgent] - Origin user agent, from client
|
|
344
387
|
* @param {object} [networkParameters] - Parameters relevant to the network request
|
|
@@ -353,6 +396,10 @@ class Browse {
|
|
|
353
396
|
* fmtOptions: {
|
|
354
397
|
* groups_max_depth: 2
|
|
355
398
|
* }
|
|
399
|
+
* }, {
|
|
400
|
+
* testCells: {
|
|
401
|
+
* 'testName': 'cellName',
|
|
402
|
+
* },
|
|
356
403
|
* });
|
|
357
404
|
*/
|
|
358
405
|
getBrowseGroups(parameters = {}, userParameters = {}, networkParameters = {}) {
|
|
@@ -395,7 +442,7 @@ class Browse {
|
|
|
395
442
|
* @param {number} [userParameters.clientId] - Client ID, utilized to personalize results
|
|
396
443
|
* @param {string} [userParameters.userId] - User ID, utilized to personalize results
|
|
397
444
|
* @param {string} [userParameters.segments] - User segments
|
|
398
|
-
* @param {
|
|
445
|
+
* @param {object} [userParameters.testCells] - User test cells
|
|
399
446
|
* @param {string} [userParameters.userIp] - Origin user IP, from client
|
|
400
447
|
* @param {string} [userParameters.userAgent] - Origin user agent, from client
|
|
401
448
|
* @param {object} [networkParameters] - Parameters relevant to the network request
|
|
@@ -406,6 +453,10 @@ class Browse {
|
|
|
406
453
|
* constructorio.browse.getBrowseFacets({
|
|
407
454
|
* page: 1,
|
|
408
455
|
* resultsPerPage: 10,
|
|
456
|
+
* }, {
|
|
457
|
+
* testCells: {
|
|
458
|
+
* 'testName': 'cellName',
|
|
459
|
+
* },
|
|
409
460
|
* });
|
|
410
461
|
*/
|
|
411
462
|
getBrowseFacets(parameters = {}, userParameters = {}, networkParameters = {}) {
|
|
@@ -434,6 +485,59 @@ class Browse {
|
|
|
434
485
|
return helpers.throwHttpErrorFromResponse(new Error(), response);
|
|
435
486
|
});
|
|
436
487
|
}
|
|
488
|
+
|
|
489
|
+
/**
|
|
490
|
+
* Retrieve facet options from API
|
|
491
|
+
*
|
|
492
|
+
* @function getBrowseFacetOptions
|
|
493
|
+
* @param {string} facetName - Name of the facet whose options to return
|
|
494
|
+
* @param {object} [parameters] - Additional parameters to refine result set
|
|
495
|
+
* @param {object} [parameters.fmtOptions] - The format options used to refine result groups
|
|
496
|
+
* @param {boolean} [parameters.fmtOptions.show_hidden_facets] - Include facets configured as hidden
|
|
497
|
+
* @param {boolean} [parameters.fmtOptions.show_protected_facets] - Include facets configured as protected
|
|
498
|
+
* @param {object} [userParameters] - Parameters relevant to the user request
|
|
499
|
+
* @param {number} [userParameters.sessionId] - Session ID, utilized to personalize results
|
|
500
|
+
* @param {number} [userParameters.clientId] - Client ID, utilized to personalize results
|
|
501
|
+
* @param {string} [userParameters.userId] - User ID, utilized to personalize results
|
|
502
|
+
* @param {string} [userParameters.segments] - User segments
|
|
503
|
+
* @param {string} [userParameters.testCells] - User test cells
|
|
504
|
+
* @param {string} [userParameters.userIp] - Origin user IP, from client
|
|
505
|
+
* @param {string} [userParameters.userAgent] - Origin user agent, from client
|
|
506
|
+
* @param {object} [networkParameters] - Parameters relevant to the network request
|
|
507
|
+
* @param {number} [networkParameters.timeout] - Request timeout (in milliseconds)
|
|
508
|
+
* @returns {Promise}
|
|
509
|
+
* @see https://docs.constructor.io/rest_api/browse/facet_options
|
|
510
|
+
* @example
|
|
511
|
+
* constructorio.browse.getBrowseFacetOptions('price', {
|
|
512
|
+
* fmtOptions: { ... },
|
|
513
|
+
* });
|
|
514
|
+
*/
|
|
515
|
+
getBrowseFacetOptions(facetName, parameters = {}, userParameters = {}, networkParameters = {}) {
|
|
516
|
+
let requestUrl;
|
|
517
|
+
const fetch = (this.options && this.options.fetch) || nodeFetch;
|
|
518
|
+
const controller = new AbortController();
|
|
519
|
+
const { signal } = controller;
|
|
520
|
+
|
|
521
|
+
try {
|
|
522
|
+
requestUrl = createBrowseUrlForFacetOptions(facetName, parameters, userParameters, this.options);
|
|
523
|
+
} catch (e) {
|
|
524
|
+
return Promise.reject(e);
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
// Handle network timeout if specified
|
|
528
|
+
helpers.applyNetworkTimeout(this.options, networkParameters, controller);
|
|
529
|
+
|
|
530
|
+
return fetch(requestUrl, {
|
|
531
|
+
headers: helpers.createAuthHeader(this.options),
|
|
532
|
+
signal,
|
|
533
|
+
}).then((response) => {
|
|
534
|
+
if (response.ok) {
|
|
535
|
+
return response.json();
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
return helpers.throwHttpErrorFromResponse(new Error(), response);
|
|
539
|
+
});
|
|
540
|
+
}
|
|
437
541
|
}
|
|
438
542
|
|
|
439
543
|
module.exports = Browse;
|
package/src/modules/catalog.js
CHANGED
|
@@ -141,7 +141,7 @@ class Catalog {
|
|
|
141
141
|
* @param {string} [parameters.url] - A URL to directly send the user after selecting the item
|
|
142
142
|
* @param {string} [parameters.image_url] - A URL that points to an image you'd like displayed next to some item (only applicable when URL is supplied)
|
|
143
143
|
* @param {string} [parameters.description] - A description for some item (only applicable when URL is supplied)
|
|
144
|
-
* @param {string} [parameters.id] - An arbitrary ID you would like associated with this item. You can use this field to store your own
|
|
144
|
+
* @param {string} [parameters.id] - An arbitrary ID you would like associated with this item. You can use this field to store your own IDs of the items to more easily access them in other API calls
|
|
145
145
|
* @param {object} [parameters.facets] - Key/value pairs that can be associated with an item and used to filter them during a search. You can associate multiple values with the same key, by making values a list. Facets can be used as filters in search, autosuggest, and browse requests
|
|
146
146
|
* @param {object} [parameters.metadata] - You can associate schema-less data with items by passing in an object of keys and values. To configure search and display of this data reach out to support@constructor.io
|
|
147
147
|
* @param {string[]} [parameters.group_ids] - You can associate each item with one or more groups (i.e. categories). To set up a group hierarchy please contact support@constructor.io. group_ids can be used as filters in search, autosuggest, and browse requests
|
|
@@ -195,7 +195,7 @@ class Catalog {
|
|
|
195
195
|
* @param {string} [parameters.url] - A URL to directly send the user after selecting the item
|
|
196
196
|
* @param {string} [parameters.image_url] - A URL that points to an image you'd like displayed next to some item (only applicable when URL is supplied)
|
|
197
197
|
* @param {string} [parameters.description] - A description for some item (only applicable when URL is supplied)
|
|
198
|
-
* @param {string} [parameters.id] - An arbitrary ID you would like associated with this item. You can use this field to store your own
|
|
198
|
+
* @param {string} [parameters.id] - An arbitrary ID you would like associated with this item. You can use this field to store your own IDs of the items to more easily access them in other API calls
|
|
199
199
|
* @param {object} [parameters.facets] - Key/value pairs that can be associated with an item and used to filter them during a search. You can associate multiple values with the same key, by making values a list. Facets can be used as filters in search, autosuggest, and browse requests
|
|
200
200
|
* @param {object} [parameters.metadata] - You can associate schema-less data with items by passing in an object of keys and values. To configure search and display of this data reach out to support@constructor.io
|
|
201
201
|
* @param {string[]} [parameters.group_ids] - You can associate each item with one or more groups (i.e. categories). To set up a group hierarchy please contact support@constructor.io. group_ids can be used as filters in search, autosuggest, and browse requests
|
|
@@ -295,7 +295,7 @@ class Catalog {
|
|
|
295
295
|
* @param {string} [parameters.url] - A URL to directly send the user after selecting the item
|
|
296
296
|
* @param {string} [parameters.image_url] - A URL that points to an image you'd like displayed next to some item (only applicable when URL is supplied)
|
|
297
297
|
* @param {string} [parameters.description] - A description for some item (only applicable when URL is supplied)
|
|
298
|
-
* @param {string} [parameters.id] - An arbitrary ID you would like associated with this item. You can use this field to store your own
|
|
298
|
+
* @param {string} [parameters.id] - An arbitrary ID you would like associated with this item. You can use this field to store your own IDs of the items to more easily access them in other API calls
|
|
299
299
|
* @param {object} [parameters.facets] - Key/value pairs that can be associated with an item and used to filter them during a search. You can associate multiple values with the same key, by making values a list. Facets can be used as filters in search, autosuggest, and browse requests
|
|
300
300
|
* @param {object} [parameters.metadata] - You can associate schema-less data with items by passing in an object of keys and values. To configure search and display of this data reach out to support@constructor.io
|
|
301
301
|
* @param {string[]} [parameters.group_ids] - You can associate each item with one or more groups (i.e. categories). To set up a group hierarchy please contact support@constructor.io. group_ids can be used as filters in search, autosuggest, and browse requests
|
|
@@ -102,7 +102,7 @@ class Recommendations {
|
|
|
102
102
|
* @param {number} [userParameters.clientId] - Client ID, utilized to personalize results
|
|
103
103
|
* @param {string} [userParameters.userId] - User ID, utilized to personalize results
|
|
104
104
|
* @param {string} [userParameters.segments] - User segments
|
|
105
|
-
* @param {
|
|
105
|
+
* @param {object} [userParameters.testCells] - User test cells
|
|
106
106
|
* @param {string} [userParameters.userIp] - Origin user IP, from client
|
|
107
107
|
* @param {string} [userParameters.userAgent] - Origin user agent, from client
|
|
108
108
|
* @param {object} [networkParameters] - Parameters relevant to the network request
|
|
@@ -115,6 +115,10 @@ class Recommendations {
|
|
|
115
115
|
* filters: {
|
|
116
116
|
* size: 'medium'
|
|
117
117
|
* },
|
|
118
|
+
* }, {
|
|
119
|
+
* testCells: {
|
|
120
|
+
* testName: 'cellName',
|
|
121
|
+
* },
|
|
118
122
|
* });
|
|
119
123
|
*/
|
|
120
124
|
getRecommendations(podId, parameters = {}, userParameters = {}, networkParameters = {}) {
|
package/src/modules/search.js
CHANGED
|
@@ -56,6 +56,7 @@ function createSearchUrl(query, parameters, userParameters, options) {
|
|
|
56
56
|
section,
|
|
57
57
|
fmtOptions,
|
|
58
58
|
hiddenFields,
|
|
59
|
+
hiddenFacets,
|
|
59
60
|
} = parameters;
|
|
60
61
|
|
|
61
62
|
// Pull page from parameters
|
|
@@ -95,7 +96,20 @@ function createSearchUrl(query, parameters, userParameters, options) {
|
|
|
95
96
|
|
|
96
97
|
// Pull hidden fields from parameters
|
|
97
98
|
if (hiddenFields) {
|
|
98
|
-
queryParams.
|
|
99
|
+
if (queryParams.fmt_options) {
|
|
100
|
+
queryParams.fmt_options.hidden_fields = hiddenFields;
|
|
101
|
+
} else {
|
|
102
|
+
queryParams.fmt_options = { hidden_fields: hiddenFields };
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Pull hidden facets from parameters
|
|
107
|
+
if (hiddenFacets) {
|
|
108
|
+
if (queryParams.fmt_options) {
|
|
109
|
+
queryParams.fmt_options.hidden_facets = hiddenFacets;
|
|
110
|
+
} else {
|
|
111
|
+
queryParams.fmt_options = { hidden_facets: hiddenFacets };
|
|
112
|
+
}
|
|
99
113
|
}
|
|
100
114
|
}
|
|
101
115
|
|
|
@@ -133,12 +147,13 @@ class Search {
|
|
|
133
147
|
* @param {string} [parameters.section='Products'] - The section name for results
|
|
134
148
|
* @param {object} [parameters.fmtOptions] - The format options used to refine result groups
|
|
135
149
|
* @param {string[]} [parameters.hiddenFields] - Hidden metadata fields to return
|
|
150
|
+
* @param {string[]} [parameters.hiddenFacets] - Hidden facet fields to return
|
|
136
151
|
* @param {object} [userParameters] - Parameters relevant to the user request
|
|
137
152
|
* @param {number} [userParameters.sessionId] - Session ID, utilized to personalize results
|
|
138
153
|
* @param {number} [userParameters.clientId] - Client ID, utilized to personalize results
|
|
139
154
|
* @param {string} [userParameters.userId] - User ID, utilized to personalize results
|
|
140
155
|
* @param {string} [userParameters.segments] - User segments
|
|
141
|
-
* @param {
|
|
156
|
+
* @param {object} [userParameters.testCells] - User test cells
|
|
142
157
|
* @param {string} [userParameters.userIp] - Origin user IP, from client
|
|
143
158
|
* @param {string} [userParameters.userAgent] - Origin user agent, from client
|
|
144
159
|
* @param {object} [networkParameters] - Parameters relevant to the network request
|
|
@@ -151,6 +166,10 @@ class Search {
|
|
|
151
166
|
* filters: {
|
|
152
167
|
* size: 'medium'
|
|
153
168
|
* },
|
|
169
|
+
* }, {
|
|
170
|
+
* testCells: {
|
|
171
|
+
* testName: 'cellName',
|
|
172
|
+
* },
|
|
154
173
|
* });
|
|
155
174
|
*/
|
|
156
175
|
|
package/src/modules/tracker.js
CHANGED
|
@@ -192,7 +192,7 @@ class Tracker {
|
|
|
192
192
|
* @param {number} userParameters.clientId - Client ID, utilized to personalize results
|
|
193
193
|
* @param {string} [userParameters.userId] - User ID, utilized to personalize results
|
|
194
194
|
* @param {string} [userParameters.segments] - User segments
|
|
195
|
-
* @param {
|
|
195
|
+
* @param {object} [userParameters.testCells] - User test cells
|
|
196
196
|
* @param {string} [userParameters.originReferrer] - Client page URL (including path)
|
|
197
197
|
* @param {string} [userParameters.referer] - Client page URL (including path)
|
|
198
198
|
* @param {string} [userParameters.userIp] - Client user IP
|
|
@@ -205,6 +205,7 @@ class Tracker {
|
|
|
205
205
|
* constructorio.tracker.trackSessionStart({
|
|
206
206
|
* sessionId: 1,
|
|
207
207
|
* clientId: '6c73138f-c27b-49f0-872d-63b00ed0e395',
|
|
208
|
+
* testCells: { testName: 'cellName' },
|
|
208
209
|
* });
|
|
209
210
|
*/
|
|
210
211
|
trackSessionStart(userParameters, networkParameters = {}) {
|
|
@@ -231,7 +232,7 @@ class Tracker {
|
|
|
231
232
|
* @param {number} userParameters.clientId - Client ID, utilized to personalize results
|
|
232
233
|
* @param {string} [userParameters.userId] - User ID, utilized to personalize results
|
|
233
234
|
* @param {string} [userParameters.segments] - User segments
|
|
234
|
-
* @param {
|
|
235
|
+
* @param {object} [userParameters.testCells] - User test cells
|
|
235
236
|
* @param {string} [userParameters.originReferrer] - Client page URL (including path)
|
|
236
237
|
* @param {string} [userParameters.referer] - Client page URL (including path)
|
|
237
238
|
* @param {string} [userParameters.userIp] - Client user IP
|
|
@@ -245,6 +246,7 @@ class Tracker {
|
|
|
245
246
|
* constructorio.tracker.trackInputFocus({
|
|
246
247
|
* sessionId: 1,
|
|
247
248
|
* clientId: '7a43138f-c87b-29c0-872d-65b00ed0e392',
|
|
249
|
+
* testCells: { testName: 'cellName' },
|
|
248
250
|
* });
|
|
249
251
|
*/
|
|
250
252
|
trackInputFocus(userParameters, networkParameters = {}) {
|
|
@@ -278,7 +280,7 @@ class Tracker {
|
|
|
278
280
|
* @param {number} userParameters.clientId - Client ID, utilized to personalize results
|
|
279
281
|
* @param {string} [userParameters.userId] - User ID, utilized to personalize results
|
|
280
282
|
* @param {string} [userParameters.segments] - User segments
|
|
281
|
-
* @param {
|
|
283
|
+
* @param {object} [userParameters.testCells] - User test cells
|
|
282
284
|
* @param {string} [userParameters.originReferrer] - Client page URL (including path)
|
|
283
285
|
* @param {string} [userParameters.referer] - Client page URL (including path)
|
|
284
286
|
* @param {string} [userParameters.userIp] - Client user IP
|
|
@@ -291,17 +293,20 @@ class Tracker {
|
|
|
291
293
|
* @example
|
|
292
294
|
* constructorio.tracker.trackAutocompleteSelect(
|
|
293
295
|
* 'T-Shirt',
|
|
294
|
-
*
|
|
295
|
-
*
|
|
296
|
-
*
|
|
297
|
-
*
|
|
298
|
-
*
|
|
299
|
-
*
|
|
300
|
-
*
|
|
301
|
-
*
|
|
302
|
-
*
|
|
303
|
-
*
|
|
304
|
-
*
|
|
296
|
+
* {
|
|
297
|
+
* original_query: 'Shirt',
|
|
298
|
+
* section: 'Products',
|
|
299
|
+
* tr: 'click',
|
|
300
|
+
* group_id: '88JU230',
|
|
301
|
+
* display_name: 'apparel',
|
|
302
|
+
* },
|
|
303
|
+
* {
|
|
304
|
+
* sessionId: 1,
|
|
305
|
+
* clientId: '7a43138f-c87b-29c0-872d-65b00ed0e392',
|
|
306
|
+
* testCells: {
|
|
307
|
+
* testName: 'cellName',
|
|
308
|
+
* },
|
|
309
|
+
* },
|
|
305
310
|
* );
|
|
306
311
|
*/
|
|
307
312
|
trackAutocompleteSelect(term, parameters, userParameters, networkParameters = {}) {
|
|
@@ -371,7 +376,7 @@ class Tracker {
|
|
|
371
376
|
* @param {number} userParameters.clientId - Client ID, utilized to personalize results
|
|
372
377
|
* @param {string} [userParameters.userId] - User ID, utilized to personalize results
|
|
373
378
|
* @param {string} [userParameters.segments] - User segments
|
|
374
|
-
* @param {
|
|
379
|
+
* @param {object} [userParameters.testCells] - User test cells
|
|
375
380
|
* @param {string} [userParameters.originReferrer] - Client page URL (including path)
|
|
376
381
|
* @param {string} [userParameters.referer] - Client page URL (including path)
|
|
377
382
|
* @param {string} [userParameters.userIp] - Client user IP
|
|
@@ -392,6 +397,9 @@ class Tracker {
|
|
|
392
397
|
* {
|
|
393
398
|
* sessionId: 1,
|
|
394
399
|
* clientId: '7a43138f-c87b-29c0-872d-65b00ed0e392',
|
|
400
|
+
* testCells: {
|
|
401
|
+
* testName: 'cellName',
|
|
402
|
+
* },
|
|
395
403
|
* },
|
|
396
404
|
* );
|
|
397
405
|
*/
|
|
@@ -446,7 +454,7 @@ class Tracker {
|
|
|
446
454
|
* @param {number} userParameters.clientId - Client ID, utilized to personalize results
|
|
447
455
|
* @param {string} [userParameters.userId] - User ID, utilized to personalize results
|
|
448
456
|
* @param {string} [userParameters.segments] - User segments
|
|
449
|
-
* @param {
|
|
457
|
+
* @param {object} [userParameters.testCells] - User test cells
|
|
450
458
|
* @param {string} [userParameters.originReferrer] - Client page URL (including path)
|
|
451
459
|
* @param {string} [userParameters.referer] - Client page URL (including path)
|
|
452
460
|
* @param {string} [userParameters.userIp] - Client user IP
|
|
@@ -466,6 +474,9 @@ class Tracker {
|
|
|
466
474
|
* {
|
|
467
475
|
* sessionId: 1,
|
|
468
476
|
* clientId: '7a43138f-c87b-29c0-872d-65b00ed0e392',
|
|
477
|
+
* testCells: {
|
|
478
|
+
* testName: 'cellName',
|
|
479
|
+
* },
|
|
469
480
|
* },
|
|
470
481
|
* );
|
|
471
482
|
*/
|
|
@@ -527,7 +538,7 @@ class Tracker {
|
|
|
527
538
|
* @param {number} userParameters.clientId - Client ID, utilized to personalize results
|
|
528
539
|
* @param {string} [userParameters.userId] - User ID, utilized to personalize results
|
|
529
540
|
* @param {string} [userParameters.segments] - User segments
|
|
530
|
-
* @param {
|
|
541
|
+
* @param {object} [userParameters.testCells] - User test cells
|
|
531
542
|
* @param {string} [userParameters.originReferrer] - Client page URL (including path)
|
|
532
543
|
* @param {string} [userParameters.referer] - Client page URL (including path)
|
|
533
544
|
* @param {string} [userParameters.userIp] - Client user IP
|
|
@@ -548,6 +559,9 @@ class Tracker {
|
|
|
548
559
|
* {
|
|
549
560
|
* sessionId: 1,
|
|
550
561
|
* clientId: '7a43138f-c87b-29c0-872d-65b00ed0e392',
|
|
562
|
+
* testCells: {
|
|
563
|
+
* testName: 'cellName',
|
|
564
|
+
* },
|
|
551
565
|
* },
|
|
552
566
|
* );
|
|
553
567
|
*/
|
|
@@ -620,7 +634,7 @@ class Tracker {
|
|
|
620
634
|
* @param {number} userParameters.clientId - Client ID, utilized to personalize results
|
|
621
635
|
* @param {string} [userParameters.userId] - User ID, utilized to personalize results
|
|
622
636
|
* @param {string} [userParameters.segments] - User segments
|
|
623
|
-
* @param {
|
|
637
|
+
* @param {object} [userParameters.testCells] - User test cells
|
|
624
638
|
* @param {string} [userParameters.originReferrer] - Client page URL (including path)
|
|
625
639
|
* @param {string} [userParameters.referer] - Client page URL (including path)
|
|
626
640
|
* @param {string} [userParameters.userIp] - Client user IP
|
|
@@ -646,6 +660,9 @@ class Tracker {
|
|
|
646
660
|
* {
|
|
647
661
|
* sessionId: 1,
|
|
648
662
|
* clientId: '7a43138f-c87b-29c0-872d-65b00ed0e392',
|
|
663
|
+
* testCells: {
|
|
664
|
+
* testName: 'cellName',
|
|
665
|
+
* },
|
|
649
666
|
* },
|
|
650
667
|
* );
|
|
651
668
|
*/
|
|
@@ -745,7 +762,7 @@ class Tracker {
|
|
|
745
762
|
* @param {number} userParameters.clientId - Client ID, utilized to personalize results
|
|
746
763
|
* @param {string} [userParameters.userId] - User ID, utilized to personalize results
|
|
747
764
|
* @param {string} [userParameters.segments] - User segments
|
|
748
|
-
* @param {
|
|
765
|
+
* @param {object} [userParameters.testCells] - User test cells
|
|
749
766
|
* @param {string} [userParameters.originReferrer] - Client page URL (including path)
|
|
750
767
|
* @param {string} [userParameters.referer] - Client page URL (including path)
|
|
751
768
|
* @param {string} [userParameters.userIp] - Client user IP
|
|
@@ -766,6 +783,9 @@ class Tracker {
|
|
|
766
783
|
* {
|
|
767
784
|
* sessionId: 1,
|
|
768
785
|
* clientId: '7a43138f-c87b-29c0-872d-65b00ed0e392',
|
|
786
|
+
* testCells: {
|
|
787
|
+
* testName: 'cellName',
|
|
788
|
+
* },
|
|
769
789
|
* },
|
|
770
790
|
* );
|
|
771
791
|
*/
|
|
@@ -831,7 +851,7 @@ class Tracker {
|
|
|
831
851
|
* @param {number} userParameters.clientId - Client ID, utilized to personalize results
|
|
832
852
|
* @param {string} [userParameters.userId] - User ID, utilized to personalize results
|
|
833
853
|
* @param {string} [userParameters.segments] - User segments
|
|
834
|
-
* @param {
|
|
854
|
+
* @param {object} [userParameters.testCells] - User test cells
|
|
835
855
|
* @param {string} [userParameters.originReferrer] - Client page URL (including path)
|
|
836
856
|
* @param {string} [userParameters.referer] - Client page URL (including path)
|
|
837
857
|
* @param {string} [userParameters.userIp] - Client user IP
|
|
@@ -854,6 +874,9 @@ class Tracker {
|
|
|
854
874
|
* {
|
|
855
875
|
* sessionId: 1,
|
|
856
876
|
* clientId: '7a43138f-c87b-29c0-872d-65b00ed0e392',
|
|
877
|
+
* testCells: {
|
|
878
|
+
* testName: 'cellName',
|
|
879
|
+
* },
|
|
857
880
|
* },
|
|
858
881
|
* );
|
|
859
882
|
*/
|
|
@@ -941,7 +964,7 @@ class Tracker {
|
|
|
941
964
|
* @param {number} userParameters.clientId - Client ID, utilized to personalize results
|
|
942
965
|
* @param {string} [userParameters.userId] - User ID, utilized to personalize results
|
|
943
966
|
* @param {string} [userParameters.segments] - User segments
|
|
944
|
-
* @param {
|
|
967
|
+
* @param {object} [userParameters.testCells] - User test cells
|
|
945
968
|
* @param {string} [userParameters.originReferrer] - Client page URL (including path)
|
|
946
969
|
* @param {string} [userParameters.referer] - Client page URL (including path)
|
|
947
970
|
* @param {string} [userParameters.userIp] - Client user IP
|
|
@@ -967,6 +990,9 @@ class Tracker {
|
|
|
967
990
|
* {
|
|
968
991
|
* sessionId: 1,
|
|
969
992
|
* clientId: '7a43138f-c87b-29c0-872d-65b00ed0e392',
|
|
993
|
+
* testCells: {
|
|
994
|
+
* testName: 'cellName',
|
|
995
|
+
* },
|
|
970
996
|
* },
|
|
971
997
|
* );
|
|
972
998
|
*/
|
|
@@ -1070,7 +1096,7 @@ class Tracker {
|
|
|
1070
1096
|
* @param {number} userParameters.clientId - Client ID, utilized to personalize results
|
|
1071
1097
|
* @param {string} [userParameters.userId] - User ID, utilized to personalize results
|
|
1072
1098
|
* @param {string} [userParameters.segments] - User segments
|
|
1073
|
-
* @param {
|
|
1099
|
+
* @param {object} [userParameters.testCells] - User test cells
|
|
1074
1100
|
* @param {string} [userParameters.originReferrer] - Client page URL (including path)
|
|
1075
1101
|
* @param {string} [userParameters.referer] - Client page URL (including path)
|
|
1076
1102
|
* @param {string} [userParameters.userIp] - Client user IP
|
|
@@ -1097,6 +1123,9 @@ class Tracker {
|
|
|
1097
1123
|
* {
|
|
1098
1124
|
* sessionId: 1,
|
|
1099
1125
|
* clientId: '7a43138f-c87b-29c0-872d-65b00ed0e392',
|
|
1126
|
+
* testCells: {
|
|
1127
|
+
* testName: 'cellName',
|
|
1128
|
+
* },
|
|
1100
1129
|
* },
|
|
1101
1130
|
* );
|
|
1102
1131
|
*/
|
|
@@ -1205,7 +1234,7 @@ class Tracker {
|
|
|
1205
1234
|
* @param {number} userParameters.clientId - Client ID, utilized to personalize results
|
|
1206
1235
|
* @param {string} [userParameters.userId] - User ID, utilized to personalize results
|
|
1207
1236
|
* @param {string} [userParameters.segments] - User segments
|
|
1208
|
-
* @param {
|
|
1237
|
+
* @param {object} [userParameters.testCells] - User test cells
|
|
1209
1238
|
* @param {string} [userParameters.originReferrer] - Client page URL (including path)
|
|
1210
1239
|
* @param {string} [userParameters.referer] - Client page URL (including path)
|
|
1211
1240
|
* @param {string} [userParameters.userIp] - Client user IP
|
|
@@ -1232,6 +1261,9 @@ class Tracker {
|
|
|
1232
1261
|
* {
|
|
1233
1262
|
* sessionId: 1,
|
|
1234
1263
|
* clientId: '7a43138f-c87b-29c0-872d-65b00ed0e392',
|
|
1264
|
+
* testCells: {
|
|
1265
|
+
* testName: 'cellName',
|
|
1266
|
+
* },
|
|
1235
1267
|
* },
|
|
1236
1268
|
* );
|
|
1237
1269
|
*/
|
|
@@ -1333,7 +1365,7 @@ class Tracker {
|
|
|
1333
1365
|
* @param {number} userParameters.clientId - Client ID, utilized to personalize results
|
|
1334
1366
|
* @param {string} userParameters.userId - User ID, utilized to personalize results
|
|
1335
1367
|
* @param {string} [userParameters.segments] - User segments
|
|
1336
|
-
* @param {
|
|
1368
|
+
* @param {object} [userParameters.testCells] - User test cells
|
|
1337
1369
|
* @param {string} [userParameters.originReferrer] - Client page URL (including path)
|
|
1338
1370
|
* @param {string} [userParameters.referer] - Client page URL (including path)
|
|
1339
1371
|
* @param {string} [userParameters.userIp] - Client user IP
|
|
@@ -1353,6 +1385,9 @@ class Tracker {
|
|
|
1353
1385
|
* {
|
|
1354
1386
|
* sessionId: 1,
|
|
1355
1387
|
* clientId: '7a43138f-c87b-29c0-872d-65b00ed0e392',
|
|
1388
|
+
* testCells: {
|
|
1389
|
+
* testName: 'cellName',
|
|
1390
|
+
* },
|
|
1356
1391
|
* },
|
|
1357
1392
|
* );
|
|
1358
1393
|
*/
|