coveo.analytics 2.30.55 → 2.31.0

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.
Files changed (86) hide show
  1. package/README.md +37 -43
  2. package/dist/browser.mjs +525 -357
  3. package/dist/coveoua.browser.js +1 -1
  4. package/dist/coveoua.browser.js.map +1 -1
  5. package/dist/coveoua.debug.js +559 -359
  6. package/dist/coveoua.debug.js.map +1 -1
  7. package/dist/coveoua.js +1 -1
  8. package/dist/coveoua.js.map +1 -1
  9. package/dist/definitions/client/analytics.d.ts +3 -2
  10. package/dist/definitions/client/runtimeEnvironment.d.ts +1 -1
  11. package/dist/definitions/donottrack.d.ts +1 -0
  12. package/dist/definitions/react-native/index.d.ts +1 -1
  13. package/dist/definitions/searchPage/searchPageClient.d.ts +3 -1
  14. package/dist/definitions/searchPage/searchPageEvents.d.ts +6 -0
  15. package/dist/definitions/version.d.ts +1 -1
  16. package/dist/library.cjs +15367 -3699
  17. package/dist/library.es.js +525 -357
  18. package/dist/library.js +15367 -3699
  19. package/dist/library.mjs +15367 -3699
  20. package/dist/react-native.es.js +646 -460
  21. package/modules/package.json +9 -9
  22. package/package.json +60 -91
  23. package/react-native/package.json +7 -7
  24. package/src/caseAssist/caseAssistActions.ts +51 -50
  25. package/src/caseAssist/caseAssistClient.spec.ts +328 -297
  26. package/src/caseAssist/caseAssistClient.ts +201 -185
  27. package/src/client/analytics.spec.ts +724 -703
  28. package/src/client/analytics.ts +677 -602
  29. package/src/client/analyticsBeaconClient.spec.ts +195 -188
  30. package/src/client/analyticsBeaconClient.ts +99 -88
  31. package/src/client/analyticsFetchClient.ts +77 -61
  32. package/src/client/analyticsRequestClient.ts +17 -17
  33. package/src/client/location.ts +3 -3
  34. package/src/client/measurementProtocolMapper.ts +54 -45
  35. package/src/client/measurementProtocolMapping/baseMeasurementProtocolMapper.ts +48 -44
  36. package/src/client/measurementProtocolMapping/commerceMeasurementProtocolMapper.ts +133 -121
  37. package/src/client/measurementProtocolMapping/serviceMeasurementProtocolMapper.ts +17 -17
  38. package/src/client/noopAnalytics.ts +80 -68
  39. package/src/client/runtimeEnvironment.ts +50 -41
  40. package/src/client/utils.spec.ts +112 -97
  41. package/src/client/utils.ts +39 -39
  42. package/src/cookieutils.spec.ts +59 -0
  43. package/src/cookieutils.ts +40 -39
  44. package/src/coveoua/browser.ts +14 -12
  45. package/src/coveoua/library.ts +4 -4
  46. package/src/coveoua/plugins.ts +36 -34
  47. package/src/coveoua/simpleanalytics.spec.ts +467 -452
  48. package/src/coveoua/simpleanalytics.ts +146 -140
  49. package/src/detector.ts +17 -17
  50. package/src/donottrack.spec.ts +199 -121
  51. package/src/donottrack.ts +31 -8
  52. package/src/events.ts +86 -79
  53. package/src/formatting/format-array-for-coveo-custom-data.spec.ts +13 -12
  54. package/src/formatting/format-array-for-coveo-custom-data.ts +18 -18
  55. package/src/formatting/format-omnibox-metadata.ts +16 -12
  56. package/src/history.spec.ts +197 -195
  57. package/src/history.ts +143 -133
  58. package/src/hook/addDefaultValues.ts +13 -8
  59. package/src/hook/enhanceViewEvent.ts +17 -17
  60. package/src/insight/insightClient.spec.ts +1848 -1717
  61. package/src/insight/insightClient.ts +866 -761
  62. package/src/insight/insightEvents.ts +57 -56
  63. package/src/plugins/BasePlugin.ts +125 -121
  64. package/src/plugins/ec.spec.ts +457 -429
  65. package/src/plugins/ec.ts +202 -199
  66. package/src/plugins/link.spec.ts +183 -159
  67. package/src/plugins/link.ts +88 -85
  68. package/src/plugins/svc.spec.ts +161 -155
  69. package/src/plugins/svc.ts +93 -91
  70. package/src/react-native/index.ts +5 -1
  71. package/src/react-native/react-native-runtime.ts +33 -33
  72. package/src/react-native/react-native-utils.ts +1 -1
  73. package/src/react-native/react-native.spec.ts +22 -21
  74. package/src/searchPage/searchPageClient.spec.ts +1944 -1766
  75. package/src/searchPage/searchPageClient.ts +1261 -1029
  76. package/src/searchPage/searchPageEvents.ts +529 -500
  77. package/src/storage.spec.ts +51 -51
  78. package/src/storage.ts +47 -47
  79. package/dist/definitions/bundle/browser-fetch.d.ts +0 -1
  80. package/dist/definitions/src/coveoua/browser.d.ts +0 -6
  81. package/dist/definitions/src/coveoua/headless.d.ts +0 -6
  82. package/dist/definitions/src/coveoua/library.d.ts +0 -17
  83. package/dist/definitions/src/coveoua/plugins.d.ts +0 -10
  84. package/dist/definitions/src/coveoua/simpleanalytics.d.ts +0 -33
  85. package/dist/definitions/src/react-native/index.d.ts +0 -3
  86. package/dist/definitions/src/react-native/react-native-runtime.d.ts +0 -19
@@ -1,200 +1,216 @@
1
1
  import CoveoAnalyticsClient, {AnalyticsClient, ClientOptions} from '../client/analytics';
2
2
  import {NoopAnalytics} from '../client/noopAnalytics';
3
- import doNotTrack from '../donottrack';
3
+ import {shouldDisableAnalyticsForPrivacy} from '../donottrack';
4
4
  import {ClickEventRequest} from '../events';
5
5
  import {SVCPlugin} from '../plugins/svc';
6
- import {DocumentIdentifier, PartialDocumentInformation, SearchPageEvents} from '../searchPage/searchPageEvents';
7
6
  import {
8
- CaseAssistActions,
9
- CaseAssistEvents,
10
- CaseCancelledMetadata,
11
- CaseCancelledReasons,
12
- CaseCreatedMetadata,
13
- CaseSolvedMetadata,
14
- EnterInterfaceMetadata,
15
- MoveToNextCaseStepMetadata,
16
- RateDocumentSuggestionMetadata,
17
- SelectDocumentSuggestionMetadata,
18
- SelectFieldSuggestionMetadata,
19
- UpdateCaseFieldMetadata,
7
+ DocumentIdentifier,
8
+ PartialDocumentInformation,
9
+ SearchPageEvents,
10
+ } from '../searchPage/searchPageEvents';
11
+ import {
12
+ CaseAssistActions,
13
+ CaseAssistEvents,
14
+ CaseCancelledMetadata,
15
+ CaseCancelledReasons,
16
+ CaseCreatedMetadata,
17
+ CaseSolvedMetadata,
18
+ EnterInterfaceMetadata,
19
+ MoveToNextCaseStepMetadata,
20
+ RateDocumentSuggestionMetadata,
21
+ SelectDocumentSuggestionMetadata,
22
+ SelectFieldSuggestionMetadata,
23
+ UpdateCaseFieldMetadata,
20
24
  } from './caseAssistActions';
21
25
 
22
26
  export interface CaseAssistClientProvider {
23
- getOriginLevel1: () => string;
24
- getOriginLevel2: () => string;
25
- getOriginLevel3: () => string;
26
- getOriginContext: () => string;
27
- getIsAnonymous: () => boolean;
28
- getSearchUID: () => string;
29
- getLanguage: () => string;
27
+ getOriginLevel1: () => string;
28
+ getOriginLevel2: () => string;
29
+ getOriginLevel3: () => string;
30
+ getOriginContext: () => string;
31
+ getIsAnonymous: () => boolean;
32
+ getSearchUID: () => string;
33
+ getLanguage: () => string;
30
34
  }
31
35
 
32
36
  export interface CaseAssistClientOptions extends ClientOptions {
33
- enableAnalytics?: boolean;
37
+ enableAnalytics?: boolean;
34
38
  }
35
39
 
36
40
  export class CaseAssistClient {
37
- public coveoAnalyticsClient: AnalyticsClient;
38
- private svc: SVCPlugin;
39
-
40
- constructor(
41
- private options: Partial<CaseAssistClientOptions>,
42
- private provider?: CaseAssistClientProvider,
43
- ) {
44
- const analyticsEnabled = (options.enableAnalytics ?? true) && !doNotTrack();
45
-
46
- this.coveoAnalyticsClient = analyticsEnabled ? new CoveoAnalyticsClient(options) : new NoopAnalytics();
47
- this.svc = new SVCPlugin({client: this.coveoAnalyticsClient});
48
- }
49
-
50
- public disable() {
51
- this.coveoAnalyticsClient = new NoopAnalytics();
52
- this.svc = new SVCPlugin({client: this.coveoAnalyticsClient});
53
- }
54
-
55
- public enable() {
56
- this.coveoAnalyticsClient = new CoveoAnalyticsClient(this.options);
57
- this.svc = new SVCPlugin({client: this.coveoAnalyticsClient});
58
- }
59
-
60
- public logEnterInterface(meta: EnterInterfaceMetadata) {
61
- this.svc.setAction(CaseAssistActions.enterInterface);
62
- this.svc.setTicket(meta.ticket);
63
- return this.sendFlowStartEvent();
64
- }
65
-
66
- public logUpdateCaseField(meta: UpdateCaseFieldMetadata) {
67
- this.svc.setAction(CaseAssistActions.fieldUpdate, {
68
- fieldName: meta.fieldName,
69
- });
70
- this.svc.setTicket(meta.ticket);
71
- return this.sendClickEvent();
72
- }
73
-
74
- public logSelectFieldSuggestion(meta: SelectFieldSuggestionMetadata) {
75
- this.svc.setAction(CaseAssistActions.fieldSuggestionClick, meta.suggestion);
76
- this.svc.setTicket(meta.ticket);
77
- return this.sendClickEvent();
78
- }
79
-
80
- public logSelectDocumentSuggestion(meta: SelectDocumentSuggestionMetadata) {
81
- return this.logClickEvent(CaseAssistActions.documentSuggestionClick, meta.suggestion.suggestion, {
82
- contentIDKey: 'permanentId',
83
- contentIDValue: meta.suggestion.permanentId,
84
- });
85
- }
86
-
87
- public logQuickviewDocumentSuggestion(meta: SelectDocumentSuggestionMetadata) {
88
- return this.logClickEvent(CaseAssistActions.documentSuggestionQuickview, meta.suggestion.suggestion, {
89
- contentIDKey: 'permanentId',
90
- contentIDValue: meta.suggestion.permanentId,
91
- });
92
- }
93
-
94
- public logRateDocumentSuggestion(meta: RateDocumentSuggestionMetadata) {
95
- this.svc.setAction(CaseAssistActions.suggestionRate, {
96
- rate: meta.rating,
97
- ...meta.suggestion,
98
- });
99
- this.svc.setTicket(meta.ticket);
100
- return this.sendClickEvent();
101
- }
102
-
103
- public logMoveToNextCaseStep(meta: MoveToNextCaseStepMetadata) {
104
- this.svc.setAction(CaseAssistActions.nextCaseStep, {
105
- stage: meta?.stage,
106
- });
107
- this.svc.setTicket(meta.ticket);
108
- return this.sendClickEvent();
109
- }
110
-
111
- public logCaseCancelled(meta: CaseCancelledMetadata) {
112
- this.svc.setAction(CaseAssistActions.caseCancelled, {
113
- reason: CaseCancelledReasons.quit,
114
- });
115
- this.svc.setTicket(meta.ticket);
116
- return this.sendClickEvent();
117
- }
118
-
119
- public logCaseSolved(meta: CaseSolvedMetadata) {
120
- this.svc.setAction(CaseAssistActions.caseSolved, {
121
- reason: CaseCancelledReasons.solved,
122
- });
123
- this.svc.setTicket(meta.ticket);
124
- return this.sendClickEvent();
125
- }
126
-
127
- public logCaseCreated(meta: CaseCreatedMetadata) {
128
- this.svc.setAction(CaseAssistActions.caseCreated);
129
- this.svc.setTicket(meta.ticket);
130
- return this.sendClickEvent();
131
- }
132
-
133
- private sendFlowStartEvent() {
134
- return this.coveoAnalyticsClient.sendEvent(
135
- 'event',
136
- 'svc',
137
- CaseAssistEvents.flowStart,
138
- this.provider
139
- ? {
140
- searchHub: this.provider.getOriginLevel1(),
141
- }
142
- : null,
143
- );
144
- }
145
-
146
- private sendClickEvent() {
147
- return this.coveoAnalyticsClient.sendEvent(
148
- 'event',
149
- 'svc',
150
- CaseAssistEvents.click,
151
- this.provider
152
- ? {
153
- searchHub: this.provider.getOriginLevel1(),
154
- }
155
- : null,
156
- );
157
- }
158
-
159
- private async getBaseEventRequest(metadata?: Record<string, any>) {
160
- const customData = {...metadata};
161
- return {
162
- ...this.getOrigins(),
163
- customData,
164
- language: this.provider?.getLanguage(),
165
- anonymous: this.provider?.getIsAnonymous(),
166
- clientId: await this.getClientId(),
167
- };
168
- }
169
-
170
- private getClientId() {
171
- return this.coveoAnalyticsClient instanceof CoveoAnalyticsClient
172
- ? this.coveoAnalyticsClient.getCurrentVisitorId()
173
- : undefined;
174
- }
175
-
176
- private getOrigins() {
177
- return {
178
- originContext: this.provider?.getOriginContext?.(),
179
- originLevel1: this.provider?.getOriginLevel1(),
180
- originLevel2: this.provider?.getOriginLevel2(),
181
- originLevel3: this.provider?.getOriginLevel3(),
182
- };
183
- }
184
-
185
- private async logClickEvent(
186
- event: CaseAssistActions,
187
- info: PartialDocumentInformation,
188
- identifier: DocumentIdentifier,
189
- metadata?: Record<string, any>,
190
- ) {
191
- const payload: ClickEventRequest = {
192
- ...info,
193
- ...(await this.getBaseEventRequest({...identifier, ...metadata})),
194
- searchQueryUid: this.provider?.getSearchUID() ?? '',
195
- actionCause: event,
196
- };
197
-
198
- return this.coveoAnalyticsClient.sendClickEvent(payload);
199
- }
41
+ public coveoAnalyticsClient: AnalyticsClient;
42
+ private svc: SVCPlugin;
43
+
44
+ constructor(
45
+ private options: Partial<CaseAssistClientOptions>,
46
+ private provider?: CaseAssistClientProvider
47
+ ) {
48
+ const analyticsEnabled =
49
+ (options.enableAnalytics ?? true) &&
50
+ !shouldDisableAnalyticsForPrivacy(options.disableBrowserPrivacySignals);
51
+
52
+ this.coveoAnalyticsClient = analyticsEnabled
53
+ ? new CoveoAnalyticsClient(options)
54
+ : new NoopAnalytics();
55
+ this.svc = new SVCPlugin({client: this.coveoAnalyticsClient});
56
+ }
57
+
58
+ public disable() {
59
+ this.coveoAnalyticsClient = new NoopAnalytics();
60
+ this.svc = new SVCPlugin({client: this.coveoAnalyticsClient});
61
+ }
62
+
63
+ public enable() {
64
+ this.coveoAnalyticsClient = new CoveoAnalyticsClient(this.options);
65
+ this.svc = new SVCPlugin({client: this.coveoAnalyticsClient});
66
+ }
67
+
68
+ public logEnterInterface(meta: EnterInterfaceMetadata) {
69
+ this.svc.setAction(CaseAssistActions.enterInterface);
70
+ this.svc.setTicket(meta.ticket);
71
+ return this.sendFlowStartEvent();
72
+ }
73
+
74
+ public logUpdateCaseField(meta: UpdateCaseFieldMetadata) {
75
+ this.svc.setAction(CaseAssistActions.fieldUpdate, {
76
+ fieldName: meta.fieldName,
77
+ });
78
+ this.svc.setTicket(meta.ticket);
79
+ return this.sendClickEvent();
80
+ }
81
+
82
+ public logSelectFieldSuggestion(meta: SelectFieldSuggestionMetadata) {
83
+ this.svc.setAction(CaseAssistActions.fieldSuggestionClick, meta.suggestion);
84
+ this.svc.setTicket(meta.ticket);
85
+ return this.sendClickEvent();
86
+ }
87
+
88
+ public logSelectDocumentSuggestion(meta: SelectDocumentSuggestionMetadata) {
89
+ return this.logClickEvent(
90
+ CaseAssistActions.documentSuggestionClick,
91
+ meta.suggestion.suggestion,
92
+ {
93
+ contentIDKey: 'permanentId',
94
+ contentIDValue: meta.suggestion.permanentId,
95
+ }
96
+ );
97
+ }
98
+
99
+ public logQuickviewDocumentSuggestion(meta: SelectDocumentSuggestionMetadata) {
100
+ return this.logClickEvent(
101
+ CaseAssistActions.documentSuggestionQuickview,
102
+ meta.suggestion.suggestion,
103
+ {
104
+ contentIDKey: 'permanentId',
105
+ contentIDValue: meta.suggestion.permanentId,
106
+ }
107
+ );
108
+ }
109
+
110
+ public logRateDocumentSuggestion(meta: RateDocumentSuggestionMetadata) {
111
+ this.svc.setAction(CaseAssistActions.suggestionRate, {
112
+ rate: meta.rating,
113
+ ...meta.suggestion,
114
+ });
115
+ this.svc.setTicket(meta.ticket);
116
+ return this.sendClickEvent();
117
+ }
118
+
119
+ public logMoveToNextCaseStep(meta: MoveToNextCaseStepMetadata) {
120
+ this.svc.setAction(CaseAssistActions.nextCaseStep, {
121
+ stage: meta?.stage,
122
+ });
123
+ this.svc.setTicket(meta.ticket);
124
+ return this.sendClickEvent();
125
+ }
126
+
127
+ public logCaseCancelled(meta: CaseCancelledMetadata) {
128
+ this.svc.setAction(CaseAssistActions.caseCancelled, {
129
+ reason: CaseCancelledReasons.quit,
130
+ });
131
+ this.svc.setTicket(meta.ticket);
132
+ return this.sendClickEvent();
133
+ }
134
+
135
+ public logCaseSolved(meta: CaseSolvedMetadata) {
136
+ this.svc.setAction(CaseAssistActions.caseSolved, {
137
+ reason: CaseCancelledReasons.solved,
138
+ });
139
+ this.svc.setTicket(meta.ticket);
140
+ return this.sendClickEvent();
141
+ }
142
+
143
+ public logCaseCreated(meta: CaseCreatedMetadata) {
144
+ this.svc.setAction(CaseAssistActions.caseCreated);
145
+ this.svc.setTicket(meta.ticket);
146
+ return this.sendClickEvent();
147
+ }
148
+
149
+ private sendFlowStartEvent() {
150
+ return this.coveoAnalyticsClient.sendEvent(
151
+ 'event',
152
+ 'svc',
153
+ CaseAssistEvents.flowStart,
154
+ this.provider
155
+ ? {
156
+ searchHub: this.provider.getOriginLevel1(),
157
+ }
158
+ : null
159
+ );
160
+ }
161
+
162
+ private sendClickEvent() {
163
+ return this.coveoAnalyticsClient.sendEvent(
164
+ 'event',
165
+ 'svc',
166
+ CaseAssistEvents.click,
167
+ this.provider
168
+ ? {
169
+ searchHub: this.provider.getOriginLevel1(),
170
+ }
171
+ : null
172
+ );
173
+ }
174
+
175
+ private async getBaseEventRequest(metadata?: Record<string, any>) {
176
+ const customData = {...metadata};
177
+ return {
178
+ ...this.getOrigins(),
179
+ customData,
180
+ language: this.provider?.getLanguage(),
181
+ anonymous: this.provider?.getIsAnonymous(),
182
+ clientId: await this.getClientId(),
183
+ };
184
+ }
185
+
186
+ private getClientId() {
187
+ return this.coveoAnalyticsClient instanceof CoveoAnalyticsClient
188
+ ? this.coveoAnalyticsClient.getCurrentVisitorId()
189
+ : undefined;
190
+ }
191
+
192
+ private getOrigins() {
193
+ return {
194
+ originContext: this.provider?.getOriginContext?.(),
195
+ originLevel1: this.provider?.getOriginLevel1(),
196
+ originLevel2: this.provider?.getOriginLevel2(),
197
+ originLevel3: this.provider?.getOriginLevel3(),
198
+ };
199
+ }
200
+
201
+ private async logClickEvent(
202
+ event: CaseAssistActions,
203
+ info: PartialDocumentInformation,
204
+ identifier: DocumentIdentifier,
205
+ metadata?: Record<string, any>
206
+ ) {
207
+ const payload: ClickEventRequest = {
208
+ ...info,
209
+ ...(await this.getBaseEventRequest({...identifier, ...metadata})),
210
+ searchQueryUid: this.provider?.getSearchUID() ?? '',
211
+ actionCause: event,
212
+ };
213
+
214
+ return this.coveoAnalyticsClient.sendClickEvent(payload);
215
+ }
200
216
  }