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.
- package/dist/coveoua.browser.js +1 -1
- package/dist/coveoua.browser.js.map +1 -1
- package/dist/coveoua.js +1 -1
- package/dist/coveoua.js.map +1 -1
- package/dist/definitions/coveoua/library.d.ts +1 -1
- package/dist/definitions/insight/insightClient.d.ts +24 -24
- package/dist/definitions/insight/insightEvents.d.ts +25 -7
- package/dist/definitions/searchPage/searchPageClient.d.ts +154 -73
- package/dist/definitions/src/coveoua/library.d.ts +1 -1
- package/dist/library.es.js +432 -150
- package/dist/library.js +477 -186
- package/package.json +1 -1
- package/src/coveoua/library.ts +6 -1
- package/src/insight/insightClient.spec.ts +495 -151
- package/src/insight/insightClient.ts +131 -91
- package/src/insight/insightEvents.ts +37 -6
- package/src/searchPage/searchPageClient.spec.ts +650 -5
- package/src/searchPage/searchPageClient.ts +460 -97
|
@@ -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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
} from '
|
|
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
|
|
40
|
+
const extractContextFromMetadata = (meta: {caseContext?: Record<string, string>}) => {
|
|
41
41
|
const context: Record<string, string> = {};
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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:
|
|
74
|
-
|
|
94
|
+
public logInterfaceChange(metadata: InsightInterfaceChangeMetadata) {
|
|
95
|
+
const metadataToSend = generateMetadataToSend(metadata);
|
|
96
|
+
return this.logSearchEvent(SearchPageEvents.interfaceChange, metadataToSend);
|
|
75
97
|
}
|
|
76
98
|
|
|
77
|
-
public logStaticFilterDeselect(
|
|
78
|
-
|
|
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(
|
|
86
|
-
|
|
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(
|
|
94
|
-
|
|
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
|
|
106
|
-
|
|
132
|
+
public logFacetDeselect(metadata: InsightFacetMetadata) {
|
|
133
|
+
const metadataToSend = generateMetadataToSend(metadata);
|
|
134
|
+
return this.logSearchEvent(SearchPageEvents.facetDeselect, metadataToSend);
|
|
107
135
|
}
|
|
108
136
|
|
|
109
|
-
public
|
|
110
|
-
|
|
137
|
+
public logFacetUpdateSort(metadata: InsightFacetSortMeta) {
|
|
138
|
+
const metadataToSend = generateMetadataToSend(metadata);
|
|
139
|
+
return this.logSearchEvent(SearchPageEvents.facetUpdateSort, metadataToSend);
|
|
111
140
|
}
|
|
112
141
|
|
|
113
|
-
public
|
|
114
|
-
|
|
142
|
+
public logFacetClearAll(metadata: InsightFacetBaseMeta) {
|
|
143
|
+
const metadataToSend = generateMetadataToSend(metadata);
|
|
144
|
+
return this.logSearchEvent(SearchPageEvents.facetClearAll, metadataToSend);
|
|
115
145
|
}
|
|
116
146
|
|
|
117
|
-
public
|
|
118
|
-
|
|
147
|
+
public logFacetShowMore(metadata: InsightFacetBaseMeta) {
|
|
148
|
+
const metadataToSend = generateMetadataToSend(metadata, false);
|
|
149
|
+
return this.logCustomEvent(SearchPageEvents.facetShowMore, metadataToSend);
|
|
119
150
|
}
|
|
120
151
|
|
|
121
|
-
public
|
|
122
|
-
const
|
|
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
|
|
134
|
-
|
|
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(
|
|
138
|
-
|
|
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(
|
|
142
|
-
|
|
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(
|
|
146
|
-
|
|
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:
|
|
158
|
-
|
|
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(
|
|
166
|
-
const
|
|
206
|
+
public logContextChanged(metadata: CaseMetadata) {
|
|
207
|
+
const metadataToSend = generateMetadataToSend(metadata);
|
|
208
|
+
return this.logSearchEvent(InsightEvents.contextChanged, metadataToSend);
|
|
209
|
+
}
|
|
167
210
|
|
|
168
|
-
|
|
169
|
-
const
|
|
170
|
-
|
|
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
|
|
179
|
-
const
|
|
216
|
+
public async logCustomEvent(event: SearchPageEvents | InsightEvents, metadata?: Record<string, any>) {
|
|
217
|
+
const customData = {...this.provider.getBaseMetadata(), ...metadata};
|
|
180
218
|
|
|
181
|
-
const
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
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
|
-
|
|
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
|
|
14
|
-
caseNumber
|
|
15
|
-
caseContext
|
|
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 {}
|