coveo.analytics 2.28.18 → 2.28.20

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.
@@ -3,6 +3,8 @@ import CoveoAnalyticsClient from '../client/analytics';
3
3
  import {NoopAnalytics} from '../client/noopAnalytics';
4
4
  import {
5
5
  CustomEventsTypes,
6
+ GeneratedAnswerFeedbackReason,
7
+ GeneratedAnswerRephraseFormat,
6
8
  PartialDocumentInformation,
7
9
  SearchPageEvents,
8
10
  StaticFilterToggleValueMetadata,
@@ -63,6 +65,7 @@ describe('InsightClient', () => {
63
65
  getLanguage: () => 'en',
64
66
  getFacetState: () => fakeFacetState,
65
67
  getIsAnonymous: () => false,
68
+ getGeneratedAnswerMetadata: () => ({genratedAnswerMetadata: 'foo'}),
66
69
  };
67
70
 
68
71
  const initClient = () => {
@@ -78,7 +81,7 @@ describe('InsightClient', () => {
78
81
 
79
82
  const expectMatchPayload = (actionCause: SearchPageEvents | InsightEvents, meta = {}) => {
80
83
  const body: string = lastCallBody(fetchMock);
81
- const customData = {foo: 'bar', ...meta};
84
+ const customData = {foo: 'bar', genratedAnswerMetadata: 'foo', ...meta};
82
85
  expect(JSON.parse(body)).toMatchObject({
83
86
  queryText: 'queryText',
84
87
  responseTime: 123,
@@ -509,6 +512,116 @@ describe('InsightClient', () => {
509
512
  await client.logShowLessFoldedResults();
510
513
  expectMatchCustomEventPayload(SearchPageEvents.showLessFoldedResults);
511
514
  });
515
+
516
+ it('should send proper payload for #likeGeneratedAnswer', async () => {
517
+ const exampleGeneratedAnswerMetadata = {
518
+ generativeQuestionAnsweringId: '123',
519
+ };
520
+
521
+ await client.logLikeGeneratedAnswer(exampleGeneratedAnswerMetadata);
522
+ expectMatchCustomEventPayload(SearchPageEvents.likeGeneratedAnswer, exampleGeneratedAnswerMetadata);
523
+ });
524
+
525
+ it('should send proper payload for #dislikeGeneratedAnswer', async () => {
526
+ const exampleGeneratedAnswerMetadata = {
527
+ generativeQuestionAnsweringId: '123',
528
+ };
529
+
530
+ await client.logDislikeGeneratedAnswer(exampleGeneratedAnswerMetadata);
531
+ expectMatchCustomEventPayload(SearchPageEvents.dislikeGeneratedAnswer, exampleGeneratedAnswerMetadata);
532
+ });
533
+
534
+ it('should send proper payload for #openGeneratedAnswerSource', async () => {
535
+ const exampleGeneratedAnswerMetadata = {
536
+ generativeQuestionAnsweringId: '123',
537
+ permanentId: 'foo',
538
+ citationId: 'bar',
539
+ };
540
+
541
+ await client.logOpenGeneratedAnswerSource(exampleGeneratedAnswerMetadata);
542
+ expectMatchCustomEventPayload(SearchPageEvents.openGeneratedAnswerSource, exampleGeneratedAnswerMetadata);
543
+ });
544
+
545
+ it('should send proper payload for #generatedAnswerSourceHover', async () => {
546
+ const exampleGeneratedAnswerMetadata = {
547
+ generativeQuestionAnsweringId: '123',
548
+ permanentId: 'foo',
549
+ citationId: 'bar',
550
+ citationHoverTimeMs: 100,
551
+ };
552
+
553
+ await client.logGeneratedAnswerSourceHover(exampleGeneratedAnswerMetadata);
554
+ expectMatchCustomEventPayload(SearchPageEvents.generatedAnswerSourceHover, exampleGeneratedAnswerMetadata);
555
+ });
556
+
557
+ it('should send proper payload for #generatedAnswerCopyToClipboard', async () => {
558
+ const exampleGeneratedAnswerMetadata = {
559
+ generativeQuestionAnsweringId: '123',
560
+ };
561
+
562
+ await client.logGeneratedAnswerCopyToClipboard(exampleGeneratedAnswerMetadata);
563
+ expectMatchCustomEventPayload(
564
+ SearchPageEvents.generatedAnswerCopyToClipboard,
565
+ exampleGeneratedAnswerMetadata
566
+ );
567
+ });
568
+
569
+ it('should send proper payload for #generatedAnswerHideAnswers', async () => {
570
+ const exampleGeneratedAnswerMetadata = {
571
+ generativeQuestionAnsweringId: '123',
572
+ };
573
+
574
+ await client.logGeneratedAnswerHideAnswers(exampleGeneratedAnswerMetadata);
575
+ expectMatchCustomEventPayload(SearchPageEvents.generatedAnswerHideAnswers, exampleGeneratedAnswerMetadata);
576
+ });
577
+
578
+ it('should send proper payload for #generatedAnswerShowAnswers', async () => {
579
+ const exampleGeneratedAnswerMetadata = {
580
+ generativeQuestionAnsweringId: '123',
581
+ };
582
+
583
+ await client.logGeneratedAnswerShowAnswers(exampleGeneratedAnswerMetadata);
584
+ expectMatchCustomEventPayload(SearchPageEvents.generatedAnswerShowAnswers, exampleGeneratedAnswerMetadata);
585
+ });
586
+
587
+ it('should send proper payload for #generatedAnswerFeedbackSubmit', async () => {
588
+ const exampleGeneratedAnswerMetadata = {
589
+ generativeQuestionAnsweringId: '123',
590
+ reason: <GeneratedAnswerFeedbackReason>'other',
591
+ details: 'foo',
592
+ };
593
+
594
+ await client.logGeneratedAnswerFeedbackSubmit(exampleGeneratedAnswerMetadata);
595
+ expectMatchCustomEventPayload(
596
+ SearchPageEvents.generatedAnswerFeedbackSubmit,
597
+ exampleGeneratedAnswerMetadata
598
+ );
599
+ });
600
+
601
+ it('should send proper payload for #rephraseGeneratedAnswer', async () => {
602
+ const exampleGeneratedAnswerMetadata = {
603
+ generativeQuestionAnsweringId: '123',
604
+ rephraseFormat: <GeneratedAnswerRephraseFormat>'step',
605
+ };
606
+
607
+ await client.logRephraseGeneratedAnswer(exampleGeneratedAnswerMetadata);
608
+ expectMatchPayload(SearchPageEvents.rephraseGeneratedAnswer, exampleGeneratedAnswerMetadata);
609
+ });
610
+
611
+ it('should send proper payload for #retryGeneratedAnswer', async () => {
612
+ await client.logRetryGeneratedAnswer();
613
+ expectMatchPayload(SearchPageEvents.retryGeneratedAnswer);
614
+ });
615
+
616
+ it('should send proper payload for #generatedAnswerStreamEnd', async () => {
617
+ const exampleGeneratedAnswerMetadata = {
618
+ generativeQuestionAnsweringId: '123',
619
+ answerGenerated: true,
620
+ };
621
+
622
+ await client.logGeneratedAnswerStreamEnd(exampleGeneratedAnswerMetadata);
623
+ expectMatchCustomEventPayload(SearchPageEvents.generatedAnswerStreamEnd, exampleGeneratedAnswerMetadata);
624
+ });
512
625
  });
513
626
 
514
627
  describe('when the case metadata is included', () => {
@@ -1119,6 +1232,154 @@ describe('InsightClient', () => {
1119
1232
  await client.logShowLessFoldedResults(baseCaseMetadata);
1120
1233
  expectMatchCustomEventPayload(SearchPageEvents.showLessFoldedResults, expectedMetadata);
1121
1234
  });
1235
+
1236
+ it('should send proper payload for #likeGeneratedAnswer', async () => {
1237
+ const exampleGeneratedAnswerMetadata = {
1238
+ generativeQuestionAnsweringId: '123',
1239
+ };
1240
+ const expectedMetadata = {
1241
+ ...exampleGeneratedAnswerMetadata,
1242
+ ...expectedBaseCaseMetadata,
1243
+ };
1244
+
1245
+ await client.logLikeGeneratedAnswer(exampleGeneratedAnswerMetadata, baseCaseMetadata);
1246
+ expectMatchCustomEventPayload(SearchPageEvents.likeGeneratedAnswer, expectedMetadata);
1247
+ });
1248
+
1249
+ it('should send proper payload for #dislikeGeneratedAnswer', async () => {
1250
+ const exampleGeneratedAnswerMetadata = {
1251
+ generativeQuestionAnsweringId: '123',
1252
+ };
1253
+ const expectedMetadata = {
1254
+ ...exampleGeneratedAnswerMetadata,
1255
+ ...expectedBaseCaseMetadata,
1256
+ };
1257
+
1258
+ await client.logDislikeGeneratedAnswer(exampleGeneratedAnswerMetadata, baseCaseMetadata);
1259
+ expectMatchCustomEventPayload(SearchPageEvents.dislikeGeneratedAnswer, expectedMetadata);
1260
+ });
1261
+
1262
+ it('should send proper payload for #openGeneratedAnswerSource', async () => {
1263
+ const exampleGeneratedAnswerMetadata = {
1264
+ generativeQuestionAnsweringId: '123',
1265
+ permanentId: 'foo',
1266
+ citationId: 'bar',
1267
+ };
1268
+ const expectedMetadata = {
1269
+ ...exampleGeneratedAnswerMetadata,
1270
+ ...expectedBaseCaseMetadata,
1271
+ };
1272
+
1273
+ await client.logOpenGeneratedAnswerSource(exampleGeneratedAnswerMetadata, baseCaseMetadata);
1274
+ expectMatchCustomEventPayload(SearchPageEvents.openGeneratedAnswerSource, expectedMetadata);
1275
+ });
1276
+
1277
+ it('should send proper payload for #generatedAnswerSourceHover', async () => {
1278
+ const exampleGeneratedAnswerMetadata = {
1279
+ generativeQuestionAnsweringId: '123',
1280
+ permanentId: 'foo',
1281
+ citationId: 'bar',
1282
+ citationHoverTimeMs: 100,
1283
+ };
1284
+ const expectedMetadata = {
1285
+ ...exampleGeneratedAnswerMetadata,
1286
+ ...expectedBaseCaseMetadata,
1287
+ };
1288
+
1289
+ await client.logGeneratedAnswerSourceHover(exampleGeneratedAnswerMetadata, baseCaseMetadata);
1290
+ expectMatchCustomEventPayload(SearchPageEvents.generatedAnswerSourceHover, expectedMetadata);
1291
+ });
1292
+
1293
+ it('should send proper payload for #generatedAnswerCopyToClipboard', async () => {
1294
+ const exampleGeneratedAnswerMetadata = {
1295
+ generativeQuestionAnsweringId: '123',
1296
+ };
1297
+ const expectedMetadata = {
1298
+ ...exampleGeneratedAnswerMetadata,
1299
+ ...expectedBaseCaseMetadata,
1300
+ };
1301
+
1302
+ await client.logGeneratedAnswerCopyToClipboard(exampleGeneratedAnswerMetadata, baseCaseMetadata);
1303
+ expectMatchCustomEventPayload(SearchPageEvents.generatedAnswerCopyToClipboard, expectedMetadata);
1304
+ });
1305
+
1306
+ it('should send proper payload for #generatedAnswerHideAnswers', async () => {
1307
+ const exampleGeneratedAnswerMetadata = {
1308
+ generativeQuestionAnsweringId: '123',
1309
+ };
1310
+ const expectedMetadata = {
1311
+ ...exampleGeneratedAnswerMetadata,
1312
+ ...expectedBaseCaseMetadata,
1313
+ };
1314
+
1315
+ await client.logGeneratedAnswerHideAnswers(exampleGeneratedAnswerMetadata, baseCaseMetadata);
1316
+ expectMatchCustomEventPayload(SearchPageEvents.generatedAnswerHideAnswers, expectedMetadata);
1317
+ });
1318
+
1319
+ it('should send proper payload for #generatedAnswerShowAnswers', async () => {
1320
+ const exampleGeneratedAnswerMetadata = {
1321
+ generativeQuestionAnsweringId: '123',
1322
+ };
1323
+ const expectedMetadata = {
1324
+ ...exampleGeneratedAnswerMetadata,
1325
+ ...expectedBaseCaseMetadata,
1326
+ };
1327
+
1328
+ await client.logGeneratedAnswerShowAnswers(exampleGeneratedAnswerMetadata, baseCaseMetadata);
1329
+ expectMatchCustomEventPayload(SearchPageEvents.generatedAnswerShowAnswers, expectedMetadata);
1330
+ });
1331
+
1332
+ it('should send proper payload for #generatedAnswerFeedbackSubmit', async () => {
1333
+ const exampleGeneratedAnswerMetadata = {
1334
+ generativeQuestionAnsweringId: '123',
1335
+ reason: <GeneratedAnswerFeedbackReason>'other',
1336
+ details: 'foo',
1337
+ };
1338
+ const expectedMetadata = {
1339
+ ...exampleGeneratedAnswerMetadata,
1340
+ ...expectedBaseCaseMetadata,
1341
+ };
1342
+
1343
+ await client.logGeneratedAnswerFeedbackSubmit(exampleGeneratedAnswerMetadata, baseCaseMetadata);
1344
+ expectMatchCustomEventPayload(SearchPageEvents.generatedAnswerFeedbackSubmit, expectedMetadata);
1345
+ });
1346
+
1347
+ it('should send proper payload for #rephraseGeneratedAnswer', async () => {
1348
+ const exampleGeneratedAnswerMetadata = {
1349
+ generativeQuestionAnsweringId: '123',
1350
+ rephraseFormat: <GeneratedAnswerRephraseFormat>'step',
1351
+ };
1352
+ const expectedMetadata = {
1353
+ ...exampleGeneratedAnswerMetadata,
1354
+ ...expectedBaseCaseMetadata,
1355
+ };
1356
+
1357
+ await client.logRephraseGeneratedAnswer(exampleGeneratedAnswerMetadata, baseCaseMetadata);
1358
+ expectMatchPayload(SearchPageEvents.rephraseGeneratedAnswer, expectedMetadata);
1359
+ });
1360
+
1361
+ it('should send proper payload for #retryGeneratedAnswer', async () => {
1362
+ const expectedMetadata = {
1363
+ ...expectedBaseCaseMetadata,
1364
+ };
1365
+
1366
+ await client.logRetryGeneratedAnswer(baseCaseMetadata);
1367
+ expectMatchPayload(SearchPageEvents.retryGeneratedAnswer, expectedMetadata);
1368
+ });
1369
+
1370
+ it('should send proper payload for #generatedAnswerStreamEnd', async () => {
1371
+ const exampleGeneratedAnswerMetadata = {
1372
+ generativeQuestionAnsweringId: '123',
1373
+ answerGenerated: true,
1374
+ };
1375
+ const expectedMetadata = {
1376
+ ...exampleGeneratedAnswerMetadata,
1377
+ ...expectedBaseCaseMetadata,
1378
+ };
1379
+
1380
+ await client.logGeneratedAnswerStreamEnd(exampleGeneratedAnswerMetadata, baseCaseMetadata);
1381
+ expectMatchCustomEventPayload(SearchPageEvents.generatedAnswerStreamEnd, expectedMetadata);
1382
+ });
1122
1383
  });
1123
1384
 
1124
1385
  it('should enable analytics tracking by default', () => {
@@ -6,6 +6,12 @@ import {
6
6
  CustomEventsTypes,
7
7
  DocumentIdentifier,
8
8
  FacetStateMetadata,
9
+ GeneratedAnswerBaseMeta,
10
+ GeneratedAnswerCitationMeta,
11
+ GeneratedAnswerFeedbackMeta,
12
+ GeneratedAnswerRephraseMeta,
13
+ GeneratedAnswerSourceHoverMeta,
14
+ GeneratedAnswerStreamEndMeta,
9
15
  PartialDocumentInformation,
10
16
  SearchPageEvents,
11
17
  SmartSnippetDocumentIdentifier,
@@ -43,6 +49,7 @@ export interface InsightClientProvider {
43
49
  getLanguage: () => string;
44
50
  getIsAnonymous: () => boolean;
45
51
  getFacetState?: () => FacetStateMetadata[];
52
+ getGeneratedAnswerMetadata?: () => Record<string, any>;
46
53
  }
47
54
 
48
55
  export interface InsightClientOptions extends ClientOptions {
@@ -476,6 +483,121 @@ export class CoveoInsightClient {
476
483
  );
477
484
  }
478
485
 
486
+ public logLikeGeneratedAnswer(generatedAnswerMetadata: GeneratedAnswerBaseMeta, metadata?: CaseMetadata) {
487
+ return this.logCustomEvent(
488
+ SearchPageEvents.likeGeneratedAnswer,
489
+ metadata
490
+ ? {...generateMetadataToSend(metadata, false), ...generatedAnswerMetadata}
491
+ : generatedAnswerMetadata
492
+ );
493
+ }
494
+
495
+ public logDislikeGeneratedAnswer(generatedAnswerMetadata: GeneratedAnswerBaseMeta, metadata?: CaseMetadata) {
496
+ return this.logCustomEvent(
497
+ SearchPageEvents.dislikeGeneratedAnswer,
498
+ metadata
499
+ ? {...generateMetadataToSend(metadata, false), ...generatedAnswerMetadata}
500
+ : generatedAnswerMetadata
501
+ );
502
+ }
503
+
504
+ public logOpenGeneratedAnswerSource(
505
+ generatedAnswerSourceMetadata: GeneratedAnswerCitationMeta,
506
+ metadata?: CaseMetadata
507
+ ) {
508
+ return this.logCustomEvent(
509
+ SearchPageEvents.openGeneratedAnswerSource,
510
+ metadata
511
+ ? {...generateMetadataToSend(metadata, false), ...generatedAnswerSourceMetadata}
512
+ : generatedAnswerSourceMetadata
513
+ );
514
+ }
515
+
516
+ public logGeneratedAnswerSourceHover(
517
+ generatedAnswerSourceMetadata: GeneratedAnswerSourceHoverMeta,
518
+ metadata?: CaseMetadata
519
+ ) {
520
+ return this.logCustomEvent(
521
+ SearchPageEvents.generatedAnswerSourceHover,
522
+ metadata
523
+ ? {...generateMetadataToSend(metadata, false), ...generatedAnswerSourceMetadata}
524
+ : generatedAnswerSourceMetadata
525
+ );
526
+ }
527
+
528
+ public logGeneratedAnswerCopyToClipboard(
529
+ generatedAnswerMetadata: GeneratedAnswerBaseMeta,
530
+ metadata?: CaseMetadata
531
+ ) {
532
+ return this.logCustomEvent(
533
+ SearchPageEvents.generatedAnswerCopyToClipboard,
534
+ metadata
535
+ ? {...generateMetadataToSend(metadata, false), ...generatedAnswerMetadata}
536
+ : generatedAnswerMetadata
537
+ );
538
+ }
539
+
540
+ public logGeneratedAnswerHideAnswers(generatedAnswerMetadata: GeneratedAnswerBaseMeta, metadata?: CaseMetadata) {
541
+ return this.logCustomEvent(
542
+ SearchPageEvents.generatedAnswerHideAnswers,
543
+ metadata
544
+ ? {...generateMetadataToSend(metadata, false), ...generatedAnswerMetadata}
545
+ : generatedAnswerMetadata
546
+ );
547
+ }
548
+
549
+ public logGeneratedAnswerShowAnswers(generatedAnswerMetadata: GeneratedAnswerBaseMeta, metadata?: CaseMetadata) {
550
+ return this.logCustomEvent(
551
+ SearchPageEvents.generatedAnswerShowAnswers,
552
+ metadata
553
+ ? {...generateMetadataToSend(metadata, false), ...generatedAnswerMetadata}
554
+ : generatedAnswerMetadata
555
+ );
556
+ }
557
+
558
+ public logGeneratedAnswerFeedbackSubmit(
559
+ generatedAnswerFeedbackMetadata: GeneratedAnswerFeedbackMeta,
560
+ metadata?: CaseMetadata
561
+ ) {
562
+ return this.logCustomEvent(
563
+ SearchPageEvents.generatedAnswerFeedbackSubmit,
564
+ metadata
565
+ ? {...generateMetadataToSend(metadata, false), ...generatedAnswerFeedbackMetadata}
566
+ : generatedAnswerFeedbackMetadata
567
+ );
568
+ }
569
+
570
+ public logRephraseGeneratedAnswer(
571
+ generatedAnswerRephraseMetadata: GeneratedAnswerRephraseMeta,
572
+ metadata?: CaseMetadata
573
+ ) {
574
+ return this.logSearchEvent(
575
+ SearchPageEvents.rephraseGeneratedAnswer,
576
+ metadata
577
+ ? {...generateMetadataToSend(metadata, false), ...generatedAnswerRephraseMetadata}
578
+ : generatedAnswerRephraseMetadata
579
+ );
580
+ }
581
+
582
+ public logRetryGeneratedAnswer(metadata?: CaseMetadata) {
583
+ return this.logSearchEvent(
584
+ SearchPageEvents.retryGeneratedAnswer,
585
+ metadata ? {...generateMetadataToSend(metadata, false)} : {}
586
+ );
587
+ }
588
+
589
+ public logGeneratedAnswerStreamEnd(
590
+ generatedAnswerStreamEndMetadata: GeneratedAnswerStreamEndMeta,
591
+ metadata?: CaseMetadata
592
+ ) {
593
+ return this.logCustomEvent(
594
+ SearchPageEvents.generatedAnswerStreamEnd,
595
+ metadata
596
+ ? {...generateMetadataToSend(metadata, false), ...generatedAnswerStreamEndMetadata}
597
+ : generatedAnswerStreamEndMetadata
598
+ );
599
+ }
600
+
479
601
  public async logCustomEvent(event: SearchPageEvents | InsightEvents, metadata?: Record<string, any>) {
480
602
  const customData = {...this.provider.getBaseMetadata(), ...metadata};
481
603
 
@@ -541,7 +663,7 @@ export class CoveoInsightClient {
541
663
  metadata?: Record<string, any>
542
664
  ): Promise<SearchEventRequest> {
543
665
  return {
544
- ...(await this.getBaseEventRequest(metadata)),
666
+ ...(await this.getBaseEventRequest({...metadata, ...this.provider.getGeneratedAnswerMetadata?.()})),
545
667
  ...this.provider.getSearchEventRequestPayload(),
546
668
  searchQueryUid: this.provider.getSearchUID(),
547
669
  queryPipeline: this.provider.getPipeline(),