coveo.analytics 2.20.24 → 2.20.26

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.
@@ -2,22 +2,22 @@ import CoveoAnalyticsClient, {AnalyticsClient, ClientOptions} from '../client/an
2
2
  import {NoopAnalytics} from '../client/noopAnalytics';
3
3
  import doNotTrack from '../donottrack';
4
4
  import {CustomEventRequest, SearchEventRequest} from '../events';
5
+ import {CustomEventsTypes, FacetStateMetadata, SearchPageEvents} from '../searchPage/searchPageEvents';
5
6
  import {
6
- CustomEventsTypes,
7
- FacetBaseMeta,
8
- FacetMetadata,
9
- FacetSortMeta,
10
- FacetStateMetadata,
11
- PagerMetadata,
12
- InterfaceChangeMetadata,
13
- QueryErrorMeta,
14
- SearchPageEvents,
15
- ResultsSortMetadata,
16
- FacetRangeMetadata,
17
- CategoryFacetMetadata,
18
- StaticFilterToggleValueMetadata,
19
- } from '../searchPage/searchPageEvents';
20
- import {ContextChangedMetadata, ExpandToFullUIMetadata, InsightEvents} from './insightEvents';
7
+ ExpandToFullUIMetadata,
8
+ InsightEvents,
9
+ InsightFacetMetadata,
10
+ InsightInterfaceChangeMetadata,
11
+ InsightStaticFilterToggleValueMetadata,
12
+ InsightFacetRangeMetadata,
13
+ InsightCategoryFacetMetadata,
14
+ CaseMetadata,
15
+ InsightFacetSortMeta,
16
+ InsightFacetBaseMeta,
17
+ InsightQueryErrorMeta,
18
+ InsightPagerMetadata,
19
+ InsightResultsSortMetadata,
20
+ } from './insightEvents';
21
21
 
22
22
  export interface InsightClientProvider {
23
23
  getSearchEventRequestPayload: () => Omit<SearchEventRequest, 'actionCause' | 'searchQueryUid'>;
@@ -37,16 +37,33 @@ export interface InsightClientOptions extends ClientOptions {
37
37
  enableAnalytics: boolean;
38
38
  }
39
39
 
40
- const extractContextFromMetadata = (meta: {caseContext: Record<string, string>}) => {
40
+ const extractContextFromMetadata = (meta: {caseContext?: Record<string, string>}) => {
41
41
  const context: Record<string, string> = {};
42
- Object.keys(meta.caseContext).forEach((contextKey) => {
43
- const keyToBeSent = `context_${contextKey}`;
44
- context[keyToBeSent] = meta.caseContext[contextKey];
45
- });
46
-
42
+ if (meta.caseContext) {
43
+ Object.keys(meta.caseContext).forEach((contextKey) => {
44
+ const value = meta.caseContext?.[contextKey];
45
+ if (value) {
46
+ const keyToBeSent = `context_${contextKey}`;
47
+ context[keyToBeSent] = value;
48
+ }
49
+ });
50
+ }
47
51
  return context;
48
52
  };
49
53
 
54
+ const generateMetadataToSend = (metadata: CaseMetadata, includeContext = true) => {
55
+ const {caseContext, caseId, caseNumber, ...metadataWithoutContext} = metadata;
56
+ const context = extractContextFromMetadata(metadata);
57
+
58
+ return {
59
+ CaseId: caseId,
60
+ CaseNumber: caseNumber,
61
+ ...metadataWithoutContext,
62
+ ...(!!context.context_Case_Subject && {CaseSubject: context.context_Case_Subject}),
63
+ ...(includeContext && context),
64
+ };
65
+ };
66
+
50
67
  export class CoveoInsightClient {
51
68
  public coveoAnalyticsClient: AnalyticsClient;
52
69
 
@@ -66,127 +83,150 @@ export class CoveoInsightClient {
66
83
  this.coveoAnalyticsClient = new CoveoAnalyticsClient(this.opts);
67
84
  }
68
85
 
69
- public logInterfaceLoad() {
86
+ public logInterfaceLoad(metadata?: CaseMetadata) {
87
+ if (metadata) {
88
+ const metadataToSend = generateMetadataToSend(metadata);
89
+ return this.logSearchEvent(SearchPageEvents.interfaceLoad, metadataToSend);
90
+ }
70
91
  return this.logSearchEvent(SearchPageEvents.interfaceLoad);
71
92
  }
72
93
 
73
- public logInterfaceChange(metadata: InterfaceChangeMetadata) {
74
- return this.logSearchEvent(SearchPageEvents.interfaceChange, metadata);
94
+ public logInterfaceChange(metadata: InsightInterfaceChangeMetadata) {
95
+ const metadataToSend = generateMetadataToSend(metadata);
96
+ return this.logSearchEvent(SearchPageEvents.interfaceChange, metadataToSend);
75
97
  }
76
98
 
77
- public logStaticFilterDeselect(meta: StaticFilterToggleValueMetadata) {
78
- return this.logSearchEvent(SearchPageEvents.staticFilterDeselect, meta);
99
+ public logStaticFilterDeselect(metadata: InsightStaticFilterToggleValueMetadata) {
100
+ const metadataToSend = generateMetadataToSend(metadata);
101
+ return this.logSearchEvent(SearchPageEvents.staticFilterDeselect, metadataToSend);
79
102
  }
80
103
 
81
- public logFetchMoreResults() {
104
+ public logFetchMoreResults(metadata?: CaseMetadata) {
105
+ if (metadata) {
106
+ const metadataToSend = generateMetadataToSend(metadata);
107
+ return this.logCustomEvent(SearchPageEvents.pagerScrolling, {...metadataToSend, type: 'getMoreResults'});
108
+ }
82
109
  return this.logCustomEvent(SearchPageEvents.pagerScrolling, {type: 'getMoreResults'});
83
110
  }
84
111
 
85
- public logBreadcrumbFacet(metadata: FacetMetadata | FacetRangeMetadata | CategoryFacetMetadata) {
86
- return this.logSearchEvent(SearchPageEvents.breadcrumbFacet, metadata);
112
+ public logBreadcrumbFacet(
113
+ metadata: InsightFacetMetadata | InsightFacetRangeMetadata | InsightCategoryFacetMetadata
114
+ ) {
115
+ const metadataToSend = generateMetadataToSend(metadata);
116
+ return this.logSearchEvent(SearchPageEvents.breadcrumbFacet, metadataToSend);
87
117
  }
88
118
 
89
- public logBreadcrumbResetAll() {
119
+ public logBreadcrumbResetAll(metadata?: CaseMetadata) {
120
+ if (metadata) {
121
+ const metadataToSend = generateMetadataToSend(metadata);
122
+ return this.logSearchEvent(SearchPageEvents.breadcrumbResetAll, metadataToSend);
123
+ }
90
124
  return this.logSearchEvent(SearchPageEvents.breadcrumbResetAll);
91
125
  }
92
126
 
93
- public logFacetSelect(meta: FacetMetadata) {
94
- return this.logSearchEvent(SearchPageEvents.facetSelect, meta);
95
- }
96
-
97
- public logFacetDeselect(meta: FacetMetadata) {
98
- return this.logSearchEvent(SearchPageEvents.facetDeselect, meta);
99
- }
100
-
101
- public logFacetUpdateSort(meta: FacetSortMeta) {
102
- return this.logSearchEvent(SearchPageEvents.facetUpdateSort, meta);
127
+ public logFacetSelect(metadata: InsightFacetMetadata) {
128
+ const metadataToSend = generateMetadataToSend(metadata);
129
+ return this.logSearchEvent(SearchPageEvents.facetSelect, metadataToSend);
103
130
  }
104
131
 
105
- public logFacetClearAll(meta: FacetBaseMeta) {
106
- return this.logSearchEvent(SearchPageEvents.facetClearAll, meta);
132
+ public logFacetDeselect(metadata: InsightFacetMetadata) {
133
+ const metadataToSend = generateMetadataToSend(metadata);
134
+ return this.logSearchEvent(SearchPageEvents.facetDeselect, metadataToSend);
107
135
  }
108
136
 
109
- public logFacetShowMore(meta: FacetBaseMeta) {
110
- return this.logCustomEvent(SearchPageEvents.facetShowMore, meta);
137
+ public logFacetUpdateSort(metadata: InsightFacetSortMeta) {
138
+ const metadataToSend = generateMetadataToSend(metadata);
139
+ return this.logSearchEvent(SearchPageEvents.facetUpdateSort, metadataToSend);
111
140
  }
112
141
 
113
- public logFacetShowLess(meta: FacetBaseMeta) {
114
- return this.logCustomEvent(SearchPageEvents.facetShowLess, meta);
142
+ public logFacetClearAll(metadata: InsightFacetBaseMeta) {
143
+ const metadataToSend = generateMetadataToSend(metadata);
144
+ return this.logSearchEvent(SearchPageEvents.facetClearAll, metadataToSend);
115
145
  }
116
146
 
117
- public logQueryError(meta: QueryErrorMeta) {
118
- return this.logCustomEvent(SearchPageEvents.queryError, meta);
147
+ public logFacetShowMore(metadata: InsightFacetBaseMeta) {
148
+ const metadataToSend = generateMetadataToSend(metadata, false);
149
+ return this.logCustomEvent(SearchPageEvents.facetShowMore, metadataToSend);
119
150
  }
120
151
 
121
- public async logCustomEvent(event: SearchPageEvents | InsightEvents, metadata?: Record<string, any>) {
122
- const customData = {...this.provider.getBaseMetadata(), ...metadata};
123
-
124
- const payload: CustomEventRequest = {
125
- ...(await this.getBaseCustomEventRequest(customData)),
126
- eventType: CustomEventsTypes[event]!,
127
- eventValue: event,
128
- };
129
-
130
- return this.coveoAnalyticsClient.sendCustomEvent(payload);
152
+ public logFacetShowLess(metadata: InsightFacetBaseMeta) {
153
+ const metadataToSend = generateMetadataToSend(metadata, false);
154
+ return this.logCustomEvent(SearchPageEvents.facetShowLess, metadataToSend);
131
155
  }
132
156
 
133
- public async logSearchEvent(event: SearchPageEvents | InsightEvents, metadata?: Record<string, any>) {
134
- return this.coveoAnalyticsClient.sendSearchEvent(await this.getBaseSearchEventRequest(event, metadata));
157
+ public logQueryError(metadata: InsightQueryErrorMeta) {
158
+ const metadataToSend = generateMetadataToSend(metadata, false);
159
+ return this.logCustomEvent(SearchPageEvents.queryError, metadataToSend);
135
160
  }
136
161
 
137
- public logPagerNumber(meta: PagerMetadata) {
138
- return this.logCustomEvent(SearchPageEvents.pagerNumber, meta);
162
+ public logPagerNumber(metadata: InsightPagerMetadata) {
163
+ const metadataToSend = generateMetadataToSend(metadata, false);
164
+ return this.logCustomEvent(SearchPageEvents.pagerNumber, metadataToSend);
139
165
  }
140
166
 
141
- public logPagerNext(meta: PagerMetadata) {
142
- return this.logCustomEvent(SearchPageEvents.pagerNext, meta);
167
+ public logPagerNext(metadata: InsightPagerMetadata) {
168
+ const metadataToSend = generateMetadataToSend(metadata, false);
169
+ return this.logCustomEvent(SearchPageEvents.pagerNext, metadataToSend);
143
170
  }
144
171
 
145
- public logPagerPrevious(meta: PagerMetadata) {
146
- return this.logCustomEvent(SearchPageEvents.pagerPrevious, meta);
172
+ public logPagerPrevious(metadata: InsightPagerMetadata) {
173
+ const metadataToSend = generateMetadataToSend(metadata, false);
174
+ return this.logCustomEvent(SearchPageEvents.pagerPrevious, metadataToSend);
147
175
  }
148
176
 
149
- public logDidYouMeanAutomatic() {
177
+ public logDidYouMeanAutomatic(metadata?: CaseMetadata) {
178
+ if (metadata) {
179
+ const metadataToSend = generateMetadataToSend(metadata);
180
+ return this.logSearchEvent(SearchPageEvents.didyoumeanAutomatic, metadataToSend);
181
+ }
150
182
  return this.logSearchEvent(SearchPageEvents.didyoumeanAutomatic);
151
183
  }
152
184
 
153
- public logDidYouMeanClick() {
185
+ public logDidYouMeanClick(metadata?: CaseMetadata) {
186
+ if (metadata) {
187
+ const metadataToSend = generateMetadataToSend(metadata);
188
+ return this.logSearchEvent(SearchPageEvents.didyoumeanClick, metadataToSend);
189
+ }
154
190
  return this.logSearchEvent(SearchPageEvents.didyoumeanClick);
155
191
  }
156
192
 
157
- public logResultsSort(metadata: ResultsSortMetadata) {
158
- return this.logSearchEvent(SearchPageEvents.resultsSort, metadata);
193
+ public logResultsSort(metadata: InsightResultsSortMetadata) {
194
+ const metadataToSend = generateMetadataToSend(metadata);
195
+ return this.logSearchEvent(SearchPageEvents.resultsSort, metadataToSend);
159
196
  }
160
197
 
161
- public logSearchboxSubmit() {
198
+ public logSearchboxSubmit(metadata?: CaseMetadata) {
199
+ if (metadata) {
200
+ const metadataToSend = generateMetadataToSend(metadata);
201
+ return this.logSearchEvent(SearchPageEvents.searchboxSubmit, metadataToSend);
202
+ }
162
203
  return this.logSearchEvent(SearchPageEvents.searchboxSubmit);
163
204
  }
164
205
 
165
- public logContextChanged(meta: ContextChangedMetadata) {
166
- const context = extractContextFromMetadata(meta);
206
+ public logContextChanged(metadata: CaseMetadata) {
207
+ const metadataToSend = generateMetadataToSend(metadata);
208
+ return this.logSearchEvent(InsightEvents.contextChanged, metadataToSend);
209
+ }
167
210
 
168
- const {caseId, caseNumber} = meta;
169
- const metaToBeSent = {
170
- CaseId: caseId,
171
- CaseNumber: caseNumber,
172
- ...(!!context.context_Case_Subject && {CaseSubject: context.context_Case_Subject}),
173
- ...context,
174
- };
175
- return this.logSearchEvent(InsightEvents.contextChanged, metaToBeSent);
211
+ public logExpandToFullUI(metadata: ExpandToFullUIMetadata) {
212
+ const metadataToSend = generateMetadataToSend(metadata);
213
+ return this.logCustomEvent(InsightEvents.expandToFullUI, metadataToSend);
176
214
  }
177
215
 
178
- public logExpandToFullUI(meta: ExpandToFullUIMetadata) {
179
- const context = extractContextFromMetadata(meta);
216
+ public async logCustomEvent(event: SearchPageEvents | InsightEvents, metadata?: Record<string, any>) {
217
+ const customData = {...this.provider.getBaseMetadata(), ...metadata};
180
218
 
181
- const {caseId, caseNumber, triggeredBy, fullSearchComponentName} = meta;
182
- const metaToBeSent = {
183
- CaseId: caseId,
184
- CaseNumber: caseNumber,
185
- triggeredBy,
186
- fullSearchComponentName,
187
- ...(!!context.context_Case_Subject && {CaseSubject: context.context_Case_Subject}),
219
+ const payload: CustomEventRequest = {
220
+ ...(await this.getBaseCustomEventRequest(customData)),
221
+ eventType: CustomEventsTypes[event]!,
222
+ eventValue: event,
188
223
  };
189
- return this.logCustomEvent(InsightEvents.expandToFullUI, metaToBeSent);
224
+
225
+ return this.coveoAnalyticsClient.sendCustomEvent(payload);
226
+ }
227
+
228
+ public async logSearchEvent(event: SearchPageEvents | InsightEvents, metadata?: Record<string, any>) {
229
+ return this.coveoAnalyticsClient.sendSearchEvent(await this.getBaseSearchEventRequest(event, metadata));
190
230
  }
191
231
 
192
232
  private async getBaseCustomEventRequest(metadata?: Record<string, any>) {
@@ -1,3 +1,16 @@
1
+ import {
2
+ CategoryFacetMetadata,
3
+ FacetBaseMeta,
4
+ FacetMetadata,
5
+ FacetRangeMetadata,
6
+ FacetSortMeta,
7
+ InterfaceChangeMetadata,
8
+ PagerMetadata,
9
+ QueryErrorMeta,
10
+ ResultsSortMetadata,
11
+ StaticFilterToggleValueMetadata,
12
+ } from '../searchPage/searchPageEvents';
13
+
1
14
  export enum InsightEvents {
2
15
  /**
3
16
  * Identifies the search event that gets logged when the query context is updated as a result of updating one of the case context fields.
@@ -9,15 +22,33 @@ export enum InsightEvents {
9
22
  expandToFullUI = 'expandToFullUI',
10
23
  }
11
24
 
12
- interface CaseMetadata {
13
- caseId: string;
14
- caseNumber: string;
15
- caseContext: Record<string, string>;
25
+ export interface CaseMetadata {
26
+ caseId?: string;
27
+ caseNumber?: string;
28
+ caseContext?: Record<string, string>;
16
29
  }
17
30
 
18
- export interface ContextChangedMetadata extends CaseMetadata {}
19
-
20
31
  export interface ExpandToFullUIMetadata extends CaseMetadata {
21
32
  fullSearchComponentName: string;
22
33
  triggeredBy: string;
23
34
  }
35
+
36
+ export interface InsightInterfaceChangeMetadata extends InterfaceChangeMetadata, CaseMetadata {}
37
+
38
+ export interface InsightFacetMetadata extends FacetMetadata, CaseMetadata {}
39
+
40
+ export interface InsightStaticFilterToggleValueMetadata extends StaticFilterToggleValueMetadata, CaseMetadata {}
41
+
42
+ export interface InsightFacetRangeMetadata extends FacetRangeMetadata, CaseMetadata {}
43
+
44
+ export interface InsightCategoryFacetMetadata extends CategoryFacetMetadata, CaseMetadata {}
45
+
46
+ export interface InsightFacetSortMeta extends FacetSortMeta, CaseMetadata {}
47
+
48
+ export interface InsightFacetBaseMeta extends FacetBaseMeta, CaseMetadata {}
49
+
50
+ export interface InsightQueryErrorMeta extends QueryErrorMeta, CaseMetadata {}
51
+
52
+ export interface InsightPagerMetadata extends PagerMetadata, CaseMetadata {}
53
+
54
+ export interface InsightResultsSortMetadata extends ResultsSortMetadata, CaseMetadata {}