@simplybusiness/services 0.20.1 → 0.21.1

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 (49) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/cjs/mocks/eventDefinitions.js +5 -21
  3. package/dist/cjs/mocks/eventDefinitions.js.map +1 -1
  4. package/dist/cjs/snowplow/Snowplow.js +41 -28
  5. package/dist/cjs/snowplow/Snowplow.js.map +1 -1
  6. package/dist/cjs/snowplow/contexts.js +52 -12
  7. package/dist/cjs/snowplow/contexts.js.map +1 -1
  8. package/dist/cjs/snowplow/event-definitions/index.js +10 -1
  9. package/dist/cjs/snowplow/event-definitions/index.js.map +1 -1
  10. package/dist/cjs/snowplow/event-definitions/personalised_cover.js +122 -0
  11. package/dist/cjs/snowplow/event-definitions/personalised_cover.js.map +1 -0
  12. package/dist/cjs/snowplow/event-definitions/qcp.js +8 -2
  13. package/dist/cjs/snowplow/event-definitions/qcp.js.map +1 -1
  14. package/dist/cjs/snowplow/event-definitions/questionnaire.js +4 -1
  15. package/dist/cjs/snowplow/event-definitions/questionnaire.js.map +1 -1
  16. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  17. package/dist/esm/mocks/eventDefinitions.js +5 -21
  18. package/dist/esm/mocks/eventDefinitions.js.map +1 -1
  19. package/dist/esm/snowplow/Snowplow.js +41 -28
  20. package/dist/esm/snowplow/Snowplow.js.map +1 -1
  21. package/dist/esm/snowplow/contexts.js +38 -9
  22. package/dist/esm/snowplow/contexts.js.map +1 -1
  23. package/dist/esm/snowplow/event-definitions/index.js +7 -1
  24. package/dist/esm/snowplow/event-definitions/index.js.map +1 -1
  25. package/dist/esm/snowplow/event-definitions/personalised_cover.js +131 -0
  26. package/dist/esm/snowplow/event-definitions/personalised_cover.js.map +1 -0
  27. package/dist/esm/snowplow/event-definitions/qcp.js +9 -22
  28. package/dist/esm/snowplow/event-definitions/qcp.js.map +1 -1
  29. package/dist/esm/snowplow/event-definitions/questionnaire.js +4 -1
  30. package/dist/esm/snowplow/event-definitions/questionnaire.js.map +1 -1
  31. package/dist/esm/snowplow/types.js.map +1 -1
  32. package/dist/types/mocks/eventDefinitions.d.ts +4 -19
  33. package/dist/types/snowplow/Snowplow.d.ts +7 -5
  34. package/dist/types/snowplow/contexts.d.ts +4 -3
  35. package/dist/types/snowplow/event-definitions/index.d.ts +1 -0
  36. package/dist/types/snowplow/event-definitions/personalised_cover.d.ts +22 -0
  37. package/dist/types/snowplow/event-definitions/qcp.d.ts +0 -20
  38. package/dist/types/snowplow/types.d.ts +3 -1
  39. package/package.json +16 -16
  40. package/src/mocks/eventDefinitions.ts +2 -25
  41. package/src/snowplow/Snowplow.ts +46 -29
  42. package/src/snowplow/contexts.test.ts +134 -6
  43. package/src/snowplow/contexts.ts +44 -14
  44. package/src/snowplow/event-definitions/index.ts +7 -0
  45. package/src/snowplow/event-definitions/personalised_cover.ts +142 -0
  46. package/src/snowplow/event-definitions/qcp.ts +2 -21
  47. package/src/snowplow/event-definitions/questionnaire.ts +1 -0
  48. package/src/snowplow/index.test.ts +40 -30
  49. package/src/snowplow/types.ts +4 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.21.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 9acf157: Upgrade dependencies
8
+ - Updated dependencies [9acf157]
9
+ - Updated dependencies [a5c2fbd]
10
+ - @simplybusiness/mobius@5.24.3
11
+
12
+ ## 0.21.0
13
+
14
+ ### Minor Changes
15
+
16
+ - bbbe357: Correctly set event contexts based on definitions
17
+
3
18
  ## 0.20.1
4
19
 
5
20
  ### Patch Changes
@@ -23,25 +23,6 @@ const _default = [
23
23
  };
24
24
  }
25
25
  },
26
- {
27
- name: "questionAnswered",
28
- type: "unstructured",
29
- makePayload: (params)=>{
30
- const { vertical, question, answer } = params;
31
- return {
32
- schema: "iglu:com.simplybusiness/form_question_answered/jsonschema/1-0-1",
33
- data: {
34
- site: "",
35
- vertical: vertical || "business",
36
- page_index: 1,
37
- page_name: "Coverage diagnosis questionnaire",
38
- section_name: "Coverage diagnosis questionnaire",
39
- question,
40
- answer
41
- }
42
- };
43
- }
44
- },
45
26
  {
46
27
  name: "questionAnswered",
47
28
  type: "unstructured",
@@ -61,7 +42,10 @@ const _default = [
61
42
  vertical: context.vertical
62
43
  }
63
44
  };
64
- }
45
+ },
46
+ contexts: [
47
+ "distributionChannelContext"
48
+ ]
65
49
  },
66
50
  {
67
51
  name: "primaryDetailSelected",
@@ -69,7 +53,7 @@ const _default = [
69
53
  makePayload: (params)=>{
70
54
  const { context, answer, vertical } = params;
71
55
  const { site } = context;
72
- let verticalName = vertical ? vertical : context.vertical;
56
+ let verticalName = vertical || context.vertical;
73
57
  if (verticalName.toLowerCase().indexOf("landlord") > -1) {
74
58
  verticalName = answer === "residential" ? "Landlord" : "Commercial landlord";
75
59
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/mocks/eventDefinitions.ts"],"sourcesContent":["import { ParamsType } from \"../snowplow\";\nimport { redact } from \"../snowplow/event-definitions/redaction\";\n\nexport default [\n {\n name: \"navButtonClicked\",\n type: \"structured\",\n makePayload: (params: { label: \"next\" | \"back\" | \"redirect\" }) => {\n const { label } = params;\n return {\n category: \"navigation\",\n action: \"thankyou_navigation_button_click\",\n label,\n property: \"test-property\",\n };\n },\n },\n {\n name: \"questionAnswered\",\n type: \"unstructured\",\n makePayload: (params: {\n vertical?: string;\n question: string;\n answer?: string;\n }) => {\n const { vertical, question, answer } = params;\n return {\n schema:\n \"iglu:com.simplybusiness/form_question_answered/jsonschema/1-0-1\",\n data: {\n site: \"\",\n vertical: vertical || \"business\",\n page_index: 1,\n page_name: \"Coverage diagnosis questionnaire\",\n section_name: \"Coverage diagnosis questionnaire\",\n question,\n answer,\n },\n };\n },\n },\n {\n name: \"questionAnswered\",\n type: \"unstructured\",\n makePayload: (params: ParamsType) => {\n const { section, context } = params as ParamsType;\n const { question, answer } = redact(params as ParamsType);\n\n return {\n schema:\n \"iglu:com.simplybusiness/form_question_answered/jsonschema/1-0-3\",\n data: {\n site: context.site,\n page_index: 1,\n page_name: \"quick_to_quote\",\n submitted_from: \"quick_to_quote_experiment\",\n section_name: section,\n question,\n answer,\n vertical: context.vertical,\n },\n };\n },\n },\n {\n name: \"primaryDetailSelected\",\n type: \"unstructured\",\n makePayload: (params: ParamsType) => {\n const { context, answer, vertical } = params as ParamsType;\n const { site } = context;\n let verticalName = vertical ? vertical : context.vertical;\n\n if (verticalName.toLowerCase().indexOf(\"landlord\") > -1) {\n verticalName =\n answer === \"residential\" ? \"Landlord\" : \"Commercial landlord\";\n }\n\n return {\n schema:\n \"iglu:com.simplybusiness/primary_detail_selected/jsonschema/1-3-0\",\n data: {\n site,\n vertical: verticalName,\n primary_detail: answer,\n },\n };\n },\n },\n {\n name: \"helpTextOpened\",\n type: \"unstructured\",\n makePayload: (params: ParamsType) => {\n const { primaryText, label, context, helpText } = params as ParamsType;\n\n return {\n schema: \"iglu:com.simplybusiness/help_text_opened/jsonschema/1-1-0\",\n data: {\n vertical: context.vertical,\n site: context.site,\n help_text: helpText,\n primary_text: primaryText,\n label,\n page_name: \"quick_to_quote\",\n },\n };\n },\n },\n];\n"],"names":["name","type","makePayload","params","label","category","action","property","vertical","question","answer","schema","data","site","page_index","page_name","section_name","section","context","redact","submitted_from","verticalName","toLowerCase","indexOf","primary_detail","primaryText","helpText","help_text","primary_text"],"mappings":";;;;+BAGA;;;eAAA;;;2BAFuB;MAEvB,WAAe;IACb;QACEA,MAAM;QACNC,MAAM;QACNC,aAAa,CAACC;YACZ,MAAM,EAAEC,KAAK,EAAE,GAAGD;YAClB,OAAO;gBACLE,UAAU;gBACVC,QAAQ;gBACRF;gBACAG,UAAU;YACZ;QACF;IACF;IACA;QACEP,MAAM;QACNC,MAAM;QACNC,aAAa,CAACC;YAKZ,MAAM,EAAEK,QAAQ,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAAGP;YACvC,OAAO;gBACLQ,QACE;gBACFC,MAAM;oBACJC,MAAM;oBACNL,UAAUA,YAAY;oBACtBM,YAAY;oBACZC,WAAW;oBACXC,cAAc;oBACdP;oBACAC;gBACF;YACF;QACF;IACF;IACA;QACEV,MAAM;QACNC,MAAM;QACNC,aAAa,CAACC;YACZ,MAAM,EAAEc,OAAO,EAAEC,OAAO,EAAE,GAAGf;YAC7B,MAAM,EAAEM,QAAQ,EAAEC,MAAM,EAAE,GAAGS,IAAAA,iBAAM,EAAChB;YAEpC,OAAO;gBACLQ,QACE;gBACFC,MAAM;oBACJC,MAAMK,QAAQL,IAAI;oBAClBC,YAAY;oBACZC,WAAW;oBACXK,gBAAgB;oBAChBJ,cAAcC;oBACdR;oBACAC;oBACAF,UAAUU,QAAQV,QAAQ;gBAC5B;YACF;QACF;IACF;IACA;QACER,MAAM;QACNC,MAAM;QACNC,aAAa,CAACC;YACZ,MAAM,EAAEe,OAAO,EAAER,MAAM,EAAEF,QAAQ,EAAE,GAAGL;YACtC,MAAM,EAAEU,IAAI,EAAE,GAAGK;YACjB,IAAIG,eAAeb,WAAWA,WAAWU,QAAQV,QAAQ;YAEzD,IAAIa,aAAaC,WAAW,GAAGC,OAAO,CAAC,cAAc,CAAC,GAAG;gBACvDF,eACEX,WAAW,gBAAgB,aAAa;YAC5C;YAEA,OAAO;gBACLC,QACE;gBACFC,MAAM;oBACJC;oBACAL,UAAUa;oBACVG,gBAAgBd;gBAClB;YACF;QACF;IACF;IACA;QACEV,MAAM;QACNC,MAAM;QACNC,aAAa,CAACC;YACZ,MAAM,EAAEsB,WAAW,EAAErB,KAAK,EAAEc,OAAO,EAAEQ,QAAQ,EAAE,GAAGvB;YAElD,OAAO;gBACLQ,QAAQ;gBACRC,MAAM;oBACJJ,UAAUU,QAAQV,QAAQ;oBAC1BK,MAAMK,QAAQL,IAAI;oBAClBc,WAAWD;oBACXE,cAAcH;oBACdrB;oBACAW,WAAW;gBACb;YACF;QACF;IACF;CACD"}
1
+ {"version":3,"sources":["../../../src/mocks/eventDefinitions.ts"],"sourcesContent":["import { ParamsType } from \"../snowplow\";\nimport { redact } from \"../snowplow/event-definitions/redaction\";\n\nexport default [\n {\n name: \"navButtonClicked\",\n type: \"structured\",\n makePayload: (params: { label: \"next\" | \"back\" | \"redirect\" }) => {\n const { label } = params;\n return {\n category: \"navigation\",\n action: \"thankyou_navigation_button_click\",\n label,\n property: \"test-property\",\n };\n },\n },\n {\n name: \"questionAnswered\",\n type: \"unstructured\",\n makePayload: (params: ParamsType) => {\n const { section, context } = params as ParamsType;\n const { question, answer } = redact(params as ParamsType);\n\n return {\n schema:\n \"iglu:com.simplybusiness/form_question_answered/jsonschema/1-0-3\",\n data: {\n site: context.site,\n page_index: 1,\n page_name: \"quick_to_quote\",\n submitted_from: \"quick_to_quote_experiment\",\n section_name: section,\n question,\n answer,\n vertical: context.vertical,\n },\n };\n },\n contexts: [\"distributionChannelContext\"],\n },\n {\n name: \"primaryDetailSelected\",\n type: \"unstructured\",\n makePayload: (params: ParamsType) => {\n const { context, answer, vertical } = params as ParamsType;\n const { site } = context;\n let verticalName = vertical || context.vertical;\n\n if (verticalName.toLowerCase().indexOf(\"landlord\") > -1) {\n verticalName =\n answer === \"residential\" ? \"Landlord\" : \"Commercial landlord\";\n }\n\n return {\n schema:\n \"iglu:com.simplybusiness/primary_detail_selected/jsonschema/1-3-0\",\n data: {\n site,\n vertical: verticalName,\n primary_detail: answer,\n },\n };\n },\n },\n {\n name: \"helpTextOpened\",\n type: \"unstructured\",\n makePayload: (params: ParamsType) => {\n const { primaryText, label, context, helpText } = params as ParamsType;\n\n return {\n schema: \"iglu:com.simplybusiness/help_text_opened/jsonschema/1-1-0\",\n data: {\n vertical: context.vertical,\n site: context.site,\n help_text: helpText,\n primary_text: primaryText,\n label,\n page_name: \"quick_to_quote\",\n },\n };\n },\n },\n];\n"],"names":["name","type","makePayload","params","label","category","action","property","section","context","question","answer","redact","schema","data","site","page_index","page_name","submitted_from","section_name","vertical","contexts","verticalName","toLowerCase","indexOf","primary_detail","primaryText","helpText","help_text","primary_text"],"mappings":";;;;+BAGA;;;eAAA;;;2BAFuB;MAEvB,WAAe;IACb;QACEA,MAAM;QACNC,MAAM;QACNC,aAAa,CAACC;YACZ,MAAM,EAAEC,KAAK,EAAE,GAAGD;YAClB,OAAO;gBACLE,UAAU;gBACVC,QAAQ;gBACRF;gBACAG,UAAU;YACZ;QACF;IACF;IACA;QACEP,MAAM;QACNC,MAAM;QACNC,aAAa,CAACC;YACZ,MAAM,EAAEK,OAAO,EAAEC,OAAO,EAAE,GAAGN;YAC7B,MAAM,EAAEO,QAAQ,EAAEC,MAAM,EAAE,GAAGC,IAAAA,iBAAM,EAACT;YAEpC,OAAO;gBACLU,QACE;gBACFC,MAAM;oBACJC,MAAMN,QAAQM,IAAI;oBAClBC,YAAY;oBACZC,WAAW;oBACXC,gBAAgB;oBAChBC,cAAcX;oBACdE;oBACAC;oBACAS,UAAUX,QAAQW,QAAQ;gBAC5B;YACF;QACF;QACAC,UAAU;YAAC;SAA6B;IAC1C;IACA;QACErB,MAAM;QACNC,MAAM;QACNC,aAAa,CAACC;YACZ,MAAM,EAAEM,OAAO,EAAEE,MAAM,EAAES,QAAQ,EAAE,GAAGjB;YACtC,MAAM,EAAEY,IAAI,EAAE,GAAGN;YACjB,IAAIa,eAAeF,YAAYX,QAAQW,QAAQ;YAE/C,IAAIE,aAAaC,WAAW,GAAGC,OAAO,CAAC,cAAc,CAAC,GAAG;gBACvDF,eACEX,WAAW,gBAAgB,aAAa;YAC5C;YAEA,OAAO;gBACLE,QACE;gBACFC,MAAM;oBACJC;oBACAK,UAAUE;oBACVG,gBAAgBd;gBAClB;YACF;QACF;IACF;IACA;QACEX,MAAM;QACNC,MAAM;QACNC,aAAa,CAACC;YACZ,MAAM,EAAEuB,WAAW,EAAEtB,KAAK,EAAEK,OAAO,EAAEkB,QAAQ,EAAE,GAAGxB;YAElD,OAAO;gBACLU,QAAQ;gBACRC,MAAM;oBACJM,UAAUX,QAAQW,QAAQ;oBAC1BL,MAAMN,QAAQM,IAAI;oBAClBa,WAAWD;oBACXE,cAAcH;oBACdtB;oBACAa,WAAW;gBACb;YACF;QACF;IACF;CACD"}
@@ -9,6 +9,7 @@ Object.defineProperty(exports, "Snowplow", {
9
9
  }
10
10
  });
11
11
  const _browsertracker = require("@snowplow/browser-tracker");
12
+ const _contexts = require("./contexts");
12
13
  function _define_property(obj, key, value) {
13
14
  if (key in obj) {
14
15
  Object.defineProperty(obj, key, {
@@ -24,16 +25,12 @@ function _define_property(obj, key, value) {
24
25
  }
25
26
  class Snowplow {
26
27
  setContexts(contexts) {
27
- var _this_contexts;
28
- this.contexts = contexts;
29
- // Update identity context
30
- const index = (_this_contexts = this.contexts) === null || _this_contexts === void 0 ? void 0 : _this_contexts.findIndex((ctx)=>{
31
- var _ctx_schema;
32
- return (_ctx_schema = ctx.schema) === null || _ctx_schema === void 0 ? void 0 : _ctx_schema.includes("identity_context");
33
- });
34
- if (index > -1) {
35
- this.contexts[index].data.domain_userid = this.uid;
36
- }
28
+ this.contexts = (0, _contexts.updateIdentityContext)(contexts, this.uid);
29
+ this.pvContext = Object.values(this.contexts);
30
+ this.structContext = (0, _contexts.makeContexts)([
31
+ "distributionChannelContext",
32
+ "serviceChannelContext"
33
+ ], this.contexts);
37
34
  return this;
38
35
  }
39
36
  // Send a page view event
@@ -41,7 +38,7 @@ class Snowplow {
41
38
  if (this.trackPageView) {
42
39
  await (0, _browsertracker.trackPageView)({
43
40
  ...event,
44
- context: this.contexts
41
+ context: this.pvContext
45
42
  }, [
46
43
  this.avalancheTrackerName
47
44
  ]);
@@ -52,29 +49,39 @@ class Snowplow {
52
49
  async trackEvent(event) {
53
50
  await (0, _browsertracker.trackStructEvent)({
54
51
  ...event,
55
- context: this.contexts
52
+ context: this.structContext
56
53
  }, [
57
54
  this.bronzeAvalancheTrackerName
58
55
  ]);
59
56
  return this;
60
57
  }
61
58
  // Send a custom event with defined schema and optional contexts
62
- async trackUnstructEvent(event) {
59
+ async trackUnstructEvent(event, contexts) {
63
60
  if (!event) {
64
61
  return this;
65
62
  }
66
- await (0, _browsertracker.trackSelfDescribingEvent)({
67
- event,
68
- context: this.contexts
69
- }, [
70
- this.avalancheTrackerName
71
- ]);
63
+ if (contexts && Array.isArray(contexts) && contexts.length > 0) {
64
+ // Add context to the event
65
+ const context = (0, _contexts.makeContexts)(contexts, this.contexts);
66
+ await (0, _browsertracker.trackSelfDescribingEvent)({
67
+ event,
68
+ context
69
+ }, [
70
+ this.avalancheTrackerName
71
+ ]);
72
+ } else {
73
+ await (0, _browsertracker.trackSelfDescribingEvent)({
74
+ event
75
+ }, [
76
+ this.avalancheTrackerName
77
+ ]);
78
+ }
72
79
  return this;
73
80
  }
74
81
  addEventHandlers(eventDefinitions) {
75
82
  // Add server context to makePayload functions
76
83
  const context = this.serverData;
77
- eventDefinitions.forEach(({ name, type, makePayload })=>{
84
+ eventDefinitions.forEach(({ name, type, makePayload, contexts })=>{
78
85
  // Convert type into relevant function
79
86
  if (type === "structured") {
80
87
  this.addEventHandler(name, (params)=>{
@@ -85,10 +92,15 @@ class Snowplow {
85
92
  });
86
93
  } else {
87
94
  this.addEventHandler(name, (params)=>{
88
- this.trackUnstructEvent(makePayload({
95
+ const payload = makePayload({
89
96
  ...params,
90
97
  context
91
- }));
98
+ });
99
+ if (contexts && Array.isArray(contexts) && contexts.length > 0) {
100
+ this.trackUnstructEvent(payload, contexts);
101
+ } else {
102
+ this.trackUnstructEvent(payload);
103
+ }
92
104
  });
93
105
  }
94
106
  });
@@ -103,8 +115,9 @@ class Snowplow {
103
115
  return this;
104
116
  }
105
117
  trigger(name, params) {
106
- if (this.eventHandlers[name]) {
107
- this.eventHandlers[name](params);
118
+ const handler = this.eventHandlers[name];
119
+ if (Object.prototype.hasOwnProperty.call(this.eventHandlers, name) && typeof handler === "function") {
120
+ handler(params);
108
121
  }
109
122
  return this;
110
123
  }
@@ -121,13 +134,13 @@ class Snowplow {
121
134
  _define_property(this, "pvAvalancheTrackerName", "sb-ava-pv");
122
135
  _define_property(this, "uid", "");
123
136
  _define_property(this, "trackPageView", false);
124
- _define_property(this, "contexts", []);
137
+ _define_property(this, "contexts", {});
138
+ _define_property(this, "pvContext", []);
139
+ _define_property(this, "structContext", []);
125
140
  _define_property(this, "serverData", {});
126
141
  _define_property(this, "eventHandlers", {});
127
142
  if (!props) return;
128
- const { appId, cookieDomain, avalancheCollector, eventMethod, uid, postPath, // includeGAContext,
129
- // trackActivity,
130
- trackPageView: tpv } = props;
143
+ const { appId, cookieDomain, avalancheCollector, eventMethod, uid, postPath, trackPageView: tpv } = props;
131
144
  this.uid = uid;
132
145
  this.trackPageView = tpv;
133
146
  this.serverData = (props === null || props === void 0 ? void 0 : (_props_pageViewContext = props.pageViewContext) === null || _props_pageViewContext === void 0 ? void 0 : _props_pageViewContext.data) || {};
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/snowplow/Snowplow.ts"],"sourcesContent":["import {\n SelfDescribingJson,\n StructuredEvent,\n TrackerConfiguration,\n newTracker,\n setCookiePath,\n setUserId,\n trackPageView,\n trackSelfDescribingEvent,\n trackStructEvent,\n PageViewEvent,\n} from \"@snowplow/browser-tracker\";\nimport { EventDefinition, TrackingProps } from \"./types\";\n\nexport type FrontOfficeStructuredEvent = StructuredEvent & {\n serviceChannelIdentifier: string;\n};\n\n/**\n * This class is an abstraction which wraps Snowplow\n * and exposes common methods with other services:\n * - trackEvent : sends a standard payload\n * - trackUnstructEvent : sends a payload for custom schema\n */\nexport class Snowplow {\n avalancheTrackerName = \"sb-ava\";\n\n bronzeAvalancheTrackerName = \"sb-ava-br\";\n\n pvAvalancheTrackerName = \"sb-ava-pv\";\n\n uid: unknown = \"\";\n\n trackPageView: boolean = false;\n\n contexts: SelfDescribingJson<Record<string, unknown>>[] = [];\n\n serverData: Record<string, unknown> = {};\n\n eventHandlers: Record<string, (params?: Record<string, unknown>) => void> =\n {};\n\n static instance: Snowplow | undefined;\n\n constructor(props?: TrackingProps) {\n if (!props) return;\n\n const {\n appId,\n cookieDomain,\n avalancheCollector,\n eventMethod,\n uid,\n postPath,\n // includeGAContext,\n // trackActivity,\n trackPageView: tpv,\n } = props;\n this.uid = uid;\n this.trackPageView = tpv;\n this.serverData = props?.pageViewContext?.data || {};\n\n // Set options\n const stateStorageStrategy = \"cookieAndLocalStorage\";\n const baseOptions: TrackerConfiguration = {\n appId,\n cookieDomain,\n eventMethod,\n stateStorageStrategy,\n postPath,\n };\n // Initialize trackers\n newTracker(this.avalancheTrackerName, avalancheCollector, baseOptions);\n\n newTracker(\n this.bronzeAvalancheTrackerName,\n avalancheCollector,\n baseOptions,\n );\n\n // Page view tracker\n newTracker(this.pvAvalancheTrackerName, avalancheCollector, {\n ...baseOptions,\n eventMethod: eventMethod === \"post\" ? \"beacon\" : eventMethod,\n });\n\n setCookiePath(\"/\");\n if (uid) {\n setUserId(uid);\n }\n // Create a singleton instance\n Snowplow.instance = this;\n }\n\n setContexts(contexts: SelfDescribingJson<Record<string, unknown>>[]) {\n this.contexts = contexts;\n // Update identity context\n const index = this.contexts?.findIndex(ctx =>\n ctx.schema?.includes(\"identity_context\"),\n );\n if (index > -1) {\n this.contexts[index].data.domain_userid = this.uid;\n }\n return this;\n }\n\n // Send a page view event\n async trackView(event?: PageViewEvent) {\n if (this.trackPageView) {\n await trackPageView({ ...event, context: this.contexts }, [\n this.avalancheTrackerName,\n ]);\n }\n return this;\n }\n\n // Send a structured event with contexts\n async trackEvent(event: StructuredEvent) {\n await trackStructEvent({ ...event, context: this.contexts }, [\n this.bronzeAvalancheTrackerName,\n ]);\n return this;\n }\n\n // Send a custom event with defined schema and optional contexts\n async trackUnstructEvent(event: SelfDescribingJson<Record<string, unknown>>) {\n if (!event) {\n return this;\n }\n await trackSelfDescribingEvent({ event, context: this.contexts }, [\n this.avalancheTrackerName,\n ]);\n return this;\n }\n\n addEventHandlers(eventDefinitions: EventDefinition[]) {\n // Add server context to makePayload functions\n const context = this.serverData;\n\n eventDefinitions.forEach(({ name, type, makePayload }) => {\n // Convert type into relevant function\n if (type === \"structured\") {\n this.addEventHandler(name, (params?: Record<string, unknown>) => {\n this.trackEvent(\n makePayload({\n ...params,\n context,\n }) as StructuredEvent,\n );\n });\n } else {\n this.addEventHandler(name, (params?: Record<string, unknown>) => {\n this.trackUnstructEvent(\n makePayload({\n ...params,\n context,\n }) as SelfDescribingJson<Record<string, unknown>>,\n );\n });\n }\n });\n return this;\n }\n\n private addEventHandler(\n name: string,\n handler: (params?: Record<string, unknown>) => void,\n ) {\n this.eventHandlers[name] = handler;\n return this;\n }\n\n private removeEventHandler(name: string) {\n delete this.eventHandlers[name];\n return this;\n }\n\n trigger(name: string, params?: Record<string, unknown>) {\n if (this.eventHandlers[name]) {\n this.eventHandlers[name](params);\n }\n return this;\n }\n\n static getInstance(props?: TrackingProps) {\n if (!Snowplow.instance) {\n Snowplow.instance = new Snowplow(props);\n }\n return Snowplow.instance;\n }\n}\n"],"names":["Snowplow","setContexts","contexts","index","findIndex","ctx","schema","includes","data","domain_userid","uid","trackView","event","trackPageView","context","avalancheTrackerName","trackEvent","trackStructEvent","bronzeAvalancheTrackerName","trackUnstructEvent","trackSelfDescribingEvent","addEventHandlers","eventDefinitions","serverData","forEach","name","type","makePayload","addEventHandler","params","handler","eventHandlers","removeEventHandler","trigger","getInstance","props","instance","constructor","pvAvalancheTrackerName","appId","cookieDomain","avalancheCollector","eventMethod","postPath","tpv","pageViewContext","stateStorageStrategy","baseOptions","newTracker","setCookiePath","setUserId"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/snowplow/Snowplow.ts"],"sourcesContent":["import {\n PageViewEvent,\n StructuredEvent,\n TrackerConfiguration,\n newTracker,\n setCookiePath,\n setUserId,\n trackPageView,\n trackSelfDescribingEvent,\n trackStructEvent,\n} from \"@snowplow/browser-tracker\";\nimport { makeContexts, updateIdentityContext } from \"./contexts\";\nimport { EventDefinition, SerialisedEvent, TrackingProps } from \"./types\";\n\nexport type FrontOfficeStructuredEvent = StructuredEvent & {\n serviceChannelIdentifier: string;\n};\n\n/**\n * This class is an abstraction which wraps Snowplow\n * and exposes common methods with other services:\n * - trackEvent : sends a standard payload\n * - trackUnstructEvent : sends a payload for custom schema\n */\nexport class Snowplow {\n avalancheTrackerName = \"sb-ava\";\n\n bronzeAvalancheTrackerName = \"sb-ava-br\";\n\n pvAvalancheTrackerName = \"sb-ava-pv\";\n\n uid: unknown = \"\";\n\n trackPageView: boolean = false;\n\n contexts: Record<string, SerialisedEvent> = {};\n\n pvContext: SerialisedEvent[] = [];\n\n structContext: SerialisedEvent[] = [];\n\n serverData: Record<string, unknown> = {};\n\n eventHandlers: Record<string, (params?: Record<string, unknown>) => void> =\n {};\n\n static instance: Snowplow | undefined;\n\n constructor(props?: TrackingProps) {\n if (!props) return;\n\n const {\n appId,\n cookieDomain,\n avalancheCollector,\n eventMethod,\n uid,\n postPath,\n trackPageView: tpv,\n } = props;\n this.uid = uid;\n this.trackPageView = tpv;\n this.serverData = props?.pageViewContext?.data || {};\n\n // Set options\n const stateStorageStrategy = \"cookieAndLocalStorage\";\n const baseOptions: TrackerConfiguration = {\n appId,\n cookieDomain,\n eventMethod,\n stateStorageStrategy,\n postPath,\n };\n // Initialize trackers\n newTracker(this.avalancheTrackerName, avalancheCollector, baseOptions);\n\n newTracker(\n this.bronzeAvalancheTrackerName,\n avalancheCollector,\n baseOptions,\n );\n\n // Page view tracker\n newTracker(this.pvAvalancheTrackerName, avalancheCollector, {\n ...baseOptions,\n eventMethod: eventMethod === \"post\" ? \"beacon\" : eventMethod,\n });\n\n setCookiePath(\"/\");\n if (uid) {\n setUserId(uid);\n }\n // Create a singleton instance\n Snowplow.instance = this;\n }\n\n setContexts(contexts: Record<string, SerialisedEvent>) {\n this.contexts = updateIdentityContext(contexts, this.uid);\n this.pvContext = Object.values(this.contexts);\n this.structContext = makeContexts(\n [\"distributionChannelContext\", \"serviceChannelContext\"],\n this.contexts,\n );\n return this;\n }\n\n // Send a page view event\n async trackView(event?: PageViewEvent) {\n if (this.trackPageView) {\n await trackPageView({ ...event, context: this.pvContext }, [\n this.avalancheTrackerName,\n ]);\n }\n return this;\n }\n\n // Send a structured event with contexts\n async trackEvent(event: StructuredEvent) {\n await trackStructEvent({ ...event, context: this.structContext }, [\n this.bronzeAvalancheTrackerName,\n ]);\n return this;\n }\n\n // Send a custom event with defined schema and optional contexts\n async trackUnstructEvent(event: SerialisedEvent, contexts?: string[]) {\n if (!event) {\n return this;\n }\n\n if (contexts && Array.isArray(contexts) && contexts.length > 0) {\n // Add context to the event\n const context = makeContexts(contexts!, this.contexts);\n\n await trackSelfDescribingEvent({ event, context }, [\n this.avalancheTrackerName,\n ]);\n } else {\n await trackSelfDescribingEvent({ event }, [this.avalancheTrackerName]);\n }\n return this;\n }\n\n addEventHandlers(eventDefinitions: EventDefinition[]) {\n // Add server context to makePayload functions\n const context = this.serverData;\n\n eventDefinitions.forEach(({ name, type, makePayload, contexts }) => {\n // Convert type into relevant function\n if (type === \"structured\") {\n this.addEventHandler(name, (params?: Record<string, unknown>) => {\n this.trackEvent(\n makePayload({\n ...params,\n context,\n }) as StructuredEvent,\n );\n });\n } else {\n this.addEventHandler(name, (params?: Record<string, unknown>) => {\n const payload = makePayload({\n ...params,\n context,\n }) as SerialisedEvent;\n\n if (contexts && Array.isArray(contexts) && contexts.length > 0) {\n this.trackUnstructEvent(payload, contexts);\n } else {\n this.trackUnstructEvent(payload);\n }\n });\n }\n });\n return this;\n }\n\n private addEventHandler(\n name: string,\n handler: (params?: Record<string, unknown>) => void,\n ) {\n this.eventHandlers[name] = handler;\n return this;\n }\n\n private removeEventHandler(name: string) {\n delete this.eventHandlers[name];\n return this;\n }\n\n trigger(name: string, params?: Record<string, unknown>) {\n const handler = this.eventHandlers[name];\n\n if (\n Object.prototype.hasOwnProperty.call(this.eventHandlers, name) &&\n typeof handler === \"function\"\n ) {\n handler(params);\n }\n return this;\n }\n\n static getInstance(props?: TrackingProps) {\n if (!Snowplow.instance) {\n Snowplow.instance = new Snowplow(props);\n }\n return Snowplow.instance;\n }\n}\n"],"names":["Snowplow","setContexts","contexts","updateIdentityContext","uid","pvContext","Object","values","structContext","makeContexts","trackView","event","trackPageView","context","avalancheTrackerName","trackEvent","trackStructEvent","bronzeAvalancheTrackerName","trackUnstructEvent","Array","isArray","length","trackSelfDescribingEvent","addEventHandlers","eventDefinitions","serverData","forEach","name","type","makePayload","addEventHandler","params","payload","handler","eventHandlers","removeEventHandler","trigger","prototype","hasOwnProperty","call","getInstance","props","instance","constructor","pvAvalancheTrackerName","appId","cookieDomain","avalancheCollector","eventMethod","postPath","tpv","pageViewContext","data","stateStorageStrategy","baseOptions","newTracker","setCookiePath","setUserId"],"mappings":"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"}
@@ -2,27 +2,67 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- Object.defineProperty(exports, "getContexts", {
6
- enumerable: true,
7
- get: function() {
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ getContexts: function() {
8
13
  return getContexts;
14
+ },
15
+ makeContexts: function() {
16
+ return makeContexts;
17
+ },
18
+ updateIdentityContext: function() {
19
+ return updateIdentityContext;
9
20
  }
10
21
  });
11
22
  const _utils = require("../utils");
12
23
  const getContexts = (config)=>{
13
- const contexts = config && Object.entries(config).filter(([key])=>key.includes("Context") && key !== "includeGAContext").map(([_key, value])=>{
24
+ // Create an object that only contains Context keys
25
+ // and snake_case the keys
26
+ const contextEntries = Object.entries(config || {}).filter(([key])=>key.includes("Context") && key !== "includeGAContext").reduce((acc, [key, value])=>{
14
27
  if (typeof value === "object") {
15
- return (0, _utils.snakeCaseKeys)({
16
- ...value
17
- });
28
+ return {
29
+ ...acc,
30
+ [key]: (0, _utils.snakeCaseKeys)({
31
+ ...value
32
+ })
33
+ };
18
34
  }
19
- return (0, _utils.snakeCaseKeys)({
20
- data: {
21
- service_channel_identifier: value
22
- }
23
- });
35
+ return {
36
+ ...acc,
37
+ [key]: (0, _utils.snakeCaseKeys)({
38
+ data: {
39
+ service_channel_identifier: value
40
+ }
41
+ })
42
+ };
43
+ }, {});
44
+ return contextEntries;
45
+ };
46
+ const updateIdentityContext = (contexts, uid)=>{
47
+ const index = Object.keys(contexts).findIndex((ctx)=>{
48
+ var _contexts_ctx_schema;
49
+ return (_contexts_ctx_schema = contexts[ctx].schema) === null || _contexts_ctx_schema === void 0 ? void 0 : _contexts_ctx_schema.includes("identity_context");
24
50
  });
51
+ if (index > -1) {
52
+ const key = Object.keys(contexts)[index];
53
+ return {
54
+ ...contexts,
55
+ [key]: {
56
+ ...contexts[key],
57
+ data: {
58
+ ...contexts[key].data,
59
+ domain_userid: uid
60
+ }
61
+ }
62
+ };
63
+ }
25
64
  return contexts;
26
65
  };
66
+ const makeContexts = (keys, config)=>(keys || []).map((key)=>config[key]);
27
67
 
28
68
  //# sourceMappingURL=contexts.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/snowplow/contexts.ts"],"sourcesContent":["import { SelfDescribingJson } from \"@snowplow/browser-tracker\";\nimport { TrackingProps } from \"./types\";\nimport { snakeCaseKeys } from \"../utils\";\n\nexport const getContexts = (\n config: TrackingProps,\n): SelfDescribingJson<Record<string, unknown>>[] => {\n const contexts =\n config &&\n Object.entries(config)\n .filter(([key]) => key.includes(\"Context\") && key !== \"includeGAContext\")\n .map(([_key, value]) => {\n if (typeof value === \"object\") {\n return snakeCaseKeys(({ ...value }));\n }\n return snakeCaseKeys({ data: { service_channel_identifier: value } });\n });\n\n return contexts as unknown as SelfDescribingJson<Record<string, unknown>>[];\n};\n"],"names":["getContexts","config","contexts","Object","entries","filter","key","includes","map","_key","value","snakeCaseKeys","data","service_channel_identifier"],"mappings":";;;;+BAIaA;;;eAAAA;;;uBAFiB;AAEvB,MAAMA,cAAc,CACzBC;IAEA,MAAMC,WACJD,UACAE,OAAOC,OAAO,CAACH,QACZI,MAAM,CAAC,CAAC,CAACC,IAAI,GAAKA,IAAIC,QAAQ,CAAC,cAAcD,QAAQ,oBACrDE,GAAG,CAAC,CAAC,CAACC,MAAMC,MAAM;QACjB,IAAI,OAAOA,UAAU,UAAU;YAC7B,OAAOC,IAAAA,oBAAa,EAAE;gBAAE,GAAGD,KAAK;YAAC;QACnC;QACA,OAAOC,IAAAA,oBAAa,EAAC;YAAEC,MAAM;gBAAEC,4BAA4BH;YAAM;QAAE;IACrE;IAEJ,OAAOR;AACT"}
1
+ {"version":3,"sources":["../../../src/snowplow/contexts.ts"],"sourcesContent":["import { snakeCaseKeys } from \"../utils\";\nimport { SerialisedEvent, TrackingProps } from \"./types\";\n\nexport const getContexts = (\n config: TrackingProps,\n): Record<string, SerialisedEvent> => {\n // Create an object that only contains Context keys\n // and snake_case the keys\n const contextEntries = Object.entries(config || {})\n .filter(([key]) => key.includes(\"Context\") && key !== \"includeGAContext\")\n .reduce((acc, [key, value]) => {\n if (typeof value === \"object\") {\n return { ...acc, [key]: snakeCaseKeys({ ...value }) };\n }\n return {\n ...acc,\n [key]: snakeCaseKeys({ data: { service_channel_identifier: value } }),\n };\n }, {});\n\n return contextEntries as Record<string, SerialisedEvent>;\n};\n\nexport const updateIdentityContext = (\n contexts: Record<string, SerialisedEvent>,\n uid: unknown,\n): Record<string, SerialisedEvent> => {\n const index = Object.keys(contexts).findIndex(ctx =>\n contexts[ctx].schema?.includes(\"identity_context\"),\n );\n if (index > -1) {\n const key = Object.keys(contexts)[index];\n return {\n ...contexts,\n [key]: {\n ...contexts[key],\n data: {\n ...contexts[key].data,\n domain_userid: uid,\n },\n },\n };\n }\n return contexts;\n};\n\nexport const makeContexts = (\n keys: string[],\n config: Record<string, SerialisedEvent>,\n): SerialisedEvent[] => (keys || []).map(key => config[key]);\n"],"names":["getContexts","makeContexts","updateIdentityContext","config","contextEntries","Object","entries","filter","key","includes","reduce","acc","value","snakeCaseKeys","data","service_channel_identifier","contexts","uid","index","keys","findIndex","ctx","schema","domain_userid","map"],"mappings":";;;;;;;;;;;IAGaA,WAAW;eAAXA;;IA2CAC,YAAY;eAAZA;;IAvBAC,qBAAqB;eAArBA;;;uBAvBiB;AAGvB,MAAMF,cAAc,CACzBG;IAEA,mDAAmD;IACnD,0BAA0B;IAC1B,MAAMC,iBAAiBC,OAAOC,OAAO,CAACH,UAAU,CAAC,GAC9CI,MAAM,CAAC,CAAC,CAACC,IAAI,GAAKA,IAAIC,QAAQ,CAAC,cAAcD,QAAQ,oBACrDE,MAAM,CAAC,CAACC,KAAK,CAACH,KAAKI,MAAM;QACxB,IAAI,OAAOA,UAAU,UAAU;YAC7B,OAAO;gBAAE,GAAGD,GAAG;gBAAE,CAACH,IAAI,EAAEK,IAAAA,oBAAa,EAAC;oBAAE,GAAGD,KAAK;gBAAC;YAAG;QACtD;QACA,OAAO;YACL,GAAGD,GAAG;YACN,CAACH,IAAI,EAAEK,IAAAA,oBAAa,EAAC;gBAAEC,MAAM;oBAAEC,4BAA4BH;gBAAM;YAAE;QACrE;IACF,GAAG,CAAC;IAEN,OAAOR;AACT;AAEO,MAAMF,wBAAwB,CACnCc,UACAC;IAEA,MAAMC,QAAQb,OAAOc,IAAI,CAACH,UAAUI,SAAS,CAACC,CAAAA;YAC5CL;gBAAAA,uBAAAA,QAAQ,CAACK,IAAI,CAACC,MAAM,cAApBN,2CAAAA,qBAAsBP,QAAQ,CAAC;;IAEjC,IAAIS,QAAQ,CAAC,GAAG;QACd,MAAMV,MAAMH,OAAOc,IAAI,CAACH,SAAS,CAACE,MAAM;QACxC,OAAO;YACL,GAAGF,QAAQ;YACX,CAACR,IAAI,EAAE;gBACL,GAAGQ,QAAQ,CAACR,IAAI;gBAChBM,MAAM;oBACJ,GAAGE,QAAQ,CAACR,IAAI,CAACM,IAAI;oBACrBS,eAAeN;gBACjB;YACF;QACF;IACF;IACA,OAAOD;AACT;AAEO,MAAMf,eAAe,CAC1BkB,MACAhB,SACsB,AAACgB,CAAAA,QAAQ,EAAE,AAAD,EAAGK,GAAG,CAAChB,CAAAA,MAAOL,MAAM,CAACK,IAAI"}
@@ -15,6 +15,9 @@ _export(exports, {
15
15
  interventionPageEvents: function() {
16
16
  return interventionPageEvents;
17
17
  },
18
+ personalisedCoverPageEvents: function() {
19
+ return personalisedCoverPageEvents;
20
+ },
18
21
  qcpPageEvents: function() {
19
22
  return qcpPageEvents;
20
23
  },
@@ -30,12 +33,14 @@ const _qcp = require("./qcp");
30
33
  const _referral = require("./referral");
31
34
  const _intervention = require("./intervention");
32
35
  const _questionnaire = require("./questionnaire");
36
+ const _personalised_cover = require("./personalised_cover");
33
37
  const eventDefinitions = [
34
38
  ..._base.baseEventDefinitions,
35
39
  ..._qcp.qcpEventDefinitions,
36
40
  ..._referral.referralEventDefinitions,
37
41
  ..._intervention.interventionEventDefinitions,
38
- ..._questionnaire.questionnaireEventDefinitions
42
+ ..._questionnaire.questionnaireEventDefinitions,
43
+ ..._personalised_cover.personalisedCoverEventDefinitions
39
44
  ];
40
45
  const qcpPageEvents = [
41
46
  ..._base.baseEventDefinitions,
@@ -45,6 +50,10 @@ const referralPageEvents = [
45
50
  ..._base.baseEventDefinitions,
46
51
  ..._referral.referralEventDefinitions
47
52
  ];
53
+ const personalisedCoverPageEvents = [
54
+ ..._base.baseEventDefinitions,
55
+ ..._personalised_cover.personalisedCoverEventDefinitions
56
+ ];
48
57
  const interventionPageEvents = [
49
58
  ..._intervention.interventionEventDefinitions
50
59
  ];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/snowplow/event-definitions/index.ts"],"sourcesContent":["import { baseEventDefinitions } from \"./base\";\nimport { qcpEventDefinitions } from \"./qcp\";\nimport { referralEventDefinitions } from \"./referral\";\nimport { interventionEventDefinitions } from \"./intervention\";\nimport { questionnaireEventDefinitions } from \"./questionnaire\";\n\n// All events (keep up to date with new files)\nexport const eventDefinitions = [\n ...baseEventDefinitions,\n ...qcpEventDefinitions,\n ...referralEventDefinitions,\n ...interventionEventDefinitions,\n ...questionnaireEventDefinitions,\n];\n\nexport const qcpPageEvents = [...baseEventDefinitions, ...qcpEventDefinitions];\n\nexport const referralPageEvents = [\n ...baseEventDefinitions,\n ...referralEventDefinitions,\n];\n\nexport const interventionPageEvents = [...interventionEventDefinitions];\n\nexport type { InterventionPayload } from \"./intervention\";\n\nexport const questionnairePageEvents = [...questionnaireEventDefinitions];\n\n// Create a new export for each kind of page below\n// containing just the subset needed for that page\n"],"names":["eventDefinitions","interventionPageEvents","qcpPageEvents","questionnairePageEvents","referralPageEvents","baseEventDefinitions","qcpEventDefinitions","referralEventDefinitions","interventionEventDefinitions","questionnaireEventDefinitions"],"mappings":";;;;;;;;;;;IAOaA,gBAAgB;eAAhBA;;IAeAC,sBAAsB;eAAtBA;;IAPAC,aAAa;eAAbA;;IAWAC,uBAAuB;eAAvBA;;IATAC,kBAAkB;eAAlBA;;;sBAjBwB;qBACD;0BACK;8BACI;+BACC;AAGvC,MAAMJ,mBAAmB;OAC3BK,0BAAoB;OACpBC,wBAAmB;OACnBC,kCAAwB;OACxBC,0CAA4B;OAC5BC,4CAA6B;CACjC;AAEM,MAAMP,gBAAgB;OAAIG,0BAAoB;OAAKC,wBAAmB;CAAC;AAEvE,MAAMF,qBAAqB;OAC7BC,0BAAoB;OACpBE,kCAAwB;CAC5B;AAEM,MAAMN,yBAAyB;OAAIO,0CAA4B;CAAC;AAIhE,MAAML,0BAA0B;OAAIM,4CAA6B;CAAC,EAEzE,kDAAkD;CAClD,kDAAkD"}
1
+ {"version":3,"sources":["../../../../src/snowplow/event-definitions/index.ts"],"sourcesContent":["import { baseEventDefinitions } from \"./base\";\nimport { qcpEventDefinitions } from \"./qcp\";\nimport { referralEventDefinitions } from \"./referral\";\nimport { interventionEventDefinitions } from \"./intervention\";\nimport { questionnaireEventDefinitions } from \"./questionnaire\";\nimport { personalisedCoverEventDefinitions } from \"./personalised_cover\";\n\n// All events (keep up to date with new files)\nexport const eventDefinitions = [\n ...baseEventDefinitions,\n ...qcpEventDefinitions,\n ...referralEventDefinitions,\n ...interventionEventDefinitions,\n ...questionnaireEventDefinitions,\n ...personalisedCoverEventDefinitions,\n];\n\nexport const qcpPageEvents = [...baseEventDefinitions, ...qcpEventDefinitions];\n\nexport const referralPageEvents = [\n ...baseEventDefinitions,\n ...referralEventDefinitions,\n];\n\nexport const personalisedCoverPageEvents = [\n ...baseEventDefinitions,\n ...personalisedCoverEventDefinitions,\n];\n\nexport const interventionPageEvents = [...interventionEventDefinitions];\n\nexport type { InterventionPayload } from \"./intervention\";\n\nexport const questionnairePageEvents = [...questionnaireEventDefinitions];\n\n// Create a new export for each kind of page below\n// containing just the subset needed for that page\n"],"names":["eventDefinitions","interventionPageEvents","personalisedCoverPageEvents","qcpPageEvents","questionnairePageEvents","referralPageEvents","baseEventDefinitions","qcpEventDefinitions","referralEventDefinitions","interventionEventDefinitions","questionnaireEventDefinitions","personalisedCoverEventDefinitions"],"mappings":";;;;;;;;;;;IAQaA,gBAAgB;eAAhBA;;IAqBAC,sBAAsB;eAAtBA;;IALAC,2BAA2B;eAA3BA;;IAPAC,aAAa;eAAbA;;IAgBAC,uBAAuB;eAAvBA;;IAdAC,kBAAkB;eAAlBA;;;sBAnBwB;qBACD;0BACK;8BACI;+BACC;oCACI;AAG3C,MAAML,mBAAmB;OAC3BM,0BAAoB;OACpBC,wBAAmB;OACnBC,kCAAwB;OACxBC,0CAA4B;OAC5BC,4CAA6B;OAC7BC,qDAAiC;CACrC;AAEM,MAAMR,gBAAgB;OAAIG,0BAAoB;OAAKC,wBAAmB;CAAC;AAEvE,MAAMF,qBAAqB;OAC7BC,0BAAoB;OACpBE,kCAAwB;CAC5B;AAEM,MAAMN,8BAA8B;OACtCI,0BAAoB;OACpBK,qDAAiC;CACrC;AAEM,MAAMV,yBAAyB;OAAIQ,0CAA4B;CAAC;AAIhE,MAAML,0BAA0B;OAAIM,4CAA6B;CAAC,EAEzE,kDAAkD;CAClD,kDAAkD"}
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "personalisedCoverEventDefinitions", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return personalisedCoverEventDefinitions;
9
+ }
10
+ });
11
+ const _redaction = require("./redaction");
12
+ const _constants = require("../constants");
13
+ const _utils = require("../../utils");
14
+ const personalisedCoverEventDefinitions = [
15
+ {
16
+ name: "seeMoreClicked",
17
+ type: "structured",
18
+ makePayload: (_)=>({
19
+ category: "personalised_cover",
20
+ action: "see_more_clicked",
21
+ label: "page",
22
+ property: "personalised_cover"
23
+ })
24
+ },
25
+ {
26
+ name: "selectPackageClicked",
27
+ type: "structured",
28
+ makePayload: (_)=>({
29
+ category: "personalised_cover",
30
+ action: "select_package_clicked",
31
+ label: "page",
32
+ property: "personalised_cover"
33
+ })
34
+ },
35
+ {
36
+ name: "validationShown",
37
+ type: "structured",
38
+ makePayload: (params)=>{
39
+ const { cover, question } = params;
40
+ return {
41
+ category: "personalised_cover",
42
+ action: "validation_shown",
43
+ label: "cover_question",
44
+ property: `${(0, _utils.snakeCase)(cover)}_${(0, _utils.snakeCase)(question)}`
45
+ };
46
+ }
47
+ },
48
+ {
49
+ name: "coverQuestionAnswered",
50
+ type: "unstructured",
51
+ makePayload: (params)=>{
52
+ const { context } = params;
53
+ const { question, answer } = (0, _redaction.redact)(params);
54
+ // Flatten the answer to a delimited string
55
+ const flatAnswer = Array.isArray(answer) ? answer.join(_constants.DELIMITER) : answer;
56
+ return {
57
+ schema: "iglu:com.simplybusiness/form_question_answered/jsonschema/1-0-1",
58
+ data: {
59
+ site: context.site,
60
+ page_name: "personalised_cover",
61
+ section_name: "Personalised Cover Questions",
62
+ question,
63
+ answer: flatAnswer
64
+ }
65
+ };
66
+ }
67
+ },
68
+ {
69
+ name: "limitLinkClicked",
70
+ type: "structured",
71
+ makePayload: (params)=>{
72
+ const { label } = params;
73
+ return {
74
+ category: "personalised_cover",
75
+ action: "limit_link_clicked",
76
+ label,
77
+ property: "link_clicked"
78
+ };
79
+ }
80
+ },
81
+ {
82
+ name: "limitChanged",
83
+ type: "structured",
84
+ makePayload: (params)=>{
85
+ const { label, limit } = params;
86
+ return {
87
+ category: "personalised_cover",
88
+ action: "limit_changed",
89
+ label,
90
+ property: limit
91
+ };
92
+ }
93
+ },
94
+ {
95
+ name: "coverPresented",
96
+ type: "structured",
97
+ makePayload: (params)=>{
98
+ const { property } = params;
99
+ return {
100
+ category: "personalised_cover",
101
+ action: "cover_presented",
102
+ label: "cover_name",
103
+ property
104
+ };
105
+ }
106
+ },
107
+ {
108
+ name: "moreInfoClicked",
109
+ type: "structured",
110
+ makePayload: (params)=>{
111
+ const { property } = params;
112
+ return {
113
+ category: "personalised_cover",
114
+ action: "more_info_clicked",
115
+ label: "cover_name",
116
+ property
117
+ };
118
+ }
119
+ }
120
+ ];
121
+
122
+ //# sourceMappingURL=personalised_cover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/snowplow/event-definitions/personalised_cover.ts"],"sourcesContent":["import { EventDefinition, ParamsType } from \"../types\";\nimport { redact } from \"./redaction\";\nimport { DELIMITER } from \"../constants\";\nimport { snakeCase } from \"../../utils\";\n\n/**\n * Event definitions for Snowplow\n * @type {EventDefinition[]}\n * @property {string} name - The name of the event, to use when triggering\n * @property {string} type - The type of the event (structured | unstructured)\n * @property {makePayload} makePayload\n * - Function that creates the payload for the event;\n * - Allows optional params object to be passed in\n *\n * @example\n * Parent\n * import { getSnowplowConfig, SnowplowProvider } from \"@simplybusiness/services\";\n * const snowplowProps = getSnowplowConfig(pageData);\n * <SnowplowProvider scripts={snowplowProps!}>{children}</SnowplowProvider>\n *\n * Child\n * import { useSnowplowContext } from \"@simplybusiness/services\";\n * const { snowplow } = useSnowplowContext();\n * const handlerFunction = () => snowplow?.trigger(\"eventNameHere\");\n */\n\nexport const personalisedCoverEventDefinitions: EventDefinition[] = [\n {\n name: \"seeMoreClicked\",\n type: \"structured\",\n makePayload: _ => ({\n category: \"personalised_cover\",\n action: \"see_more_clicked\",\n label: \"page\",\n property: \"personalised_cover\",\n }),\n },\n {\n name: \"selectPackageClicked\",\n type: \"structured\",\n makePayload: _ => ({\n category: \"personalised_cover\",\n action: \"select_package_clicked\",\n label: \"page\",\n property: \"personalised_cover\",\n }),\n },\n {\n name: \"validationShown\",\n type: \"structured\",\n makePayload: params => {\n const { cover, question } = params as ParamsType;\n\n return {\n category: \"personalised_cover\",\n action: \"validation_shown\",\n label: \"cover_question\",\n property: `${snakeCase(cover)}_${snakeCase(question)}`,\n };\n },\n },\n {\n name: \"coverQuestionAnswered\",\n type: \"unstructured\",\n makePayload: params => {\n const { context } = params as ParamsType;\n const { question, answer } = redact(params as ParamsType);\n // Flatten the answer to a delimited string\n const flatAnswer = Array.isArray(answer)\n ? answer.join(DELIMITER)\n : answer;\n\n return {\n schema:\n \"iglu:com.simplybusiness/form_question_answered/jsonschema/1-0-1\",\n data: {\n site: context.site,\n page_name: \"personalised_cover\",\n section_name: \"Personalised Cover Questions\",\n question,\n answer: flatAnswer,\n },\n };\n },\n },\n {\n name: \"limitLinkClicked\",\n type: \"structured\",\n makePayload: params => {\n const { label } = params as ParamsType;\n\n return {\n category: \"personalised_cover\",\n action: \"limit_link_clicked\",\n label,\n property: \"link_clicked\",\n };\n },\n },\n {\n name: \"limitChanged\",\n type: \"structured\",\n makePayload: params => {\n const { label, limit } = params as ParamsType;\n\n return {\n category: \"personalised_cover\",\n action: \"limit_changed\",\n label,\n property: limit,\n };\n },\n },\n {\n name: \"coverPresented\",\n type: \"structured\",\n makePayload: params => {\n const { property } = params as ParamsType;\n\n return {\n category: \"personalised_cover\",\n action: \"cover_presented\",\n label: \"cover_name\",\n property,\n };\n },\n },\n {\n name: \"moreInfoClicked\",\n type: \"structured\",\n makePayload: params => {\n const { property } = params as ParamsType;\n\n return {\n category: \"personalised_cover\",\n action: \"more_info_clicked\",\n label: \"cover_name\",\n property,\n };\n },\n },\n];\n"],"names":["personalisedCoverEventDefinitions","name","type","makePayload","_","category","action","label","property","params","cover","question","snakeCase","context","answer","redact","flatAnswer","Array","isArray","join","DELIMITER","schema","data","site","page_name","section_name","limit"],"mappings":";;;;+BA0BaA;;;eAAAA;;;2BAzBU;2BACG;uBACA;AAuBnB,MAAMA,oCAAuD;IAClE;QACEC,MAAM;QACNC,MAAM;QACNC,aAAaC,CAAAA,IAAM,CAAA;gBACjBC,UAAU;gBACVC,QAAQ;gBACRC,OAAO;gBACPC,UAAU;YACZ,CAAA;IACF;IACA;QACEP,MAAM;QACNC,MAAM;QACNC,aAAaC,CAAAA,IAAM,CAAA;gBACjBC,UAAU;gBACVC,QAAQ;gBACRC,OAAO;gBACPC,UAAU;YACZ,CAAA;IACF;IACA;QACEP,MAAM;QACNC,MAAM;QACNC,aAAaM,CAAAA;YACX,MAAM,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GAAGF;YAE5B,OAAO;gBACLJ,UAAU;gBACVC,QAAQ;gBACRC,OAAO;gBACPC,UAAU,GAAGI,IAAAA,gBAAS,EAACF,OAAO,CAAC,EAAEE,IAAAA,gBAAS,EAACD,WAAW;YACxD;QACF;IACF;IACA;QACEV,MAAM;QACNC,MAAM;QACNC,aAAaM,CAAAA;YACX,MAAM,EAAEI,OAAO,EAAE,GAAGJ;YACpB,MAAM,EAAEE,QAAQ,EAAEG,MAAM,EAAE,GAAGC,IAAAA,iBAAM,EAACN;YACpC,2CAA2C;YAC3C,MAAMO,aAAaC,MAAMC,OAAO,CAACJ,UAC7BA,OAAOK,IAAI,CAACC,oBAAS,IACrBN;YAEJ,OAAO;gBACLO,QACE;gBACFC,MAAM;oBACJC,MAAMV,QAAQU,IAAI;oBAClBC,WAAW;oBACXC,cAAc;oBACdd;oBACAG,QAAQE;gBACV;YACF;QACF;IACF;IACA;QACEf,MAAM;QACNC,MAAM;QACNC,aAAaM,CAAAA;YACX,MAAM,EAAEF,KAAK,EAAE,GAAGE;YAElB,OAAO;gBACLJ,UAAU;gBACVC,QAAQ;gBACRC;gBACAC,UAAU;YACZ;QACF;IACF;IACA;QACEP,MAAM;QACNC,MAAM;QACNC,aAAaM,CAAAA;YACX,MAAM,EAAEF,KAAK,EAAEmB,KAAK,EAAE,GAAGjB;YAEzB,OAAO;gBACLJ,UAAU;gBACVC,QAAQ;gBACRC;gBACAC,UAAUkB;YACZ;QACF;IACF;IACA;QACEzB,MAAM;QACNC,MAAM;QACNC,aAAaM,CAAAA;YACX,MAAM,EAAED,QAAQ,EAAE,GAAGC;YAErB,OAAO;gBACLJ,UAAU;gBACVC,QAAQ;gBACRC,OAAO;gBACPC;YACF;QACF;IACF;IACA;QACEP,MAAM;QACNC,MAAM;QACNC,aAAaM,CAAAA;YACX,MAAM,EAAED,QAAQ,EAAE,GAAGC;YAErB,OAAO;gBACLJ,UAAU;gBACVC,QAAQ;gBACRC,OAAO;gBACPC;YACF;QACF;IACF;CACD"}
@@ -118,7 +118,10 @@ const qcpEventDefinitions = [
118
118
  to_value: toValue
119
119
  }
120
120
  };
121
- }
121
+ },
122
+ contexts: [
123
+ "distributionChannelContext"
124
+ ]
122
125
  },
123
126
  {
124
127
  name: "ratingsModalOpened",
@@ -221,7 +224,10 @@ const qcpEventDefinitions = [
221
224
  vertical
222
225
  }
223
226
  };
224
- }
227
+ },
228
+ contexts: [
229
+ "serviceChannelContext"
230
+ ]
225
231
  },
226
232
  {
227
233
  name: "helpChatLinkClicked",