coveo.analytics 2.30.56 → 2.32.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 (84) hide show
  1. package/README.md +37 -43
  2. package/dist/browser.mjs +513 -357
  3. package/dist/coveoua.browser.js +1 -1
  4. package/dist/coveoua.browser.js.map +1 -1
  5. package/dist/coveoua.debug.js +542 -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 -2
  13. package/dist/definitions/version.d.ts +1 -1
  14. package/dist/library.cjs +15350 -3699
  15. package/dist/library.es.js +513 -357
  16. package/dist/library.js +15350 -3699
  17. package/dist/library.mjs +15350 -3699
  18. package/dist/react-native.es.js +634 -460
  19. package/modules/package.json +9 -9
  20. package/package.json +60 -91
  21. package/react-native/package.json +7 -7
  22. package/src/caseAssist/caseAssistActions.ts +51 -50
  23. package/src/caseAssist/caseAssistClient.spec.ts +328 -297
  24. package/src/caseAssist/caseAssistClient.ts +201 -185
  25. package/src/client/analytics.spec.ts +724 -703
  26. package/src/client/analytics.ts +677 -602
  27. package/src/client/analyticsBeaconClient.spec.ts +195 -188
  28. package/src/client/analyticsBeaconClient.ts +99 -88
  29. package/src/client/analyticsFetchClient.ts +77 -61
  30. package/src/client/analyticsRequestClient.ts +17 -17
  31. package/src/client/location.ts +3 -3
  32. package/src/client/measurementProtocolMapper.ts +54 -45
  33. package/src/client/measurementProtocolMapping/baseMeasurementProtocolMapper.ts +48 -44
  34. package/src/client/measurementProtocolMapping/commerceMeasurementProtocolMapper.ts +133 -121
  35. package/src/client/measurementProtocolMapping/serviceMeasurementProtocolMapper.ts +17 -17
  36. package/src/client/noopAnalytics.ts +80 -68
  37. package/src/client/runtimeEnvironment.ts +50 -41
  38. package/src/client/utils.spec.ts +112 -97
  39. package/src/client/utils.ts +39 -39
  40. package/src/cookieutils.spec.ts +59 -0
  41. package/src/cookieutils.ts +40 -39
  42. package/src/coveoua/browser.ts +14 -12
  43. package/src/coveoua/library.ts +4 -4
  44. package/src/coveoua/plugins.ts +36 -34
  45. package/src/coveoua/simpleanalytics.spec.ts +467 -452
  46. package/src/coveoua/simpleanalytics.ts +146 -140
  47. package/src/detector.ts +17 -17
  48. package/src/donottrack.spec.ts +199 -121
  49. package/src/donottrack.ts +31 -8
  50. package/src/events.ts +86 -79
  51. package/src/formatting/format-array-for-coveo-custom-data.spec.ts +13 -12
  52. package/src/formatting/format-array-for-coveo-custom-data.ts +18 -18
  53. package/src/formatting/format-omnibox-metadata.ts +16 -12
  54. package/src/history.spec.ts +197 -195
  55. package/src/history.ts +143 -133
  56. package/src/hook/addDefaultValues.ts +13 -8
  57. package/src/hook/enhanceViewEvent.ts +17 -17
  58. package/src/insight/insightClient.spec.ts +1848 -1717
  59. package/src/insight/insightClient.ts +866 -761
  60. package/src/insight/insightEvents.ts +57 -56
  61. package/src/plugins/BasePlugin.ts +125 -121
  62. package/src/plugins/ec.spec.ts +457 -429
  63. package/src/plugins/ec.ts +202 -199
  64. package/src/plugins/link.spec.ts +183 -159
  65. package/src/plugins/link.ts +88 -85
  66. package/src/plugins/svc.spec.ts +161 -155
  67. package/src/plugins/svc.ts +93 -91
  68. package/src/react-native/index.ts +8 -1
  69. package/src/react-native/react-native-runtime.ts +33 -33
  70. package/src/react-native/react-native-utils.ts +1 -1
  71. package/src/react-native/react-native.spec.ts +31 -21
  72. package/src/searchPage/searchPageClient.spec.ts +1944 -1794
  73. package/src/searchPage/searchPageClient.ts +1261 -1040
  74. package/src/searchPage/searchPageEvents.ts +524 -511
  75. package/src/storage.spec.ts +51 -51
  76. package/src/storage.ts +47 -47
  77. package/dist/definitions/bundle/browser-fetch.d.ts +0 -1
  78. package/dist/definitions/src/coveoua/browser.d.ts +0 -6
  79. package/dist/definitions/src/coveoua/headless.d.ts +0 -6
  80. package/dist/definitions/src/coveoua/library.d.ts +0 -17
  81. package/dist/definitions/src/coveoua/plugins.d.ts +0 -10
  82. package/dist/definitions/src/coveoua/simpleanalytics.d.ts +0 -33
  83. package/dist/definitions/src/react-native/index.d.ts +0 -3
  84. 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
  }