Skip to content

Commit fb028c0

Browse files
authored
Merge pull request #42 from AddSearch/accept-personalization-token-or-use-cookie
Accept personalization token or use cookie
2 parents bcc5949 + 5e29ec5 commit fb028c0

File tree

7 files changed

+190
-73
lines changed

7 files changed

+190
-73
lines changed

README.md

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -335,13 +335,46 @@ client.setAnalyticsTag('Navigation search');
335335

336336
### Personalization
337337

338-
#### Set user token (for personalized search results)
338+
#### Enable personalization tracking
339+
Enable personalization tracking, user token will be included in every stat events as "session ID". <br/>
340+
341+
Set stats session ID if user token is generated by your site.
342+
```js
343+
client.setStatsSessionId(userToken);
344+
```
345+
346+
If session is not set, a UUID is generated and stored in a cookie named 'addsearchUserToken`.
347+
Specify the expiration date of the cookie. Default is 180.
348+
```js
349+
// Defaults - isEnabled: false, expirationDates: 180
350+
client.enablePersonalizationTracking(isEnabled, expirationDates);
351+
```
352+
353+
354+
#### Allow storing AddSearch's user token in cookie
355+
By default, the value is true. Set it to false when users reject cookie (AddSearch's cookie can be categorized as functional/analytics cookie).
356+
```js
357+
// Default: true
358+
client.consentAddSearchCookie(false);
359+
```
360+
361+
362+
#### Set user token to search query (for personalized search results)
339363
```js
340364
// Add a user token to the search request (if personalization in use)
341-
client.setUserToken('uuid');
365+
client.setUserToken(userToken);
342366
```
343367

344-
#### Send personalization events with search query
368+
369+
#### Get user token from AddSearch cookie
370+
Get the user token which is stored in AddSearch cookie (if available).
371+
```js
372+
// Get a user token
373+
client.getUserTokenInPersonalization();
374+
```
375+
376+
377+
#### Send personalization events with search query - deprecated
345378
In personalized search, user events are typically sent to AddSearch via API and a user token
346379
is passed with the search query (see setUserToken function).
347380
An alternative way is to send user events needed for personalization with the search query.
@@ -358,6 +391,8 @@ var events = [
358391
client.setPersonalizationEvents(events);
359392
```
360393

394+
395+
361396
### Other
362397

363398
#### Set JSON Web Token (for authentication)

dist/addsearch-js-client.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package-lock.json

Lines changed: 69 additions & 60 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,16 @@
3838
"dependencies": {
3939
"axios": "^0.27.2",
4040
"es6-promise": "^4.2.8",
41-
"js-base64": "^3.6.0"
41+
"js-base64": "^3.6.0",
42+
"uuid": "^9.0.0"
4243
},
4344
"devDependencies": {
44-
"@babel/cli": "^7.20.7",
45+
"@babel/cli": "^7.21.0",
4546
"@babel/core": "^7.12.9",
4647
"@babel/preset-env": "^7.12.7",
4748
"@babel/register": "^7.12.1",
4849
"axios-mock-adapter": "^1.21.2",
49-
"babel-loader": "^8.2.1",
50+
"babel-loader": "^9.1.2",
5051
"buffer": "^6.0.3",
5152
"eslint": "^8.13.0",
5253
"eslint-webpack-plugin": "^3.1.1",

src/cookie.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
const setCookie = function(cookieName, cookieValue, expireDays) {
2+
const date = new Date();
3+
date.setTime(date.getTime() + (expireDays * 24 * 60 * 60 * 1000));
4+
let expires = "expires="+ date.toUTCString();
5+
document.cookie = cookieName + "=" + cookieValue + ";" + expires + ";path=/";
6+
}
7+
8+
const getCookie = function(cookieName) {
9+
let name = cookieName + "=";
10+
let decodedCookie = decodeURIComponent(document.cookie);
11+
let cookieArray = decodedCookie.split(';');
12+
for(let i = 0; i < cookieArray.length; i++) {
13+
let cookie = cookieArray[i];
14+
while (cookie.charAt(0) === ' ') {
15+
cookie = cookie.substring(1);
16+
}
17+
if (cookie.indexOf(name) === 0) {
18+
return cookie.substring(name.length, cookie.length);
19+
}
20+
}
21+
return undefined;
22+
}
23+
24+
const deleteCookie = function(name) {
25+
document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 2000 00:00:01 GMT;';
26+
}
27+
28+
module.exports = {
29+
setCookie,
30+
getCookie,
31+
deleteCookie
32+
}

0 commit comments

Comments
 (0)