Skip to content

Commit 08e9cd0

Browse files
authoredDec 9, 2024
fix(insights-plugin): prevent authenticated token being set as the userToken (#1291)
* remove auth token * fix tests * fix tab spacing
1 parent 893ad5f commit 08e9cd0

File tree

4 files changed

+12
-123
lines changed

4 files changed

+12
-123
lines changed
 

‎packages/autocomplete-core/src/__tests__/createAutocomplete.test.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ describe('createAutocomplete', () => {
137137
insights: { insightsClient },
138138
});
139139

140-
expect(insightsClient).toHaveBeenCalledTimes(5);
140+
expect(insightsClient).toHaveBeenCalledTimes(3);
141141
expect(insightsClient).toHaveBeenCalledWith(
142142
'addAlgoliaAgent',
143143
'insights-plugin'
@@ -168,7 +168,7 @@ describe('createAutocomplete', () => {
168168
});
169169

170170
expect(defaultInsightsClient).toHaveBeenCalledTimes(0);
171-
expect(userInsightsClient).toHaveBeenCalledTimes(5);
171+
expect(userInsightsClient).toHaveBeenCalledTimes(3);
172172
expect(userInsightsClient).toHaveBeenCalledWith(
173173
'addAlgoliaAgent',
174174
'insights-plugin'

‎packages/autocomplete-js/src/__tests__/autocomplete.test.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -753,16 +753,16 @@ See: https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocom
753753
insights: { insightsClient: defaultInsightsClient },
754754
});
755755

756-
expect(defaultInsightsClient).toHaveBeenCalledTimes(5);
756+
expect(defaultInsightsClient).toHaveBeenCalledTimes(3);
757757
expect(userInsightsClient).toHaveBeenCalledTimes(0);
758758

759759
const insightsPlugin = createAlgoliaInsightsPlugin({
760760
insightsClient: userInsightsClient,
761761
});
762762
update({ plugins: [insightsPlugin] });
763763

764-
expect(defaultInsightsClient).toHaveBeenCalledTimes(5);
765-
expect(userInsightsClient).toHaveBeenCalledTimes(5);
764+
expect(defaultInsightsClient).toHaveBeenCalledTimes(3);
765+
expect(userInsightsClient).toHaveBeenCalledTimes(3);
766766
});
767767
});
768768
});

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

+5-85
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ describe('createAlgoliaInsightsPlugin', () => {
9292

9393
createPlayground(createAutocomplete, { plugins: [insightsPlugin] });
9494

95-
expect(insightsClient).toHaveBeenCalledTimes(5);
95+
expect(insightsClient).toHaveBeenCalledTimes(3);
9696
expect(insightsClient).toHaveBeenCalledWith(
9797
'addAlgoliaAgent',
9898
'insights-plugin'
@@ -256,7 +256,7 @@ describe('createAlgoliaInsightsPlugin', () => {
256256
]);
257257
});
258258

259-
test('forwards `authenticatedUserToken` from Search Insights to Algolia API requests', async () => {
259+
test('does not forward `authenticatedUserToken` from Search Insights to Algolia API requests', async () => {
260260
const insightsPlugin = createAlgoliaInsightsPlugin({ insightsClient });
261261

262262
const searchClient = createSearchClient({
@@ -299,89 +299,9 @@ describe('createAlgoliaInsightsPlugin', () => {
299299
expect(searchClient.search).toHaveBeenCalledTimes(1);
300300
expect(searchClient.search).toHaveBeenCalledWith([
301301
expect.objectContaining({
302-
params: expect.objectContaining({ userToken: 'customAuthUserToken' }),
303-
}),
304-
]);
305-
});
306-
307-
test('uses `authenticatedUserToken` in priority over `userToken`', async () => {
308-
const insightsPlugin = createAlgoliaInsightsPlugin({
309-
insightsClient,
310-
insightsInitParams: {
311-
userToken: 'customUserToken',
312-
},
313-
});
314-
315-
const searchClient = createSearchClient({
316-
search: jest.fn(() =>
317-
Promise.resolve(
318-
createMultiSearchResponse({
319-
hits: [{ objectID: '1' }],
320-
})
321-
)
322-
),
323-
});
324-
325-
// Setting an authenticated user token should replace the user token
326-
insightsClient('setAuthenticatedUserToken', 'customAuthUserToken');
327-
328-
const playground = createPlayground(createAutocomplete, {
329-
plugins: [insightsPlugin],
330-
getSources({ query }) {
331-
return [
332-
{
333-
sourceId: 'hits',
334-
getItems() {
335-
return getAlgoliaResults({
336-
searchClient,
337-
queries: [{ indexName: 'indexName', query }],
338-
});
339-
},
340-
templates: {
341-
item({ item }) {
342-
return item.objectID;
343-
},
344-
},
345-
},
346-
];
347-
},
348-
});
349-
350-
userEvent.type(playground.inputElement, 'a');
351-
await runAllMicroTasks();
352-
353-
expect(searchClient.search).toHaveBeenCalledTimes(1);
354-
expect(searchClient.search).toHaveBeenCalledWith([
355-
expect.objectContaining({
356-
params: expect.objectContaining({ userToken: 'customAuthUserToken' }),
357-
}),
358-
]);
359-
360-
// Updating a user token should have no effect if there is
361-
// an authenticated user token already set
362-
insightsClient('setUserToken', 'customUserToken2');
363-
364-
userEvent.type(playground.inputElement, 'b');
365-
await runAllMicroTasks();
366-
367-
expect(searchClient.search).toHaveBeenCalledTimes(2);
368-
expect(searchClient.search).toHaveBeenLastCalledWith([
369-
expect.objectContaining({
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' }),
302+
params: expect.not.objectContaining({
303+
userToken: 'customAuthUserToken',
304+
}),
385305
}),
386306
]);
387307
});

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

+2-33
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,6 @@ export function createAlgoliaInsightsPlugin(
183183
return {
184184
name: 'aa.algoliaInsightsPlugin',
185185
subscribe({ setContext, onSelect, onActive }) {
186-
let isAuthenticatedToken = false;
187186
function setInsightsContext(userToken?: InsightsEvent['userToken']) {
188187
setContext({
189188
algoliaInsightsPlugin: {
@@ -206,42 +205,12 @@ export function createAlgoliaInsightsPlugin(
206205

207206
// Handles user token changes
208207
insightsClient('onUserTokenChange', (userToken) => {
209-
if (!isAuthenticatedToken) {
210-
setInsightsContext(userToken);
211-
}
208+
setInsightsContext(userToken);
212209
});
213210
insightsClient('getUserToken', null, (_error, userToken) => {
214-
if (!isAuthenticatedToken) {
215-
setInsightsContext(userToken);
216-
}
211+
setInsightsContext(userToken);
217212
});
218213

219-
// Handles authenticated user token changes
220-
insightsClient(
221-
'onAuthenticatedUserTokenChange',
222-
(authenticatedUserToken) => {
223-
if (authenticatedUserToken) {
224-
isAuthenticatedToken = true;
225-
setInsightsContext(authenticatedUserToken);
226-
} else {
227-
isAuthenticatedToken = false;
228-
insightsClient('getUserToken', null, (_error, userToken) =>
229-
setInsightsContext(userToken)
230-
);
231-
}
232-
}
233-
);
234-
insightsClient(
235-
'getAuthenticatedUserToken',
236-
null,
237-
(_error, authenticatedUserToken) => {
238-
if (authenticatedUserToken) {
239-
isAuthenticatedToken = true;
240-
setInsightsContext(authenticatedUserToken);
241-
}
242-
}
243-
);
244-
245214
onSelect(({ item, state, event, source }) => {
246215
if (!isAlgoliaInsightsHit(item)) {
247216
return;

0 commit comments

Comments
 (0)
Failed to load comments.