@constructor-io/constructorio-client-javascript 2.37.0 → 2.37.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/lib/constructorio.js +36 -60
- package/lib/modules/autocomplete.js +40 -55
- package/lib/modules/browse.js +86 -130
- package/lib/modules/quizzes.js +39 -60
- package/lib/modules/recommendations.js +38 -52
- package/lib/modules/search.js +66 -91
- package/lib/modules/tracker.js +430 -656
- package/lib/types/recommendations.d.ts +1 -1
- package/lib/utils/botlist.js +1 -1
- package/lib/utils/event-dispatcher.js +14 -20
- package/lib/utils/events.js +29 -95
- package/lib/utils/helpers.js +7 -29
- package/lib/utils/humanity-check.js +10 -19
- package/lib/utils/request-queue.js +28 -48
- package/lib/utils/store.js +2 -3
- package/lib/utils/store.overflow.js +6 -27
- package/lib/utils/store_old.js +9 -0
- package/package.json +1 -1
package/lib/modules/quizzes.js
CHANGED
|
@@ -1,107 +1,100 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
6
|
-
|
|
7
5
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
8
|
-
|
|
9
6
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
10
|
-
|
|
11
7
|
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
12
|
-
|
|
13
8
|
/* eslint-disable object-curly-newline, no-underscore-dangle */
|
|
14
9
|
var EventDispatcher = require('../utils/event-dispatcher');
|
|
10
|
+
var helpers = require('../utils/helpers');
|
|
15
11
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
// Create URL from supplied quizId and parameters
|
|
19
13
|
function createQuizUrl(quizId, parameters, options, path) {
|
|
20
14
|
var apiKey = options.apiKey,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
15
|
+
clientId = options.clientId,
|
|
16
|
+
sessionId = options.sessionId,
|
|
17
|
+
segments = options.segments,
|
|
18
|
+
userId = options.userId,
|
|
19
|
+
version = options.version,
|
|
20
|
+
quizzesServiceUrl = options.quizzesServiceUrl;
|
|
27
21
|
var queryParams = {
|
|
28
22
|
c: version
|
|
29
23
|
};
|
|
30
24
|
var answersParamString = '';
|
|
31
25
|
queryParams.key = apiKey;
|
|
32
26
|
queryParams.i = clientId;
|
|
33
|
-
queryParams.s = sessionId;
|
|
27
|
+
queryParams.s = sessionId;
|
|
34
28
|
|
|
29
|
+
// Pull user segments from options
|
|
35
30
|
if (segments && segments.length) {
|
|
36
31
|
queryParams.us = segments;
|
|
37
|
-
}
|
|
38
|
-
|
|
32
|
+
}
|
|
39
33
|
|
|
34
|
+
// Pull user id from options and ensure string
|
|
40
35
|
if (userId) {
|
|
41
36
|
queryParams.ui = String(userId);
|
|
42
|
-
}
|
|
43
|
-
|
|
37
|
+
}
|
|
44
38
|
|
|
39
|
+
// Validate quiz id is provided
|
|
45
40
|
if (!quizId || typeof quizId !== 'string') {
|
|
46
41
|
throw new Error('quizId is a required parameter of type string');
|
|
47
42
|
}
|
|
48
|
-
|
|
49
43
|
if (path === 'results' && ((0, _typeof2["default"])(parameters.answers) !== 'object' || !Array.isArray(parameters.answers) || parameters.answers.length === 0)) {
|
|
50
44
|
throw new Error('answers is a required parameter of type array');
|
|
51
45
|
}
|
|
52
|
-
|
|
53
46
|
if (parameters) {
|
|
54
47
|
var section = parameters.section,
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
48
|
+
answers = parameters.answers,
|
|
49
|
+
quizSessionId = parameters.quizSessionId,
|
|
50
|
+
quizVersionId = parameters.quizVersionId,
|
|
51
|
+
page = parameters.page,
|
|
52
|
+
resultsPerPage = parameters.resultsPerPage,
|
|
53
|
+
filters = parameters.filters;
|
|
54
|
+
|
|
55
|
+
// Pull section from parameters
|
|
62
56
|
if (section) {
|
|
63
57
|
queryParams.section = section;
|
|
64
|
-
}
|
|
65
|
-
|
|
58
|
+
}
|
|
66
59
|
|
|
60
|
+
// Pull quiz_version_id from parameters
|
|
67
61
|
if (quizVersionId) {
|
|
68
62
|
queryParams.quiz_version_id = quizVersionId;
|
|
69
|
-
}
|
|
70
|
-
|
|
63
|
+
}
|
|
71
64
|
|
|
65
|
+
// Pull quiz_session_id from parameters
|
|
72
66
|
if (quizSessionId) {
|
|
73
67
|
queryParams.quiz_session_id = quizSessionId;
|
|
74
|
-
}
|
|
75
|
-
|
|
68
|
+
}
|
|
76
69
|
|
|
70
|
+
// Pull a (answers) from parameters and transform
|
|
77
71
|
if (answers && answers.length) {
|
|
78
72
|
answersParamString = "&".concat(helpers.stringify({
|
|
79
73
|
a: answers.map(function (ans) {
|
|
80
74
|
return (0, _toConsumableArray2["default"])(ans).join(',');
|
|
81
75
|
})
|
|
82
76
|
}));
|
|
83
|
-
}
|
|
84
|
-
|
|
77
|
+
}
|
|
85
78
|
|
|
79
|
+
// Pull page from parameters
|
|
86
80
|
if (!helpers.isNil(page)) {
|
|
87
81
|
queryParams.page = page;
|
|
88
|
-
}
|
|
89
|
-
|
|
82
|
+
}
|
|
90
83
|
|
|
84
|
+
// Pull results per page from parameters
|
|
91
85
|
if (!helpers.isNil(resultsPerPage)) {
|
|
92
86
|
queryParams.num_results_per_page = resultsPerPage;
|
|
93
87
|
}
|
|
94
|
-
|
|
95
88
|
if (filters) {
|
|
96
89
|
queryParams.filters = filters;
|
|
97
90
|
}
|
|
98
91
|
}
|
|
99
|
-
|
|
100
92
|
queryParams._dt = Date.now();
|
|
101
93
|
queryParams = helpers.cleanParams(queryParams);
|
|
102
94
|
var queryString = helpers.stringify(queryParams);
|
|
103
95
|
return "".concat(quizzesServiceUrl, "/v1/quizzes/").concat(encodeURIComponent(quizId), "/").concat(encodeURIComponent(path), "/?").concat(queryString).concat(answersParamString);
|
|
104
96
|
}
|
|
97
|
+
|
|
105
98
|
/**
|
|
106
99
|
* Interface to quiz related API calls
|
|
107
100
|
*
|
|
@@ -109,14 +102,13 @@ function createQuizUrl(quizId, parameters, options, path) {
|
|
|
109
102
|
* @inner
|
|
110
103
|
* @returns {object}
|
|
111
104
|
*/
|
|
112
|
-
|
|
113
|
-
|
|
114
105
|
var Quizzes = /*#__PURE__*/function () {
|
|
115
106
|
function Quizzes(options) {
|
|
116
107
|
(0, _classCallCheck2["default"])(this, Quizzes);
|
|
117
108
|
this.options = options || {};
|
|
118
109
|
this.eventDispatcher = new EventDispatcher(options.eventDispatcher);
|
|
119
110
|
}
|
|
111
|
+
|
|
120
112
|
/**
|
|
121
113
|
* Retrieve next question from API
|
|
122
114
|
*
|
|
@@ -140,26 +132,22 @@ var Quizzes = /*#__PURE__*/function () {
|
|
|
140
132
|
* quizSessionId: '1234',
|
|
141
133
|
* });
|
|
142
134
|
*/
|
|
143
|
-
|
|
144
|
-
|
|
145
135
|
(0, _createClass2["default"])(Quizzes, [{
|
|
146
136
|
key: "getQuizNextQuestion",
|
|
147
137
|
value: function getQuizNextQuestion(quizId, parameters) {
|
|
148
138
|
var _this = this;
|
|
149
|
-
|
|
150
139
|
var networkParameters = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
151
140
|
var requestUrl;
|
|
152
141
|
var fetch = this.options.fetch;
|
|
153
142
|
var controller = new AbortController();
|
|
154
143
|
var signal = controller.signal;
|
|
155
|
-
|
|
156
144
|
try {
|
|
157
145
|
requestUrl = createQuizUrl(quizId, parameters, this.options, 'next');
|
|
158
146
|
} catch (e) {
|
|
159
147
|
return Promise.reject(e);
|
|
160
|
-
}
|
|
161
|
-
|
|
148
|
+
}
|
|
162
149
|
|
|
150
|
+
// Handle network timeout if specified
|
|
163
151
|
helpers.applyNetworkTimeout(this.options, networkParameters, controller);
|
|
164
152
|
return fetch(requestUrl, {
|
|
165
153
|
signal: signal
|
|
@@ -167,18 +155,16 @@ var Quizzes = /*#__PURE__*/function () {
|
|
|
167
155
|
if (response.ok) {
|
|
168
156
|
return response.json();
|
|
169
157
|
}
|
|
170
|
-
|
|
171
158
|
return helpers.throwHttpErrorFromResponse(new Error(), response);
|
|
172
159
|
}).then(function (json) {
|
|
173
160
|
if (json.quiz_version_id) {
|
|
174
161
|
_this.eventDispatcher.queue('quizzes.getQuizNextQuestion.completed', json);
|
|
175
|
-
|
|
176
162
|
return json;
|
|
177
163
|
}
|
|
178
|
-
|
|
179
164
|
throw new Error('getQuizNextQuestion response data is malformed');
|
|
180
165
|
});
|
|
181
166
|
}
|
|
167
|
+
|
|
182
168
|
/**
|
|
183
169
|
* Retrieves filter expression and recommendation URL from given answers
|
|
184
170
|
*
|
|
@@ -205,25 +191,22 @@ var Quizzes = /*#__PURE__*/function () {
|
|
|
205
191
|
* quizSessionId: '234'
|
|
206
192
|
* });
|
|
207
193
|
*/
|
|
208
|
-
|
|
209
194
|
}, {
|
|
210
195
|
key: "getQuizResults",
|
|
211
196
|
value: function getQuizResults(quizId, parameters) {
|
|
212
197
|
var _this2 = this;
|
|
213
|
-
|
|
214
198
|
var networkParameters = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
215
199
|
var requestUrl;
|
|
216
200
|
var fetch = this.options.fetch;
|
|
217
201
|
var controller = new AbortController();
|
|
218
202
|
var signal = controller.signal;
|
|
219
|
-
|
|
220
203
|
try {
|
|
221
204
|
requestUrl = createQuizUrl(quizId, parameters, this.options, 'results');
|
|
222
205
|
} catch (e) {
|
|
223
206
|
return Promise.reject(e);
|
|
224
|
-
}
|
|
225
|
-
|
|
207
|
+
}
|
|
226
208
|
|
|
209
|
+
// Handle network timeout if specified
|
|
227
210
|
helpers.applyNetworkTimeout(this.options, networkParameters, controller);
|
|
228
211
|
return fetch(requestUrl, {
|
|
229
212
|
signal: signal
|
|
@@ -231,20 +214,16 @@ var Quizzes = /*#__PURE__*/function () {
|
|
|
231
214
|
if (response.ok) {
|
|
232
215
|
return response.json();
|
|
233
216
|
}
|
|
234
|
-
|
|
235
217
|
return helpers.throwHttpErrorFromResponse(new Error(), response);
|
|
236
218
|
}).then(function (json) {
|
|
237
219
|
if (json.quiz_version_id) {
|
|
238
220
|
_this2.eventDispatcher.queue('quizzes.getQuizResults.completed', json);
|
|
239
|
-
|
|
240
221
|
return json;
|
|
241
222
|
}
|
|
242
|
-
|
|
243
223
|
throw new Error('getQuizResults response data is malformed');
|
|
244
224
|
});
|
|
245
225
|
}
|
|
246
226
|
}]);
|
|
247
227
|
return Quizzes;
|
|
248
228
|
}();
|
|
249
|
-
|
|
250
229
|
module.exports = Quizzes;
|
|
@@ -1,80 +1,77 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
6
|
-
|
|
7
5
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
8
|
-
|
|
9
6
|
/* eslint-disable object-curly-newline, no-param-reassign */
|
|
10
7
|
var EventDispatcher = require('../utils/event-dispatcher');
|
|
8
|
+
var helpers = require('../utils/helpers');
|
|
11
9
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
// Create URL from supplied parameters
|
|
15
11
|
function createRecommendationsUrl(podId, parameters, options) {
|
|
16
12
|
var apiKey = options.apiKey,
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
13
|
+
version = options.version,
|
|
14
|
+
serviceUrl = options.serviceUrl,
|
|
15
|
+
sessionId = options.sessionId,
|
|
16
|
+
userId = options.userId,
|
|
17
|
+
clientId = options.clientId,
|
|
18
|
+
segments = options.segments;
|
|
23
19
|
var queryParams = {
|
|
24
20
|
c: version
|
|
25
21
|
};
|
|
26
22
|
queryParams.key = apiKey;
|
|
27
23
|
queryParams.i = clientId;
|
|
28
|
-
queryParams.s = sessionId;
|
|
24
|
+
queryParams.s = sessionId;
|
|
29
25
|
|
|
26
|
+
// Validate pod identifier is provided
|
|
30
27
|
if (!podId || typeof podId !== 'string') {
|
|
31
28
|
throw new Error('podId is a required parameter of type string');
|
|
32
|
-
}
|
|
33
|
-
|
|
29
|
+
}
|
|
34
30
|
|
|
31
|
+
// Pull user segments from options
|
|
35
32
|
if (segments && segments.length) {
|
|
36
33
|
queryParams.us = segments;
|
|
37
|
-
}
|
|
38
|
-
|
|
34
|
+
}
|
|
39
35
|
|
|
36
|
+
// Pull user id from options and ensure string
|
|
40
37
|
if (userId) {
|
|
41
38
|
queryParams.ui = String(userId);
|
|
42
39
|
}
|
|
43
|
-
|
|
44
40
|
if (parameters) {
|
|
45
41
|
var numResults = parameters.numResults,
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
42
|
+
itemIds = parameters.itemIds,
|
|
43
|
+
section = parameters.section,
|
|
44
|
+
term = parameters.term,
|
|
45
|
+
filters = parameters.filters,
|
|
46
|
+
variationsMap = parameters.variationsMap,
|
|
47
|
+
hiddenFields = parameters.hiddenFields;
|
|
48
|
+
|
|
49
|
+
// Pull num results number from parameters
|
|
53
50
|
if (!helpers.isNil(numResults)) {
|
|
54
51
|
queryParams.num_results = numResults;
|
|
55
|
-
}
|
|
56
|
-
|
|
52
|
+
}
|
|
57
53
|
|
|
54
|
+
// Pull item ids from parameters
|
|
58
55
|
if (itemIds) {
|
|
59
56
|
queryParams.item_id = itemIds;
|
|
60
|
-
}
|
|
61
|
-
|
|
57
|
+
}
|
|
62
58
|
|
|
59
|
+
// Pull section from parameters
|
|
63
60
|
if (section) {
|
|
64
61
|
queryParams.section = section;
|
|
65
|
-
}
|
|
66
|
-
|
|
62
|
+
}
|
|
67
63
|
|
|
64
|
+
// Pull term from parameters
|
|
68
65
|
if (term) {
|
|
69
66
|
queryParams.term = term;
|
|
70
|
-
}
|
|
71
|
-
|
|
67
|
+
}
|
|
72
68
|
|
|
69
|
+
// Pull filters from parameters
|
|
73
70
|
if (filters) {
|
|
74
71
|
queryParams.filters = filters;
|
|
75
|
-
}
|
|
76
|
-
|
|
72
|
+
}
|
|
77
73
|
|
|
74
|
+
// Pull hidden fields from parameters
|
|
78
75
|
if (hiddenFields) {
|
|
79
76
|
if (queryParams.fmt_options) {
|
|
80
77
|
queryParams.fmt_options.hidden_fields = hiddenFields;
|
|
@@ -83,18 +80,18 @@ function createRecommendationsUrl(podId, parameters, options) {
|
|
|
83
80
|
hidden_fields: hiddenFields
|
|
84
81
|
};
|
|
85
82
|
}
|
|
86
|
-
}
|
|
87
|
-
|
|
83
|
+
}
|
|
88
84
|
|
|
85
|
+
// Pull variations map from parameters
|
|
89
86
|
if (variationsMap) {
|
|
90
87
|
queryParams.variations_map = JSON.stringify(variationsMap);
|
|
91
88
|
}
|
|
92
89
|
}
|
|
93
|
-
|
|
94
90
|
queryParams = helpers.cleanParams(queryParams);
|
|
95
91
|
var queryString = helpers.stringify(queryParams);
|
|
96
92
|
return "".concat(serviceUrl, "/recommendations/v1/pods/").concat(helpers.encodeURIComponentRFC3986(helpers.trimNonBreakingSpaces(podId)), "?").concat(queryString);
|
|
97
93
|
}
|
|
94
|
+
|
|
98
95
|
/**
|
|
99
96
|
* Interface to recommendations related API calls
|
|
100
97
|
*
|
|
@@ -102,14 +99,13 @@ function createRecommendationsUrl(podId, parameters, options) {
|
|
|
102
99
|
* @inner
|
|
103
100
|
* @returns {object}
|
|
104
101
|
*/
|
|
105
|
-
|
|
106
|
-
|
|
107
102
|
var Recommendations = /*#__PURE__*/function () {
|
|
108
103
|
function Recommendations(options) {
|
|
109
104
|
(0, _classCallCheck2["default"])(this, Recommendations);
|
|
110
105
|
this.options = options || {};
|
|
111
106
|
this.eventDispatcher = new EventDispatcher(options.eventDispatcher);
|
|
112
107
|
}
|
|
108
|
+
|
|
113
109
|
/**
|
|
114
110
|
* Get recommendations for supplied pod identifier
|
|
115
111
|
*
|
|
@@ -136,38 +132,32 @@ var Recommendations = /*#__PURE__*/function () {
|
|
|
136
132
|
* },
|
|
137
133
|
* });
|
|
138
134
|
*/
|
|
139
|
-
|
|
140
|
-
|
|
141
135
|
(0, _createClass2["default"])(Recommendations, [{
|
|
142
136
|
key: "getRecommendations",
|
|
143
137
|
value: function getRecommendations(podId, parameters) {
|
|
144
138
|
var _this = this;
|
|
145
|
-
|
|
146
139
|
var networkParameters = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
147
140
|
var requestUrl;
|
|
148
141
|
var fetch = this.options.fetch;
|
|
149
142
|
var signal;
|
|
150
|
-
|
|
151
143
|
if (typeof AbortController === 'function') {
|
|
152
144
|
var controller = new AbortController();
|
|
153
|
-
signal = controller && controller.signal;
|
|
145
|
+
signal = controller && controller.signal;
|
|
154
146
|
|
|
147
|
+
// Handle network timeout if specified
|
|
155
148
|
helpers.applyNetworkTimeout(this.options, networkParameters, controller);
|
|
156
149
|
}
|
|
157
|
-
|
|
158
150
|
try {
|
|
159
151
|
requestUrl = createRecommendationsUrl(podId, parameters, this.options);
|
|
160
152
|
} catch (e) {
|
|
161
153
|
return Promise.reject(e);
|
|
162
154
|
}
|
|
163
|
-
|
|
164
155
|
return fetch(requestUrl, {
|
|
165
156
|
signal: signal
|
|
166
157
|
}).then(function (response) {
|
|
167
158
|
if (response.ok) {
|
|
168
159
|
return response.json();
|
|
169
160
|
}
|
|
170
|
-
|
|
171
161
|
return helpers.throwHttpErrorFromResponse(new Error(), response);
|
|
172
162
|
}).then(function (json) {
|
|
173
163
|
if (json.response && json.response.results) {
|
|
@@ -178,17 +168,13 @@ var Recommendations = /*#__PURE__*/function () {
|
|
|
178
168
|
result.result_id = json.result_id;
|
|
179
169
|
});
|
|
180
170
|
}
|
|
181
|
-
|
|
182
171
|
_this.eventDispatcher.queue('recommendations.getRecommendations.completed', json);
|
|
183
|
-
|
|
184
172
|
return json;
|
|
185
173
|
}
|
|
186
|
-
|
|
187
174
|
throw new Error('getRecommendations response data is malformed');
|
|
188
175
|
});
|
|
189
176
|
}
|
|
190
177
|
}]);
|
|
191
178
|
return Recommendations;
|
|
192
179
|
}();
|
|
193
|
-
|
|
194
180
|
module.exports = Recommendations;
|