coveo.analytics 2.28.17 → 2.28.19
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/dist/browser.mjs +72 -2
- package/dist/coveoua.browser.js +1 -1
- package/dist/coveoua.browser.js.map +1 -1
- package/dist/coveoua.debug.js +107 -7
- package/dist/coveoua.debug.js.map +1 -1
- package/dist/coveoua.js +1 -1
- package/dist/coveoua.js.map +1 -1
- package/dist/definitions/searchPage/searchPageClient.d.ts +18 -5
- package/dist/definitions/searchPage/searchPageEvents.d.ts +21 -5
- package/dist/definitions/version.d.ts +1 -1
- package/dist/library.cjs +107 -7
- package/dist/library.es.js +3211 -0
- package/dist/library.js +86268 -0
- package/dist/library.mjs +107 -7
- package/dist/react-native.es.js +72 -2
- package/package.json +8 -7
- package/src/searchPage/searchPageClient.spec.ts +159 -28
- package/src/searchPage/searchPageClient.ts +67 -5
- package/src/searchPage/searchPageEvents.ts +48 -4
|
@@ -5,6 +5,8 @@ import {
|
|
|
5
5
|
CustomEventsTypes,
|
|
6
6
|
OmniboxSuggestionsMetadata,
|
|
7
7
|
StaticFilterToggleValueMetadata,
|
|
8
|
+
GeneratedAnswerFeedbackReason,
|
|
9
|
+
GeneratedAnswerRephraseFormat,
|
|
8
10
|
} from './searchPageEvents';
|
|
9
11
|
import CoveoAnalyticsClient from '../client/analytics';
|
|
10
12
|
import {NoopAnalytics} from '../client/noopAnalytics';
|
|
@@ -57,6 +59,7 @@ describe('SearchPageClient', () => {
|
|
|
57
59
|
|
|
58
60
|
const provider: SearchPageClientProvider = {
|
|
59
61
|
getBaseMetadata: () => ({foo: 'bar'}),
|
|
62
|
+
getGeneratedAnswerMetadata: () => ({genQaMetadata: 'bar'}),
|
|
60
63
|
getSearchEventRequestPayload: () => ({
|
|
61
64
|
queryText: 'queryText',
|
|
62
65
|
responseTime: 123,
|
|
@@ -116,7 +119,7 @@ describe('SearchPageClient', () => {
|
|
|
116
119
|
|
|
117
120
|
const expectMatchPayload = (actionCause: SearchPageEvents, meta = {}) => {
|
|
118
121
|
const body: string = lastCallBody(fetchMock);
|
|
119
|
-
const customData = {foo: 'bar', ...customDataFromMiddleware, ...meta};
|
|
122
|
+
const customData = {foo: 'bar', genQaMetadata: 'bar', ...customDataFromMiddleware, ...meta};
|
|
120
123
|
expect(JSON.parse(body)).toEqual({
|
|
121
124
|
queryText: 'queryText',
|
|
122
125
|
responseTime: 123,
|
|
@@ -142,6 +145,14 @@ describe('SearchPageClient', () => {
|
|
|
142
145
|
});
|
|
143
146
|
};
|
|
144
147
|
|
|
148
|
+
const expectSearchEventToMatchDescription = (
|
|
149
|
+
description: EventDescription,
|
|
150
|
+
actionCause: SearchPageEvents,
|
|
151
|
+
meta = {}
|
|
152
|
+
) => {
|
|
153
|
+
expectMatchDescription(description, actionCause, {...meta, genQaMetadata: 'bar'});
|
|
154
|
+
};
|
|
155
|
+
|
|
145
156
|
const expectMatchDocumentPayload = (actionCause: SearchPageEvents, doc: PartialDocumentInformation, meta = {}) => {
|
|
146
157
|
const body: string = lastCallBody(fetchMock);
|
|
147
158
|
const customData = {foo: 'bar', ...customDataFromMiddleware, ...meta};
|
|
@@ -209,7 +220,7 @@ describe('SearchPageClient', () => {
|
|
|
209
220
|
const built = await client.makeInterfaceLoad();
|
|
210
221
|
await built.log({searchUID: provider.getSearchUID()});
|
|
211
222
|
expectMatchPayload(SearchPageEvents.interfaceLoad);
|
|
212
|
-
|
|
223
|
+
expectSearchEventToMatchDescription(built.description, SearchPageEvents.interfaceLoad);
|
|
213
224
|
});
|
|
214
225
|
|
|
215
226
|
it('should send proper payload for #interfaceChange', async () => {
|
|
@@ -223,7 +234,9 @@ describe('SearchPageClient', () => {
|
|
|
223
234
|
const built = await client.makeInterfaceChange({interfaceChangeTo: 'bob'});
|
|
224
235
|
await built.log({searchUID: provider.getSearchUID()});
|
|
225
236
|
expectMatchPayload(SearchPageEvents.interfaceChange, {interfaceChangeTo: 'bob'});
|
|
226
|
-
|
|
237
|
+
expectSearchEventToMatchDescription(built.description, SearchPageEvents.interfaceChange, {
|
|
238
|
+
interfaceChangeTo: 'bob',
|
|
239
|
+
});
|
|
227
240
|
});
|
|
228
241
|
|
|
229
242
|
it('should send proper payload for #didyoumeanAutomatic', async () => {
|
|
@@ -235,7 +248,7 @@ describe('SearchPageClient', () => {
|
|
|
235
248
|
const built = await client.makeDidYouMeanAutomatic();
|
|
236
249
|
await built.log({searchUID: provider.getSearchUID()});
|
|
237
250
|
expectMatchPayload(SearchPageEvents.didyoumeanAutomatic);
|
|
238
|
-
|
|
251
|
+
expectSearchEventToMatchDescription(built.description, SearchPageEvents.didyoumeanAutomatic);
|
|
239
252
|
});
|
|
240
253
|
|
|
241
254
|
it('should send proper payload for #didyoumeanClick', async () => {
|
|
@@ -247,7 +260,7 @@ describe('SearchPageClient', () => {
|
|
|
247
260
|
const built = await client.makeDidYouMeanClick();
|
|
248
261
|
await built.log({searchUID: provider.getSearchUID()});
|
|
249
262
|
expectMatchPayload(SearchPageEvents.didyoumeanClick);
|
|
250
|
-
|
|
263
|
+
expectSearchEventToMatchDescription(built.description, SearchPageEvents.didyoumeanClick);
|
|
251
264
|
});
|
|
252
265
|
|
|
253
266
|
it('should send proper payload for #resultsSort', async () => {
|
|
@@ -259,7 +272,9 @@ describe('SearchPageClient', () => {
|
|
|
259
272
|
const built = await client.makeResultsSort({resultsSortBy: 'date ascending'});
|
|
260
273
|
await built.log({searchUID: provider.getSearchUID()});
|
|
261
274
|
expectMatchPayload(SearchPageEvents.resultsSort, {resultsSortBy: 'date ascending'});
|
|
262
|
-
|
|
275
|
+
expectSearchEventToMatchDescription(built.description, SearchPageEvents.resultsSort, {
|
|
276
|
+
resultsSortBy: 'date ascending',
|
|
277
|
+
});
|
|
263
278
|
});
|
|
264
279
|
|
|
265
280
|
it('should send proper payload for #searchboxSubmit', async () => {
|
|
@@ -271,7 +286,7 @@ describe('SearchPageClient', () => {
|
|
|
271
286
|
const built = await client.makeSearchboxSubmit();
|
|
272
287
|
await built.log({searchUID: provider.getSearchUID()});
|
|
273
288
|
expectMatchPayload(SearchPageEvents.searchboxSubmit);
|
|
274
|
-
|
|
289
|
+
expectSearchEventToMatchDescription(built.description, SearchPageEvents.searchboxSubmit);
|
|
275
290
|
});
|
|
276
291
|
|
|
277
292
|
it('should send proper payload for #searchboxClear', async () => {
|
|
@@ -283,7 +298,7 @@ describe('SearchPageClient', () => {
|
|
|
283
298
|
const built = await client.makeSearchboxClear();
|
|
284
299
|
await built.log({searchUID: provider.getSearchUID()});
|
|
285
300
|
expectMatchPayload(SearchPageEvents.searchboxClear);
|
|
286
|
-
|
|
301
|
+
expectSearchEventToMatchDescription(built.description, SearchPageEvents.searchboxClear);
|
|
287
302
|
});
|
|
288
303
|
|
|
289
304
|
it('should send proper payload for #searchboxAsYouType', async () => {
|
|
@@ -295,7 +310,7 @@ describe('SearchPageClient', () => {
|
|
|
295
310
|
const built = await client.makeSearchboxAsYouType();
|
|
296
311
|
await built.log({searchUID: provider.getSearchUID()});
|
|
297
312
|
expectMatchPayload(SearchPageEvents.searchboxAsYouType);
|
|
298
|
-
|
|
313
|
+
expectSearchEventToMatchDescription(built.description, SearchPageEvents.searchboxAsYouType);
|
|
299
314
|
});
|
|
300
315
|
|
|
301
316
|
it('should send proper payload for #documentQuickview', async () => {
|
|
@@ -369,7 +384,7 @@ describe('SearchPageClient', () => {
|
|
|
369
384
|
const built = await client.makeOmniboxAnalytics(meta);
|
|
370
385
|
await built.log({searchUID: provider.getSearchUID()});
|
|
371
386
|
expectMatchPayload(SearchPageEvents.omniboxAnalytics, meta);
|
|
372
|
-
|
|
387
|
+
expectSearchEventToMatchDescription(built.description, SearchPageEvents.omniboxAnalytics, meta);
|
|
373
388
|
});
|
|
374
389
|
|
|
375
390
|
it('should send proper payload for #logOmniboxFromLink', async () => {
|
|
@@ -395,7 +410,7 @@ describe('SearchPageClient', () => {
|
|
|
395
410
|
const built = await client.makeOmniboxFromLink(meta);
|
|
396
411
|
await built.log({searchUID: provider.getSearchUID()});
|
|
397
412
|
expectMatchPayload(SearchPageEvents.omniboxFromLink, meta);
|
|
398
|
-
|
|
413
|
+
expectSearchEventToMatchDescription(built.description, SearchPageEvents.omniboxFromLink, meta);
|
|
399
414
|
});
|
|
400
415
|
|
|
401
416
|
it('should send proper payload for #logSearchFromLink', async () => {
|
|
@@ -407,7 +422,7 @@ describe('SearchPageClient', () => {
|
|
|
407
422
|
const built = await client.makeSearchFromLink();
|
|
408
423
|
await built.log({searchUID: provider.getSearchUID()});
|
|
409
424
|
expectMatchPayload(SearchPageEvents.searchFromLink);
|
|
410
|
-
|
|
425
|
+
expectSearchEventToMatchDescription(built.description, SearchPageEvents.searchFromLink);
|
|
411
426
|
});
|
|
412
427
|
|
|
413
428
|
it('should send proper payload for #logTriggerNotify', async () => {
|
|
@@ -485,7 +500,7 @@ describe('SearchPageClient', () => {
|
|
|
485
500
|
const built = await client.makeUndoTriggerQuery(meta);
|
|
486
501
|
await built.log({searchUID: provider.getSearchUID()});
|
|
487
502
|
expectMatchPayload(SearchPageEvents.undoTriggerQuery, meta);
|
|
488
|
-
|
|
503
|
+
expectSearchEventToMatchDescription(built.description, SearchPageEvents.undoTriggerQuery, meta);
|
|
489
504
|
});
|
|
490
505
|
|
|
491
506
|
it('should send proper payload for #logTriggerRedirect', async () => {
|
|
@@ -592,7 +607,7 @@ describe('SearchPageClient', () => {
|
|
|
592
607
|
const built = await client.makeStaticFilterClearAll({staticFilterId});
|
|
593
608
|
await built.log({searchUID: provider.getSearchUID()});
|
|
594
609
|
expectMatchPayload(SearchPageEvents.staticFilterClearAll, {staticFilterId});
|
|
595
|
-
|
|
610
|
+
expectSearchEventToMatchDescription(built.description, SearchPageEvents.staticFilterClearAll, {staticFilterId});
|
|
596
611
|
});
|
|
597
612
|
|
|
598
613
|
it('should send the proper payload for #logStaticFilterSelect', async () => {
|
|
@@ -620,7 +635,7 @@ describe('SearchPageClient', () => {
|
|
|
620
635
|
await built.log({searchUID: provider.getSearchUID()});
|
|
621
636
|
|
|
622
637
|
expectMatchPayload(SearchPageEvents.staticFilterSelect, meta);
|
|
623
|
-
|
|
638
|
+
expectSearchEventToMatchDescription(built.description, SearchPageEvents.staticFilterSelect, meta);
|
|
624
639
|
});
|
|
625
640
|
|
|
626
641
|
it('should send the proper payload for #logStaticFilterDeselect', async () => {
|
|
@@ -647,7 +662,7 @@ describe('SearchPageClient', () => {
|
|
|
647
662
|
const built = await client.makeStaticFilterDeselect(meta);
|
|
648
663
|
await built.log({searchUID: provider.getSearchUID()});
|
|
649
664
|
expectMatchPayload(SearchPageEvents.staticFilterDeselect, meta);
|
|
650
|
-
|
|
665
|
+
expectSearchEventToMatchDescription(built.description, SearchPageEvents.staticFilterDeselect, meta);
|
|
651
666
|
});
|
|
652
667
|
|
|
653
668
|
it('should send proper payload for #logFacetSearch', async () => {
|
|
@@ -669,7 +684,7 @@ describe('SearchPageClient', () => {
|
|
|
669
684
|
const built = await client.makeFacetSearch(meta);
|
|
670
685
|
await built.log({searchUID: provider.getSearchUID()});
|
|
671
686
|
expectMatchPayload(SearchPageEvents.facetSearch, meta);
|
|
672
|
-
|
|
687
|
+
expectSearchEventToMatchDescription(built.description, SearchPageEvents.facetSearch, meta);
|
|
673
688
|
});
|
|
674
689
|
|
|
675
690
|
it('should send proper payload for #logFacetSelect', async () => {
|
|
@@ -694,7 +709,7 @@ describe('SearchPageClient', () => {
|
|
|
694
709
|
const built = await client.makeFacetSelect(meta);
|
|
695
710
|
await built.log({searchUID: provider.getSearchUID()});
|
|
696
711
|
expectMatchPayload(SearchPageEvents.facetSelect, meta);
|
|
697
|
-
|
|
712
|
+
expectSearchEventToMatchDescription(built.description, SearchPageEvents.facetSelect, meta);
|
|
698
713
|
});
|
|
699
714
|
|
|
700
715
|
it('should send proper payload for #logFacetDeselect', async () => {
|
|
@@ -720,7 +735,7 @@ describe('SearchPageClient', () => {
|
|
|
720
735
|
const built = await client.makeFacetDeselect(meta);
|
|
721
736
|
await built.log({searchUID: provider.getSearchUID()});
|
|
722
737
|
expectMatchPayload(SearchPageEvents.facetDeselect, meta);
|
|
723
|
-
|
|
738
|
+
expectSearchEventToMatchDescription(built.description, SearchPageEvents.facetDeselect, meta);
|
|
724
739
|
});
|
|
725
740
|
|
|
726
741
|
it('should send proper payload for #logFacetExclude', async () => {
|
|
@@ -744,7 +759,7 @@ describe('SearchPageClient', () => {
|
|
|
744
759
|
const built = await client.makeFacetExclude(meta);
|
|
745
760
|
await built.log({searchUID: provider.getSearchUID()});
|
|
746
761
|
expectMatchPayload(SearchPageEvents.facetExclude, meta);
|
|
747
|
-
|
|
762
|
+
expectSearchEventToMatchDescription(built.description, SearchPageEvents.facetExclude, meta);
|
|
748
763
|
});
|
|
749
764
|
|
|
750
765
|
it('should send proper payload for #logFacetUnexclude', async () => {
|
|
@@ -768,7 +783,7 @@ describe('SearchPageClient', () => {
|
|
|
768
783
|
const built = await client.makeFacetUnexclude(meta);
|
|
769
784
|
await built.log({searchUID: provider.getSearchUID()});
|
|
770
785
|
expectMatchPayload(SearchPageEvents.facetUnexclude, meta);
|
|
771
|
-
|
|
786
|
+
expectSearchEventToMatchDescription(built.description, SearchPageEvents.facetUnexclude, meta);
|
|
772
787
|
});
|
|
773
788
|
|
|
774
789
|
it('should send proper payload for #logFacetSelectAll', async () => {
|
|
@@ -790,7 +805,7 @@ describe('SearchPageClient', () => {
|
|
|
790
805
|
const built = await client.makeFacetSelectAll(meta);
|
|
791
806
|
await built.log({searchUID: provider.getSearchUID()});
|
|
792
807
|
expectMatchPayload(SearchPageEvents.facetSelectAll, meta);
|
|
793
|
-
|
|
808
|
+
expectSearchEventToMatchDescription(built.description, SearchPageEvents.facetSelectAll, meta);
|
|
794
809
|
});
|
|
795
810
|
|
|
796
811
|
it('should send proper payload for #logFacetUpdateSort', async () => {
|
|
@@ -814,7 +829,7 @@ describe('SearchPageClient', () => {
|
|
|
814
829
|
const built = await client.makeFacetUpdateSort(meta);
|
|
815
830
|
await built.log({searchUID: provider.getSearchUID()});
|
|
816
831
|
expectMatchPayload(SearchPageEvents.facetUpdateSort, meta);
|
|
817
|
-
|
|
832
|
+
expectSearchEventToMatchDescription(built.description, SearchPageEvents.facetUpdateSort, meta);
|
|
818
833
|
});
|
|
819
834
|
|
|
820
835
|
it('should send proper payload for #logFacetShowMore', async () => {
|
|
@@ -935,7 +950,7 @@ describe('SearchPageClient', () => {
|
|
|
935
950
|
const built = await client.makeRecommendationInterfaceLoad();
|
|
936
951
|
await built.log({searchUID: provider.getSearchUID()});
|
|
937
952
|
expectMatchPayload(SearchPageEvents.recommendationInterfaceLoad);
|
|
938
|
-
|
|
953
|
+
expectSearchEventToMatchDescription(built.description, SearchPageEvents.recommendationInterfaceLoad);
|
|
939
954
|
});
|
|
940
955
|
|
|
941
956
|
it('should send proper payload for #logRecommendation', async () => {
|
|
@@ -1307,7 +1322,7 @@ describe('SearchPageClient', () => {
|
|
|
1307
1322
|
await built.log({searchUID: provider.getSearchUID()});
|
|
1308
1323
|
|
|
1309
1324
|
expectMatchPayload(SearchPageEvents.recentQueryClick);
|
|
1310
|
-
|
|
1325
|
+
expectSearchEventToMatchDescription(built.description, SearchPageEvents.recentQueryClick);
|
|
1311
1326
|
});
|
|
1312
1327
|
|
|
1313
1328
|
it('should send proper payload for #logClearRecentQueries', async () => {
|
|
@@ -1356,7 +1371,7 @@ describe('SearchPageClient', () => {
|
|
|
1356
1371
|
await built.log({searchUID: provider.getSearchUID()});
|
|
1357
1372
|
|
|
1358
1373
|
expectMatchPayload(SearchPageEvents.noResultsBack);
|
|
1359
|
-
|
|
1374
|
+
expectSearchEventToMatchDescription(built.description, SearchPageEvents.noResultsBack);
|
|
1360
1375
|
});
|
|
1361
1376
|
|
|
1362
1377
|
it('should send proper payload for #logClearRecentResults', async () => {
|
|
@@ -1445,13 +1460,21 @@ describe('SearchPageClient', () => {
|
|
|
1445
1460
|
});
|
|
1446
1461
|
|
|
1447
1462
|
it('should send proper payload for #logOpenGeneratedAnswerSource', async () => {
|
|
1448
|
-
const meta = {
|
|
1463
|
+
const meta = {
|
|
1464
|
+
generativeQuestionAnsweringId: fakeStreamId,
|
|
1465
|
+
citationId: 'some-document-id',
|
|
1466
|
+
permanentId: 'perm-id',
|
|
1467
|
+
};
|
|
1449
1468
|
await client.logOpenGeneratedAnswerSource(meta);
|
|
1450
1469
|
expectMatchCustomEventPayload(SearchPageEvents.openGeneratedAnswerSource, meta);
|
|
1451
1470
|
});
|
|
1452
1471
|
|
|
1453
1472
|
it('should send proper payload for #makeOpenGeneratedAnswerSource', async () => {
|
|
1454
|
-
const meta = {
|
|
1473
|
+
const meta = {
|
|
1474
|
+
generativeQuestionAnsweringId: fakeStreamId,
|
|
1475
|
+
citationId: 'some-document-id',
|
|
1476
|
+
permanentId: 'perm-id',
|
|
1477
|
+
};
|
|
1455
1478
|
const built = await client.makeOpenGeneratedAnswerSource(meta);
|
|
1456
1479
|
await built.log({searchUID: provider.getSearchUID()});
|
|
1457
1480
|
expectMatchCustomEventPayload(SearchPageEvents.openGeneratedAnswerSource, meta);
|
|
@@ -1471,4 +1494,112 @@ describe('SearchPageClient', () => {
|
|
|
1471
1494
|
expectMatchCustomEventPayload(SearchPageEvents.generatedAnswerStreamEnd, meta);
|
|
1472
1495
|
expectMatchDescription(built.description, SearchPageEvents.generatedAnswerStreamEnd, meta);
|
|
1473
1496
|
});
|
|
1497
|
+
|
|
1498
|
+
it('should send proper payload for #logGeneratedAnswerSourceHover', async () => {
|
|
1499
|
+
const meta = {
|
|
1500
|
+
generativeQuestionAnsweringId: fakeStreamId,
|
|
1501
|
+
citationId: 'some-document-id',
|
|
1502
|
+
permanentId: 'perm-id',
|
|
1503
|
+
citationHoverTimeMs: 100,
|
|
1504
|
+
};
|
|
1505
|
+
await client.logGeneratedAnswerSourceHover(meta);
|
|
1506
|
+
expectMatchCustomEventPayload(SearchPageEvents.generatedAnswerSourceHover, meta);
|
|
1507
|
+
});
|
|
1508
|
+
|
|
1509
|
+
it('should send proper payload for #makeGeneratedAnswerSourceHover', async () => {
|
|
1510
|
+
const meta = {
|
|
1511
|
+
generativeQuestionAnsweringId: fakeStreamId,
|
|
1512
|
+
citationId: 'some-document-id',
|
|
1513
|
+
permanentId: 'perm-id',
|
|
1514
|
+
citationHoverTimeMs: 100,
|
|
1515
|
+
};
|
|
1516
|
+
const built = await client.makeGeneratedAnswerSourceHover(meta);
|
|
1517
|
+
await built.log({searchUID: provider.getSearchUID()});
|
|
1518
|
+
expectMatchCustomEventPayload(SearchPageEvents.generatedAnswerSourceHover, meta);
|
|
1519
|
+
expectMatchDescription(built.description, SearchPageEvents.generatedAnswerSourceHover, meta);
|
|
1520
|
+
});
|
|
1521
|
+
|
|
1522
|
+
it('should send proper payload for #logGeneratedAnswerCopyToClipboard', async () => {
|
|
1523
|
+
const meta = {generativeQuestionAnsweringId: fakeStreamId};
|
|
1524
|
+
await client.logGeneratedAnswerCopyToClipboard(meta);
|
|
1525
|
+
expectMatchCustomEventPayload(SearchPageEvents.generatedAnswerCopyToClipboard, meta);
|
|
1526
|
+
});
|
|
1527
|
+
|
|
1528
|
+
it('should send proper payload for #makeGeneratedAnswerCopyToClipboard', async () => {
|
|
1529
|
+
const meta = {generativeQuestionAnsweringId: fakeStreamId};
|
|
1530
|
+
const built = await client.makeGeneratedAnswerCopyToClipboard(meta);
|
|
1531
|
+
await built.log({searchUID: provider.getSearchUID()});
|
|
1532
|
+
expectMatchCustomEventPayload(SearchPageEvents.generatedAnswerCopyToClipboard, meta);
|
|
1533
|
+
expectMatchDescription(built.description, SearchPageEvents.generatedAnswerCopyToClipboard, meta);
|
|
1534
|
+
});
|
|
1535
|
+
|
|
1536
|
+
it('should send proper payload for #logGeneratedAnswerHideAnswers', async () => {
|
|
1537
|
+
const meta = {generativeQuestionAnsweringId: fakeStreamId};
|
|
1538
|
+
await client.logGeneratedAnswerHideAnswers(meta);
|
|
1539
|
+
expectMatchCustomEventPayload(SearchPageEvents.generatedAnswerHideAnswers, meta);
|
|
1540
|
+
});
|
|
1541
|
+
|
|
1542
|
+
it('should send proper payload for #makeGeneratedAnswerHideAnswers', async () => {
|
|
1543
|
+
const meta = {generativeQuestionAnsweringId: fakeStreamId};
|
|
1544
|
+
const built = await client.makeGeneratedAnswerHideAnswers(meta);
|
|
1545
|
+
await built.log({searchUID: provider.getSearchUID()});
|
|
1546
|
+
expectMatchCustomEventPayload(SearchPageEvents.generatedAnswerHideAnswers, meta);
|
|
1547
|
+
expectMatchDescription(built.description, SearchPageEvents.generatedAnswerHideAnswers, meta);
|
|
1548
|
+
});
|
|
1549
|
+
|
|
1550
|
+
it('should send proper payload for #logGeneratedAnswerShowAnswers', async () => {
|
|
1551
|
+
const meta = {generativeQuestionAnsweringId: fakeStreamId};
|
|
1552
|
+
await client.logGeneratedAnswerShowAnswers(meta);
|
|
1553
|
+
expectMatchCustomEventPayload(SearchPageEvents.generatedAnswerShowAnswers, meta);
|
|
1554
|
+
});
|
|
1555
|
+
|
|
1556
|
+
it('should send proper payload for #makeGeneratedAnswerShowAnswers', async () => {
|
|
1557
|
+
const meta = {generativeQuestionAnsweringId: fakeStreamId};
|
|
1558
|
+
const built = await client.makeGeneratedAnswerShowAnswers(meta);
|
|
1559
|
+
await built.log({searchUID: provider.getSearchUID()});
|
|
1560
|
+
expectMatchCustomEventPayload(SearchPageEvents.generatedAnswerShowAnswers, meta);
|
|
1561
|
+
expectMatchDescription(built.description, SearchPageEvents.generatedAnswerShowAnswers, meta);
|
|
1562
|
+
});
|
|
1563
|
+
|
|
1564
|
+
it('should send proper payload for #logGenerativeQuestionFeedbackSubmit', async () => {
|
|
1565
|
+
const meta = {
|
|
1566
|
+
generativeQuestionAnsweringId: fakeStreamId,
|
|
1567
|
+
reason: <GeneratedAnswerFeedbackReason>'other',
|
|
1568
|
+
details: 'a few additional details',
|
|
1569
|
+
};
|
|
1570
|
+
await client.logGenerativeQuestionFeedbackSubmit(meta);
|
|
1571
|
+
expectMatchCustomEventPayload(SearchPageEvents.generativeQuestionFeedbackSubmit, meta);
|
|
1572
|
+
});
|
|
1573
|
+
|
|
1574
|
+
it('should send proper payload for #makeGenerativeQuestionFeedbackSubmit', async () => {
|
|
1575
|
+
const meta = {
|
|
1576
|
+
generativeQuestionAnsweringId: fakeStreamId,
|
|
1577
|
+
reason: <GeneratedAnswerFeedbackReason>'other',
|
|
1578
|
+
details: 'a few additional details',
|
|
1579
|
+
};
|
|
1580
|
+
const built = await client.makeGenerativeQuestionFeedbackSubmit(meta);
|
|
1581
|
+
await built.log({searchUID: provider.getSearchUID()});
|
|
1582
|
+
expectMatchCustomEventPayload(SearchPageEvents.generativeQuestionFeedbackSubmit, meta);
|
|
1583
|
+
expectMatchDescription(built.description, SearchPageEvents.generativeQuestionFeedbackSubmit, meta);
|
|
1584
|
+
});
|
|
1585
|
+
|
|
1586
|
+
it('should send proper payload for #logRephraseGeneratedAnswer', async () => {
|
|
1587
|
+
const meta = {
|
|
1588
|
+
generativeQuestionAnsweringId: fakeStreamId,
|
|
1589
|
+
rephraseFormat: <GeneratedAnswerRephraseFormat>'step',
|
|
1590
|
+
};
|
|
1591
|
+
await client.logRephraseGeneratedAnswer(meta);
|
|
1592
|
+
expectMatchPayload(SearchPageEvents.rephraseGeneratedAnswer, meta);
|
|
1593
|
+
});
|
|
1594
|
+
|
|
1595
|
+
it('should send proper payload for #makeRephraseGeneratedAnswer', async () => {
|
|
1596
|
+
const meta = {
|
|
1597
|
+
generativeQuestionAnsweringId: fakeStreamId,
|
|
1598
|
+
rephraseFormat: <GeneratedAnswerRephraseFormat>'step',
|
|
1599
|
+
};
|
|
1600
|
+
const built = await client.makeRephraseGeneratedAnswer(meta);
|
|
1601
|
+
await built.log({searchUID: provider.getSearchUID()});
|
|
1602
|
+
expectMatchPayload(SearchPageEvents.rephraseGeneratedAnswer, meta);
|
|
1603
|
+
expectSearchEventToMatchDescription(built.description, SearchPageEvents.rephraseGeneratedAnswer, meta);
|
|
1604
|
+
});
|
|
1474
1605
|
});
|
|
@@ -39,6 +39,9 @@ import {
|
|
|
39
39
|
GeneratedAnswerFeedbackMeta,
|
|
40
40
|
GeneratedAnswerCitationMeta,
|
|
41
41
|
GeneratedAnswerStreamEndMeta,
|
|
42
|
+
GeneratedAnswerSourceHoverMeta,
|
|
43
|
+
GeneratedAnswerBaseMeta,
|
|
44
|
+
GeneratedAnswerRephraseMeta,
|
|
42
45
|
} from './searchPageEvents';
|
|
43
46
|
import {NoopAnalytics} from '../client/noopAnalytics';
|
|
44
47
|
import {formatOmniboxMetadata} from '../formatting/format-omnibox-metadata';
|
|
@@ -58,6 +61,7 @@ export interface SearchPageClientProvider {
|
|
|
58
61
|
getFacetState?: () => FacetStateMetadata[];
|
|
59
62
|
getSplitTestRunName?: () => string | undefined;
|
|
60
63
|
getSplitTestRunVersion?: () => string | undefined;
|
|
64
|
+
getGeneratedAnswerMetadata?: () => Record<string, any>;
|
|
61
65
|
}
|
|
62
66
|
|
|
63
67
|
export interface SearchPageClientOptions extends ClientOptions {
|
|
@@ -841,7 +845,7 @@ export class CoveoSearchPageClient {
|
|
|
841
845
|
metadata?: Record<string, any>
|
|
842
846
|
): Promise<PreparedSearchEventRequest> {
|
|
843
847
|
return {
|
|
844
|
-
...(await this.getBaseEventRequest(metadata)),
|
|
848
|
+
...(await this.getBaseEventRequest({...metadata, ...this.provider.getGeneratedAnswerMetadata?.()})),
|
|
845
849
|
...this.provider.getSearchEventRequestPayload(),
|
|
846
850
|
queryPipeline: this.provider.getPipeline(),
|
|
847
851
|
actionCause: event,
|
|
@@ -885,19 +889,19 @@ export class CoveoSearchPageClient {
|
|
|
885
889
|
};
|
|
886
890
|
}
|
|
887
891
|
|
|
888
|
-
public makeLikeGeneratedAnswer(metadata:
|
|
892
|
+
public makeLikeGeneratedAnswer(metadata: GeneratedAnswerBaseMeta) {
|
|
889
893
|
return this.makeCustomEvent(SearchPageEvents.likeGeneratedAnswer, metadata);
|
|
890
894
|
}
|
|
891
895
|
|
|
892
|
-
public async logLikeGeneratedAnswer(metadata:
|
|
896
|
+
public async logLikeGeneratedAnswer(metadata: GeneratedAnswerBaseMeta) {
|
|
893
897
|
return (await this.makeLikeGeneratedAnswer(metadata)).log({searchUID: this.provider.getSearchUID()});
|
|
894
898
|
}
|
|
895
899
|
|
|
896
|
-
public makeDislikeGeneratedAnswer(metadata:
|
|
900
|
+
public makeDislikeGeneratedAnswer(metadata: GeneratedAnswerBaseMeta) {
|
|
897
901
|
return this.makeCustomEvent(SearchPageEvents.dislikeGeneratedAnswer, metadata);
|
|
898
902
|
}
|
|
899
903
|
|
|
900
|
-
public async logDislikeGeneratedAnswer(metadata:
|
|
904
|
+
public async logDislikeGeneratedAnswer(metadata: GeneratedAnswerBaseMeta) {
|
|
901
905
|
return (await this.makeDislikeGeneratedAnswer(metadata)).log({searchUID: this.provider.getSearchUID()});
|
|
902
906
|
}
|
|
903
907
|
|
|
@@ -911,6 +915,64 @@ export class CoveoSearchPageClient {
|
|
|
911
915
|
});
|
|
912
916
|
}
|
|
913
917
|
|
|
918
|
+
public makeGeneratedAnswerSourceHover(metadata: GeneratedAnswerSourceHoverMeta) {
|
|
919
|
+
return this.makeCustomEvent(SearchPageEvents.generatedAnswerSourceHover, metadata);
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
public async logGeneratedAnswerSourceHover(metadata: GeneratedAnswerSourceHoverMeta) {
|
|
923
|
+
return (await this.makeGeneratedAnswerSourceHover(metadata)).log({
|
|
924
|
+
searchUID: this.provider.getSearchUID(),
|
|
925
|
+
});
|
|
926
|
+
}
|
|
927
|
+
|
|
928
|
+
public makeGeneratedAnswerCopyToClipboard(metadata: GeneratedAnswerBaseMeta) {
|
|
929
|
+
return this.makeCustomEvent(SearchPageEvents.generatedAnswerCopyToClipboard, metadata);
|
|
930
|
+
}
|
|
931
|
+
|
|
932
|
+
public async logGeneratedAnswerCopyToClipboard(metadata: GeneratedAnswerBaseMeta) {
|
|
933
|
+
return (await this.makeGeneratedAnswerCopyToClipboard(metadata)).log({
|
|
934
|
+
searchUID: this.provider.getSearchUID(),
|
|
935
|
+
});
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
public makeGeneratedAnswerHideAnswers(metadata: GeneratedAnswerBaseMeta) {
|
|
939
|
+
return this.makeCustomEvent(SearchPageEvents.generatedAnswerHideAnswers, metadata);
|
|
940
|
+
}
|
|
941
|
+
|
|
942
|
+
public async logGeneratedAnswerHideAnswers(metadata: GeneratedAnswerBaseMeta) {
|
|
943
|
+
return (await this.makeGeneratedAnswerHideAnswers(metadata)).log({
|
|
944
|
+
searchUID: this.provider.getSearchUID(),
|
|
945
|
+
});
|
|
946
|
+
}
|
|
947
|
+
|
|
948
|
+
public makeGeneratedAnswerShowAnswers(metadata: GeneratedAnswerBaseMeta) {
|
|
949
|
+
return this.makeCustomEvent(SearchPageEvents.generatedAnswerShowAnswers, metadata);
|
|
950
|
+
}
|
|
951
|
+
|
|
952
|
+
public async logGeneratedAnswerShowAnswers(metadata: GeneratedAnswerBaseMeta) {
|
|
953
|
+
return (await this.makeGeneratedAnswerShowAnswers(metadata)).log({
|
|
954
|
+
searchUID: this.provider.getSearchUID(),
|
|
955
|
+
});
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
public makeGenerativeQuestionFeedbackSubmit(meta: GeneratedAnswerFeedbackMeta) {
|
|
959
|
+
return this.makeCustomEvent(SearchPageEvents.generativeQuestionFeedbackSubmit, meta);
|
|
960
|
+
}
|
|
961
|
+
|
|
962
|
+
public async logGenerativeQuestionFeedbackSubmit(meta: GeneratedAnswerFeedbackMeta) {
|
|
963
|
+
return (await this.makeGenerativeQuestionFeedbackSubmit(meta)).log({
|
|
964
|
+
searchUID: this.provider.getSearchUID(),
|
|
965
|
+
});
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
public makeRephraseGeneratedAnswer(meta: GeneratedAnswerRephraseMeta) {
|
|
969
|
+
return this.makeSearchEvent(SearchPageEvents.rephraseGeneratedAnswer, meta);
|
|
970
|
+
}
|
|
971
|
+
|
|
972
|
+
public async logRephraseGeneratedAnswer(meta: GeneratedAnswerRephraseMeta) {
|
|
973
|
+
return (await this.makeRephraseGeneratedAnswer(meta)).log({searchUID: this.provider.getSearchUID()});
|
|
974
|
+
}
|
|
975
|
+
|
|
914
976
|
public makeRetryGeneratedAnswer() {
|
|
915
977
|
return this.makeSearchEvent(SearchPageEvents.retryGeneratedAnswer);
|
|
916
978
|
}
|
|
@@ -314,6 +314,30 @@ export enum SearchPageEvents {
|
|
|
314
314
|
* Identified the custom event that gets logged when a generated answer stream is completed.
|
|
315
315
|
*/
|
|
316
316
|
generatedAnswerStreamEnd = 'generatedAnswerStreamEnd',
|
|
317
|
+
/**
|
|
318
|
+
* Identifies the custom event that gets logged when a user hovers over a generated answer citation.
|
|
319
|
+
*/
|
|
320
|
+
generatedAnswerSourceHover = 'generatedAnswerSourceHover',
|
|
321
|
+
/**
|
|
322
|
+
* Identifies the custom event that gets logged when a user clicks the copy to clip board button of a generated answer.
|
|
323
|
+
*/
|
|
324
|
+
generatedAnswerCopyToClipboard = 'generatedAnswerCopyToClipboard',
|
|
325
|
+
/**
|
|
326
|
+
* Identifies the custom event that gets logged when a user deactivates the genQA feature.
|
|
327
|
+
*/
|
|
328
|
+
generatedAnswerHideAnswers = 'generatedAnswerHideAnswers',
|
|
329
|
+
/**
|
|
330
|
+
* Identifies the custom event that gets logged when a user activates the genQA feature.
|
|
331
|
+
*/
|
|
332
|
+
generatedAnswerShowAnswers = 'generatedAnswerShowAnswers',
|
|
333
|
+
/**
|
|
334
|
+
* Identifies the custom event that gets logged when a user submits a feedback of a generated answer.
|
|
335
|
+
*/
|
|
336
|
+
generativeQuestionFeedbackSubmit = 'generativeQuestionFeedbackSubmit',
|
|
337
|
+
/**
|
|
338
|
+
* Identifies the search event that gets logged when a user clicks the rephrase button in a generated answer.
|
|
339
|
+
*/
|
|
340
|
+
rephraseGeneratedAnswer = 'rephraseGeneratedAnswer',
|
|
317
341
|
}
|
|
318
342
|
|
|
319
343
|
export const CustomEventsTypes: Partial<Record<SearchPageEvents | InsightEvents, string>> = {
|
|
@@ -360,6 +384,11 @@ export const CustomEventsTypes: Partial<Record<SearchPageEvents | InsightEvents,
|
|
|
360
384
|
[SearchPageEvents.dislikeGeneratedAnswer]: 'generatedAnswer',
|
|
361
385
|
[SearchPageEvents.openGeneratedAnswerSource]: 'generatedAnswer',
|
|
362
386
|
[SearchPageEvents.generatedAnswerStreamEnd]: 'generatedAnswer',
|
|
387
|
+
[SearchPageEvents.generatedAnswerSourceHover]: 'generatedAnswer',
|
|
388
|
+
[SearchPageEvents.generatedAnswerCopyToClipboard]: 'generatedAnswer',
|
|
389
|
+
[SearchPageEvents.generatedAnswerHideAnswers]: 'generatedAnswer',
|
|
390
|
+
[SearchPageEvents.generatedAnswerShowAnswers]: 'generatedAnswer',
|
|
391
|
+
[SearchPageEvents.generativeQuestionFeedbackSubmit]: 'generatedAnswer',
|
|
363
392
|
};
|
|
364
393
|
|
|
365
394
|
export interface StaticFilterMetadata {
|
|
@@ -494,12 +523,10 @@ export interface SmartSnippetDocumentIdentifier {
|
|
|
494
523
|
|
|
495
524
|
export type PartialDocumentInformation = Omit<DocumentInformation, 'actionCause' | 'searchQueryUid'>;
|
|
496
525
|
|
|
497
|
-
interface GeneratedAnswerBaseMeta {
|
|
526
|
+
export interface GeneratedAnswerBaseMeta {
|
|
498
527
|
generativeQuestionAnsweringId: string;
|
|
499
528
|
}
|
|
500
529
|
|
|
501
|
-
export interface GeneratedAnswerFeedbackMeta extends GeneratedAnswerBaseMeta {}
|
|
502
|
-
|
|
503
530
|
export interface GeneratedAnswerStreamEndMeta extends GeneratedAnswerBaseMeta {
|
|
504
531
|
answerGenerated: boolean;
|
|
505
532
|
}
|
|
@@ -507,5 +534,22 @@ export interface GeneratedAnswerStreamEndMeta extends GeneratedAnswerBaseMeta {
|
|
|
507
534
|
export interface GeneratedAnswerCitationMeta {
|
|
508
535
|
generativeQuestionAnsweringId: string;
|
|
509
536
|
permanentId: string;
|
|
510
|
-
|
|
537
|
+
citationId: string;
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
export type GeneratedAnswerFeedbackReason = 'irrelevant' | 'notAccurate' | 'outOfDate' | 'harmful' | 'other';
|
|
541
|
+
|
|
542
|
+
export type GeneratedAnswerRephraseFormat = 'step' | 'bullet' | 'concise' | 'default';
|
|
543
|
+
|
|
544
|
+
export interface GeneratedAnswerSourceHoverMeta extends GeneratedAnswerCitationMeta {
|
|
545
|
+
citationHoverTimeMs: number;
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
export interface GeneratedAnswerRephraseMeta extends GeneratedAnswerBaseMeta {
|
|
549
|
+
rephraseFormat: GeneratedAnswerRephraseFormat;
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
export interface GeneratedAnswerFeedbackMeta extends GeneratedAnswerBaseMeta {
|
|
553
|
+
reason: GeneratedAnswerFeedbackReason;
|
|
554
|
+
details?: string;
|
|
511
555
|
}
|