Skip to content

Commit 190e562

Browse files
authored
fix(insights): guard against user token override while auth token is set (#1237)
1 parent 716e392 commit 190e562

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

packages/autocomplete-plugin-algolia-insights/src/__tests__/createAlgoliaInsightsPlugin.test.ts

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,7 @@ describe('createAlgoliaInsightsPlugin', () => {
322322
),
323323
});
324324

325+
// Setting an authenticated user token should replace the user token
325326
insightsClient('setAuthenticatedUserToken', 'customAuthUserToken');
326327

327328
const playground = createPlayground(createAutocomplete, {
@@ -356,15 +357,31 @@ describe('createAlgoliaInsightsPlugin', () => {
356357
}),
357358
]);
358359

359-
insightsClient('setAuthenticatedUserToken', undefined);
360+
// Updating a user token should have no effect if there is
361+
// an authenticated user token already set
362+
insightsClient('setUserToken', 'customUserToken2');
360363

361364
userEvent.type(playground.inputElement, 'b');
362365
await runAllMicroTasks();
363366

364367
expect(searchClient.search).toHaveBeenCalledTimes(2);
365368
expect(searchClient.search).toHaveBeenLastCalledWith([
366369
expect.objectContaining({
367-
params: expect.objectContaining({ userToken: 'customUserToken' }),
370+
params: expect.objectContaining({ userToken: 'customAuthUserToken' }),
371+
}),
372+
]);
373+
374+
// Removing the authenticated user token should revert to
375+
// the latest user token set
376+
insightsClient('setAuthenticatedUserToken', undefined);
377+
378+
userEvent.type(playground.inputElement, 'c');
379+
await runAllMicroTasks();
380+
381+
expect(searchClient.search).toHaveBeenCalledTimes(3);
382+
expect(searchClient.search).toHaveBeenLastCalledWith([
383+
expect.objectContaining({
384+
params: expect.objectContaining({ userToken: 'customUserToken2' }),
368385
}),
369386
]);
370387
});

packages/autocomplete-plugin-algolia-insights/src/createAlgoliaInsightsPlugin.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ export function createAlgoliaInsightsPlugin(
183183
return {
184184
name: 'aa.algoliaInsightsPlugin',
185185
subscribe({ setContext, onSelect, onActive }) {
186+
let isAuthenticatedToken = false;
186187
function setInsightsContext(userToken?: InsightsEvent['userToken']) {
187188
setContext({
188189
algoliaInsightsPlugin: {
@@ -204,18 +205,26 @@ export function createAlgoliaInsightsPlugin(
204205
setInsightsContext();
205206

206207
// Handles user token changes
207-
insightsClient('onUserTokenChange', setInsightsContext);
208+
insightsClient('onUserTokenChange', (userToken) => {
209+
if (!isAuthenticatedToken) {
210+
setInsightsContext(userToken);
211+
}
212+
});
208213
insightsClient('getUserToken', null, (_error, userToken) => {
209-
setInsightsContext(userToken);
214+
if (!isAuthenticatedToken) {
215+
setInsightsContext(userToken);
216+
}
210217
});
211218

212219
// Handles authenticated user token changes
213220
insightsClient(
214221
'onAuthenticatedUserTokenChange',
215222
(authenticatedUserToken) => {
216223
if (authenticatedUserToken) {
224+
isAuthenticatedToken = true;
217225
setInsightsContext(authenticatedUserToken);
218226
} else {
227+
isAuthenticatedToken = false;
219228
insightsClient('getUserToken', null, (_error, userToken) =>
220229
setInsightsContext(userToken)
221230
);
@@ -227,6 +236,7 @@ export function createAlgoliaInsightsPlugin(
227236
null,
228237
(_error, authenticatedUserToken) => {
229238
if (authenticatedUserToken) {
239+
isAuthenticatedToken = true;
230240
setInsightsContext(authenticatedUserToken);
231241
}
232242
}

0 commit comments

Comments
 (0)