coveo.analytics 2.20.12 → 2.20.13

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.
@@ -1,6 +1,7 @@
1
1
  import { AnalyticsClient, ClientOptions } from '../client/analytics';
2
2
  import { SearchEventRequest } from '../events';
3
3
  import { FacetBaseMeta, FacetMetadata, FacetSortMeta, FacetStateMetadata, PagerMetadata, InterfaceChangeMetadata, QueryErrorMeta, SearchPageEvents, ResultsSortMetadata, FacetRangeMetadata, CategoryFacetMetadata, StaticFilterToggleValueMetadata } from '../searchPage/searchPageEvents';
4
+ import { ContextChangedMetadata, ExpandToFullUIMetadata, InsightEvents } from './insightEvents';
4
5
  export interface InsightClientProvider {
5
6
  getSearchEventRequestPayload: () => Omit<SearchEventRequest, 'actionCause' | 'searchQueryUid'>;
6
7
  getSearchUID: () => string;
@@ -37,12 +38,14 @@ export declare class CoveoInsightClient {
37
38
  logFacetShowMore(meta: FacetBaseMeta): Promise<void | import("../events").CustomEventResponse>;
38
39
  logFacetShowLess(meta: FacetBaseMeta): Promise<void | import("../events").CustomEventResponse>;
39
40
  logQueryError(meta: QueryErrorMeta): Promise<void | import("../events").CustomEventResponse>;
40
- logCustomEvent(event: SearchPageEvents, metadata?: Record<string, any>): Promise<void | import("../events").CustomEventResponse>;
41
- logSearchEvent(event: SearchPageEvents, metadata?: Record<string, any>): Promise<void | import("../events").SearchEventResponse>;
41
+ logCustomEvent(event: SearchPageEvents | InsightEvents, metadata?: Record<string, any>): Promise<void | import("../events").CustomEventResponse>;
42
+ logSearchEvent(event: SearchPageEvents | InsightEvents, metadata?: Record<string, any>): Promise<void | import("../events").SearchEventResponse>;
42
43
  logPagerNumber(meta: PagerMetadata): Promise<void | import("../events").CustomEventResponse>;
43
44
  logPagerNext(meta: PagerMetadata): Promise<void | import("../events").CustomEventResponse>;
44
45
  logPagerPrevious(meta: PagerMetadata): Promise<void | import("../events").CustomEventResponse>;
45
46
  logResultsSort(metadata: ResultsSortMetadata): Promise<void | import("../events").SearchEventResponse>;
47
+ logContextChanged(meta: ContextChangedMetadata): Promise<void | import("../events").SearchEventResponse>;
48
+ logExpandToFullUI(meta: ExpandToFullUIMetadata): Promise<void | import("../events").CustomEventResponse>;
46
49
  private getBaseCustomEventRequest;
47
50
  private getBaseSearchEventRequest;
48
51
  private getBaseEventRequest;
@@ -0,0 +1,16 @@
1
+ export declare enum InsightEvents {
2
+ contextChanged = "contextChanged",
3
+ expandToFullUI = "expandToFullUI"
4
+ }
5
+ interface CaseMetadata {
6
+ caseId: string;
7
+ caseNumber: string;
8
+ caseContext: Record<string, string>;
9
+ }
10
+ export interface ContextChangedMetadata extends CaseMetadata {
11
+ }
12
+ export interface ExpandToFullUIMetadata extends CaseMetadata {
13
+ fullSearchComponentName: string;
14
+ triggeredBy: string;
15
+ }
16
+ export {};
@@ -1,4 +1,5 @@
1
1
  import { DocumentInformation, FacetStateRequest } from '../events';
2
+ import { InsightEvents } from '../insight/insightEvents';
2
3
  export declare enum SearchPageEvents {
3
4
  interfaceLoad = "interfaceLoad",
4
5
  interfaceChange = "interfaceChange",
@@ -65,7 +66,7 @@ export declare enum SearchPageEvents {
65
66
  showMoreFoldedResults = "showMoreFoldedResults",
66
67
  showLessFoldedResults = "showLessFoldedResults"
67
68
  }
68
- export declare const CustomEventsTypes: Partial<Record<SearchPageEvents, string>>;
69
+ export declare const CustomEventsTypes: Partial<Record<SearchPageEvents | InsightEvents, string>>;
69
70
  export interface StaticFilterMetadata {
70
71
  staticFilterId: string;
71
72
  }
@@ -1074,6 +1074,12 @@ class CoveoAnalyticsClient {
1074
1074
  }
1075
1075
  }
1076
1076
 
1077
+ var InsightEvents;
1078
+ (function (InsightEvents) {
1079
+ InsightEvents["contextChanged"] = "contextChanged";
1080
+ InsightEvents["expandToFullUI"] = "expandToFullUI";
1081
+ })(InsightEvents || (InsightEvents = {}));
1082
+
1077
1083
  var SearchPageEvents;
1078
1084
  (function (SearchPageEvents) {
1079
1085
  SearchPageEvents["interfaceLoad"] = "interfaceLoad";
@@ -1174,6 +1180,7 @@ const CustomEventsTypes = {
1174
1180
  [SearchPageEvents.recentResultClick]: 'recentlyClickedDocuments',
1175
1181
  [SearchPageEvents.clearRecentResults]: 'recentlyClickedDocuments',
1176
1182
  [SearchPageEvents.showLessFoldedResults]: 'folding',
1183
+ [InsightEvents.expandToFullUI]: 'interface',
1177
1184
  };
1178
1185
 
1179
1186
  class NoopAnalytics {
@@ -1788,6 +1795,14 @@ class CaseAssistClient {
1788
1795
  }
1789
1796
  }
1790
1797
 
1798
+ const extractContextFromMetadata = (meta) => {
1799
+ const context = {};
1800
+ Object.keys(meta.caseContext).forEach((contextKey) => {
1801
+ const keyToBeSent = `context_${contextKey}`;
1802
+ context[keyToBeSent] = meta.caseContext[contextKey];
1803
+ });
1804
+ return context;
1805
+ };
1791
1806
  class CoveoInsightClient {
1792
1807
  constructor(opts, provider) {
1793
1808
  this.opts = opts;
@@ -1867,6 +1882,19 @@ class CoveoInsightClient {
1867
1882
  logResultsSort(metadata) {
1868
1883
  return this.logSearchEvent(SearchPageEvents.resultsSort, metadata);
1869
1884
  }
1885
+ logContextChanged(meta) {
1886
+ const context = extractContextFromMetadata(meta);
1887
+ const { caseId, caseNumber } = meta;
1888
+ const metaToBeSent = Object.assign(Object.assign({ CaseId: caseId, CaseNumber: caseNumber }, (!!context.context_Case_Subject && { CaseSubject: context.context_Case_Subject })), context);
1889
+ return this.logSearchEvent(InsightEvents.contextChanged, metaToBeSent);
1890
+ }
1891
+ logExpandToFullUI(meta) {
1892
+ const context = extractContextFromMetadata(meta);
1893
+ const { caseId, caseNumber, triggeredBy, fullSearchComponentName } = meta;
1894
+ const metaToBeSent = Object.assign({ CaseId: caseId, CaseNumber: caseNumber, triggeredBy,
1895
+ fullSearchComponentName }, (!!context.context_Case_Subject && { CaseSubject: context.context_Case_Subject }));
1896
+ return this.logCustomEvent(InsightEvents.expandToFullUI, metaToBeSent);
1897
+ }
1870
1898
  getBaseCustomEventRequest(metadata) {
1871
1899
  return __awaiter(this, void 0, void 0, function* () {
1872
1900
  return Object.assign(Object.assign({}, (yield this.getBaseEventRequest(metadata))), { lastSearchQueryUid: this.provider.getSearchUID() });
package/dist/library.js CHANGED
@@ -83526,6 +83526,12 @@ var simpleanalytics = /*#__PURE__*/Object.freeze({
83526
83526
  'default': handleOneAnalyticsEvent
83527
83527
  });
83528
83528
 
83529
+ var InsightEvents;
83530
+ (function (InsightEvents) {
83531
+ InsightEvents["contextChanged"] = "contextChanged";
83532
+ InsightEvents["expandToFullUI"] = "expandToFullUI";
83533
+ })(InsightEvents || (InsightEvents = {}));
83534
+
83529
83535
  var _a;
83530
83536
  var SearchPageEvents;
83531
83537
  (function (SearchPageEvents) {
@@ -83627,6 +83633,7 @@ var CustomEventsTypes = (_a = {},
83627
83633
  _a[SearchPageEvents.recentResultClick] = 'recentlyClickedDocuments',
83628
83634
  _a[SearchPageEvents.clearRecentResults] = 'recentlyClickedDocuments',
83629
83635
  _a[SearchPageEvents.showLessFoldedResults] = 'folding',
83636
+ _a[InsightEvents.expandToFullUI] = 'interface',
83630
83637
  _a);
83631
83638
 
83632
83639
  var NoopAnalytics = (function () {
@@ -84180,6 +84187,14 @@ var CaseAssistClient = (function () {
84180
84187
  return CaseAssistClient;
84181
84188
  }());
84182
84189
 
84190
+ var extractContextFromMetadata = function (meta) {
84191
+ var context = {};
84192
+ Object.keys(meta.caseContext).forEach(function (contextKey) {
84193
+ var keyToBeSent = "context_" + contextKey;
84194
+ context[keyToBeSent] = meta.caseContext[contextKey];
84195
+ });
84196
+ return context;
84197
+ };
84183
84198
  var CoveoInsightClient = (function () {
84184
84199
  function CoveoInsightClient(opts, provider) {
84185
84200
  this.opts = opts;
@@ -84276,6 +84291,19 @@ var CoveoInsightClient = (function () {
84276
84291
  CoveoInsightClient.prototype.logResultsSort = function (metadata) {
84277
84292
  return this.logSearchEvent(SearchPageEvents.resultsSort, metadata);
84278
84293
  };
84294
+ CoveoInsightClient.prototype.logContextChanged = function (meta) {
84295
+ var context = extractContextFromMetadata(meta);
84296
+ var caseId = meta.caseId, caseNumber = meta.caseNumber;
84297
+ var metaToBeSent = __assign(__assign({ CaseId: caseId, CaseNumber: caseNumber }, (!!context.context_Case_Subject && { CaseSubject: context.context_Case_Subject })), context);
84298
+ return this.logSearchEvent(InsightEvents.contextChanged, metaToBeSent);
84299
+ };
84300
+ CoveoInsightClient.prototype.logExpandToFullUI = function (meta) {
84301
+ var context = extractContextFromMetadata(meta);
84302
+ var caseId = meta.caseId, caseNumber = meta.caseNumber, triggeredBy = meta.triggeredBy, fullSearchComponentName = meta.fullSearchComponentName;
84303
+ var metaToBeSent = __assign({ CaseId: caseId, CaseNumber: caseNumber, triggeredBy: triggeredBy,
84304
+ fullSearchComponentName: fullSearchComponentName }, (!!context.context_Case_Subject && { CaseSubject: context.context_Case_Subject }));
84305
+ return this.logCustomEvent(InsightEvents.expandToFullUI, metaToBeSent);
84306
+ };
84279
84307
  CoveoInsightClient.prototype.getBaseCustomEventRequest = function (metadata) {
84280
84308
  return __awaiter(this, void 0, void 0, function () {
84281
84309
  var _a;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "coveo.analytics",
3
- "version": "2.20.12",
3
+ "version": "2.20.13",
4
4
  "description": "📈 Coveo analytics client (node and browser compatible) ",
5
5
  "main": "dist/library.js",
6
6
  "module": "dist/library.es.js",
@@ -4,6 +4,7 @@ import {NoopAnalytics} from '../client/noopAnalytics';
4
4
  import {CustomEventsTypes, SearchPageEvents, StaticFilterToggleValueMetadata} from '../searchPage/searchPageEvents';
5
5
  import {CoveoInsightClient, InsightClientProvider} from './insightClient';
6
6
  import doNotTrack from '../donottrack';
7
+ import {InsightEvents} from './insightEvents';
7
8
 
8
9
  jest.mock('../donottrack', () => {
9
10
  return {
@@ -58,7 +59,7 @@ describe('InsightClient', () => {
58
59
  originLevel3: 'origin-level-3',
59
60
  });
60
61
 
61
- const expectMatchPayload = (actionCause: SearchPageEvents, meta = {}) => {
62
+ const expectMatchPayload = (actionCause: SearchPageEvents | InsightEvents, meta = {}) => {
62
63
  const [, {body}] = fetchMock.lastCall();
63
64
  const customData = {foo: 'bar', ...meta};
64
65
  expect(JSON.parse(body.toString())).toMatchObject({
@@ -74,7 +75,7 @@ describe('InsightClient', () => {
74
75
  });
75
76
  };
76
77
 
77
- const expectMatchCustomEventPayload = (actionCause: SearchPageEvents, meta = {}) => {
78
+ const expectMatchCustomEventPayload = (actionCause: SearchPageEvents | InsightEvents, meta = {}) => {
78
79
  const [, {body}] = fetchMock.lastCall();
79
80
  const customData = {foo: 'bar', ...meta};
80
81
  expect(JSON.parse(body.toString())).toMatchObject({
@@ -295,4 +296,43 @@ describe('InsightClient', () => {
295
296
  c.enable();
296
297
  expect(c.coveoAnalyticsClient instanceof CoveoAnalyticsClient).toBe(true);
297
298
  });
299
+
300
+ it('should send proper payload for #contextChanged', async () => {
301
+ const meta = {
302
+ caseId: '1234',
303
+ caseNumber: '5678',
304
+ caseContext: {Case_Subject: 'test subject', Case_Description: 'test description'},
305
+ };
306
+
307
+ const expectedMeta = {
308
+ CaseId: '1234',
309
+ CaseNumber: '5678',
310
+ CaseSubject: 'test subject',
311
+ context_Case_Subject: 'test subject',
312
+ context_Case_Description: 'test description',
313
+ };
314
+
315
+ await client.logContextChanged(meta);
316
+ expectMatchPayload(InsightEvents.contextChanged, expectedMeta);
317
+ });
318
+
319
+ it('should send proper payload for #expandToFullUI', async () => {
320
+ const meta = {
321
+ caseId: '1234',
322
+ caseNumber: '5678',
323
+ caseContext: {Case_Subject: 'test subject', Case_Description: 'test description'},
324
+ fullSearchComponentName: 'c__FullSearch',
325
+ triggeredBy: 'openFullSearchButton',
326
+ };
327
+
328
+ const expectedMeta = {
329
+ CaseId: '1234',
330
+ CaseNumber: '5678',
331
+ CaseSubject: 'test subject',
332
+ fullSearchComponentName: 'c__FullSearch',
333
+ triggeredBy: 'openFullSearchButton',
334
+ };
335
+ await client.logExpandToFullUI(meta);
336
+ expectMatchCustomEventPayload(InsightEvents.expandToFullUI, expectedMeta);
337
+ });
298
338
  });
@@ -17,6 +17,7 @@ import {
17
17
  CategoryFacetMetadata,
18
18
  StaticFilterToggleValueMetadata,
19
19
  } from '../searchPage/searchPageEvents';
20
+ import {ContextChangedMetadata, ExpandToFullUIMetadata, InsightEvents} from './insightEvents';
20
21
 
21
22
  export interface InsightClientProvider {
22
23
  getSearchEventRequestPayload: () => Omit<SearchEventRequest, 'actionCause' | 'searchQueryUid'>;
@@ -36,6 +37,16 @@ export interface InsightClientOptions extends ClientOptions {
36
37
  enableAnalytics: boolean;
37
38
  }
38
39
 
40
+ const extractContextFromMetadata = (meta: {caseContext: Record<string, string>}) => {
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
+
47
+ return context;
48
+ };
49
+
39
50
  export class CoveoInsightClient {
40
51
  public coveoAnalyticsClient: AnalyticsClient;
41
52
 
@@ -107,7 +118,7 @@ export class CoveoInsightClient {
107
118
  return this.logCustomEvent(SearchPageEvents.queryError, meta);
108
119
  }
109
120
 
110
- public async logCustomEvent(event: SearchPageEvents, metadata?: Record<string, any>) {
121
+ public async logCustomEvent(event: SearchPageEvents | InsightEvents, metadata?: Record<string, any>) {
111
122
  const customData = {...this.provider.getBaseMetadata(), ...metadata};
112
123
 
113
124
  const payload: CustomEventRequest = {
@@ -119,7 +130,7 @@ export class CoveoInsightClient {
119
130
  return this.coveoAnalyticsClient.sendCustomEvent(payload);
120
131
  }
121
132
 
122
- public async logSearchEvent(event: SearchPageEvents, metadata?: Record<string, any>) {
133
+ public async logSearchEvent(event: SearchPageEvents | InsightEvents, metadata?: Record<string, any>) {
123
134
  return this.coveoAnalyticsClient.sendSearchEvent(await this.getBaseSearchEventRequest(event, metadata));
124
135
  }
125
136
 
@@ -139,6 +150,33 @@ export class CoveoInsightClient {
139
150
  return this.logSearchEvent(SearchPageEvents.resultsSort, metadata);
140
151
  }
141
152
 
153
+ public logContextChanged(meta: ContextChangedMetadata) {
154
+ const context = extractContextFromMetadata(meta);
155
+
156
+ const {caseId, caseNumber} = meta;
157
+ const metaToBeSent = {
158
+ CaseId: caseId,
159
+ CaseNumber: caseNumber,
160
+ ...(!!context.context_Case_Subject && {CaseSubject: context.context_Case_Subject}),
161
+ ...context,
162
+ };
163
+ return this.logSearchEvent(InsightEvents.contextChanged, metaToBeSent);
164
+ }
165
+
166
+ public logExpandToFullUI(meta: ExpandToFullUIMetadata) {
167
+ const context = extractContextFromMetadata(meta);
168
+
169
+ const {caseId, caseNumber, triggeredBy, fullSearchComponentName} = meta;
170
+ const metaToBeSent = {
171
+ CaseId: caseId,
172
+ CaseNumber: caseNumber,
173
+ triggeredBy,
174
+ fullSearchComponentName,
175
+ ...(!!context.context_Case_Subject && {CaseSubject: context.context_Case_Subject}),
176
+ };
177
+ return this.logCustomEvent(InsightEvents.expandToFullUI, metaToBeSent);
178
+ }
179
+
142
180
  private async getBaseCustomEventRequest(metadata?: Record<string, any>) {
143
181
  return {
144
182
  ...(await this.getBaseEventRequest(metadata)),
@@ -147,7 +185,7 @@ export class CoveoInsightClient {
147
185
  }
148
186
 
149
187
  private async getBaseSearchEventRequest(
150
- event: SearchPageEvents,
188
+ event: SearchPageEvents | InsightEvents,
151
189
  metadata?: Record<string, any>
152
190
  ): Promise<SearchEventRequest> {
153
191
  return {
@@ -0,0 +1,23 @@
1
+ export enum InsightEvents {
2
+ /**
3
+ * Identifies the search event that gets logged when the query context is updated as a result of updating one of the case context fields.
4
+ */
5
+ contextChanged = 'contextChanged',
6
+ /**
7
+ * Identifies the event that gets logged when the user opens the full search page from the insight panel.
8
+ */
9
+ expandToFullUI = 'expandToFullUI',
10
+ }
11
+
12
+ interface CaseMetadata {
13
+ caseId: string;
14
+ caseNumber: string;
15
+ caseContext: Record<string, string>;
16
+ }
17
+
18
+ export interface ContextChangedMetadata extends CaseMetadata {}
19
+
20
+ export interface ExpandToFullUIMetadata extends CaseMetadata {
21
+ fullSearchComponentName: string;
22
+ triggeredBy: string;
23
+ }
@@ -1,4 +1,5 @@
1
1
  import {DocumentInformation, FacetStateRequest} from '../events';
2
+ import {InsightEvents} from '../insight/insightEvents';
2
3
 
3
4
  export enum SearchPageEvents {
4
5
  /**
@@ -263,7 +264,7 @@ export enum SearchPageEvents {
263
264
  showLessFoldedResults = 'showLessFoldedResults',
264
265
  }
265
266
 
266
- export const CustomEventsTypes: Partial<Record<SearchPageEvents, string>> = {
267
+ export const CustomEventsTypes: Partial<Record<SearchPageEvents | InsightEvents, string>> = {
267
268
  [SearchPageEvents.triggerNotify]: 'queryPipelineTriggers',
268
269
  [SearchPageEvents.triggerExecute]: 'queryPipelineTriggers',
269
270
  [SearchPageEvents.triggerQuery]: 'queryPipelineTriggers',
@@ -296,6 +297,7 @@ export const CustomEventsTypes: Partial<Record<SearchPageEvents, string>> = {
296
297
  [SearchPageEvents.recentResultClick]: 'recentlyClickedDocuments',
297
298
  [SearchPageEvents.clearRecentResults]: 'recentlyClickedDocuments',
298
299
  [SearchPageEvents.showLessFoldedResults]: 'folding',
300
+ [InsightEvents.expandToFullUI]: 'interface',
299
301
  };
300
302
 
301
303
  export interface StaticFilterMetadata {