@simplybusiness/services 2.3.0 → 2.3.2

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 (153) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/cjs/address-lookup/index.js +94 -0
  3. package/dist/cjs/address-lookup/index.js.map +7 -0
  4. package/dist/cjs/address-lookup/types.js +19 -0
  5. package/dist/cjs/address-lookup/types.js.map +7 -0
  6. package/dist/cjs/airbrake/index.js +64 -0
  7. package/dist/cjs/airbrake/index.js.map +7 -0
  8. package/dist/cjs/index.js +3 -3
  9. package/dist/cjs/meta.json +801 -2
  10. package/dist/cjs/mocks/eventDefinitions.js +246 -0
  11. package/dist/cjs/mocks/eventDefinitions.js.map +7 -0
  12. package/dist/cjs/mocks/scripts-mock.js +67 -0
  13. package/dist/cjs/mocks/scripts-mock.js.map +7 -0
  14. package/dist/cjs/snowplow/Snowplow.js +197 -0
  15. package/dist/cjs/snowplow/Snowplow.js.map +7 -0
  16. package/dist/cjs/snowplow/SnowplowContext.js +1315 -0
  17. package/dist/cjs/snowplow/SnowplowContext.js.map +7 -0
  18. package/dist/cjs/snowplow/constants.js +27 -0
  19. package/dist/cjs/snowplow/constants.js.map +7 -0
  20. package/dist/cjs/snowplow/contexts.js +95 -0
  21. package/dist/cjs/snowplow/contexts.js.map +7 -0
  22. package/dist/cjs/snowplow/event-definitions/base.js +92 -0
  23. package/dist/cjs/snowplow/event-definitions/base.js.map +7 -0
  24. package/dist/cjs/snowplow/event-definitions/coverage-selection.js +61 -0
  25. package/dist/cjs/snowplow/event-definitions/coverage-selection.js.map +7 -0
  26. package/dist/cjs/snowplow/event-definitions/index.js +1069 -0
  27. package/dist/cjs/snowplow/event-definitions/index.js.map +7 -0
  28. package/dist/cjs/snowplow/event-definitions/intervention.js +59 -0
  29. package/dist/cjs/snowplow/event-definitions/intervention.js.map +7 -0
  30. package/dist/cjs/snowplow/event-definitions/personalised_cover.js +309 -0
  31. package/dist/cjs/snowplow/event-definitions/personalised_cover.js.map +7 -0
  32. package/dist/cjs/snowplow/event-definitions/qcp.js +379 -0
  33. package/dist/cjs/snowplow/event-definitions/qcp.js.map +7 -0
  34. package/dist/cjs/snowplow/event-definitions/questionnaire/questionnaire.js +390 -0
  35. package/dist/cjs/snowplow/event-definitions/questionnaire/questionnaire.js.map +7 -0
  36. package/dist/cjs/snowplow/event-definitions/questionnaire/redaction.js +165 -0
  37. package/dist/cjs/snowplow/event-definitions/questionnaire/redaction.js.map +7 -0
  38. package/dist/cjs/snowplow/event-definitions/referral.js +42 -0
  39. package/dist/cjs/snowplow/event-definitions/referral.js.map +7 -0
  40. package/dist/cjs/snowplow/event-definitions/test-utils.js +33 -0
  41. package/dist/cjs/snowplow/event-definitions/test-utils.js.map +7 -0
  42. package/dist/cjs/snowplow/getSnowplowConfig.js +27 -0
  43. package/dist/cjs/snowplow/getSnowplowConfig.js.map +7 -0
  44. package/dist/cjs/snowplow/index.js +1330 -0
  45. package/dist/cjs/snowplow/index.js.map +7 -0
  46. package/dist/cjs/snowplow/types.js +19 -0
  47. package/dist/cjs/snowplow/types.js.map +7 -0
  48. package/dist/cjs/utils/index.js +63 -0
  49. package/dist/cjs/utils/index.js.map +7 -0
  50. package/dist/cjs/utils/isObject.js +29 -0
  51. package/dist/cjs/utils/isObject.js.map +7 -0
  52. package/dist/cjs/utils/testUtils.js +1372 -0
  53. package/dist/cjs/utils/testUtils.js.map +7 -0
  54. package/dist/cjs/utils/text.js +62 -0
  55. package/dist/cjs/utils/text.js.map +7 -0
  56. package/dist/esm/address-lookup/index.js +7 -0
  57. package/dist/esm/address-lookup/index.js.map +7 -0
  58. package/dist/esm/address-lookup/types.js +1 -0
  59. package/dist/esm/address-lookup/types.js.map +7 -0
  60. package/dist/esm/airbrake/index.js +9 -0
  61. package/dist/esm/airbrake/index.js.map +7 -0
  62. package/dist/esm/chunk-3SO3SL37.js +150 -0
  63. package/dist/esm/chunk-3SO3SL37.js.map +7 -0
  64. package/dist/esm/chunk-75UX5UWV.js +47 -0
  65. package/dist/esm/chunk-75UX5UWV.js.map +7 -0
  66. package/dist/esm/chunk-BJUWIK7N.js +1 -0
  67. package/dist/esm/chunk-BJUWIK7N.js.map +7 -0
  68. package/dist/esm/chunk-BYVY7UWR.js +1 -0
  69. package/dist/esm/chunk-BYVY7UWR.js.map +7 -0
  70. package/dist/esm/chunk-EDKZP2NB.js +165 -0
  71. package/dist/esm/chunk-EDKZP2NB.js.map +7 -0
  72. package/dist/esm/chunk-JILHOFBG.js +7 -0
  73. package/dist/esm/chunk-JILHOFBG.js.map +7 -0
  74. package/dist/esm/chunk-LE4F73Z2.js +9 -0
  75. package/dist/esm/chunk-LE4F73Z2.js.map +7 -0
  76. package/dist/esm/chunk-LE7RCOBX.js +41 -0
  77. package/dist/esm/chunk-LE7RCOBX.js.map +7 -0
  78. package/dist/esm/chunk-MUFIJUOD.js +22 -0
  79. package/dist/esm/chunk-MUFIJUOD.js.map +7 -0
  80. package/dist/esm/chunk-NDWXMYSZ.js +7 -0
  81. package/dist/esm/chunk-NDWXMYSZ.js.map +7 -0
  82. package/dist/esm/chunk-OFQYDVHG.js +58 -0
  83. package/dist/esm/chunk-OFQYDVHG.js.map +7 -0
  84. package/dist/esm/chunk-OQ4YGZGX.js +231 -0
  85. package/dist/esm/chunk-OQ4YGZGX.js.map +7 -0
  86. package/dist/esm/chunk-PI33NKP7.js +58 -0
  87. package/dist/esm/chunk-PI33NKP7.js.map +7 -0
  88. package/dist/esm/chunk-QKBNCG2F.js +145 -0
  89. package/dist/esm/chunk-QKBNCG2F.js.map +7 -0
  90. package/dist/esm/chunk-RLSHHBYY.js +39 -0
  91. package/dist/esm/chunk-RLSHHBYY.js.map +7 -0
  92. package/dist/esm/chunk-RUOVZDWE.js +39 -0
  93. package/dist/esm/chunk-RUOVZDWE.js.map +7 -0
  94. package/dist/esm/chunk-TN5IBPWO.js +44 -0
  95. package/dist/esm/chunk-TN5IBPWO.js.map +7 -0
  96. package/dist/esm/chunk-WGHBTJNE.js +74 -0
  97. package/dist/esm/chunk-WGHBTJNE.js.map +7 -0
  98. package/dist/esm/chunk-XNSKPER5.js +44 -0
  99. package/dist/esm/chunk-XNSKPER5.js.map +7 -0
  100. package/dist/esm/chunk-XRH22EFX.js +72 -0
  101. package/dist/esm/chunk-XRH22EFX.js.map +7 -0
  102. package/dist/esm/chunk-ZEYOXRFM.js +358 -0
  103. package/dist/esm/chunk-ZEYOXRFM.js.map +7 -0
  104. package/dist/esm/index.js +42 -1410
  105. package/dist/esm/index.js.map +4 -4
  106. package/dist/esm/meta.json +1481 -71
  107. package/dist/esm/mocks/eventDefinitions.js +86 -0
  108. package/dist/esm/mocks/eventDefinitions.js.map +7 -0
  109. package/dist/esm/mocks/scripts-mock.js +7 -0
  110. package/dist/esm/mocks/scripts-mock.js.map +7 -0
  111. package/dist/esm/snowplow/Snowplow.js +10 -0
  112. package/dist/esm/snowplow/Snowplow.js.map +7 -0
  113. package/dist/esm/snowplow/SnowplowContext.js +23 -0
  114. package/dist/esm/snowplow/SnowplowContext.js.map +7 -0
  115. package/dist/esm/snowplow/constants.js +7 -0
  116. package/dist/esm/snowplow/constants.js.map +7 -0
  117. package/dist/esm/snowplow/contexts.js +13 -0
  118. package/dist/esm/snowplow/contexts.js.map +7 -0
  119. package/dist/esm/snowplow/event-definitions/base.js +7 -0
  120. package/dist/esm/snowplow/event-definitions/base.js.map +7 -0
  121. package/dist/esm/snowplow/event-definitions/coverage-selection.js +7 -0
  122. package/dist/esm/snowplow/event-definitions/coverage-selection.js.map +7 -0
  123. package/dist/esm/snowplow/event-definitions/index.js +30 -0
  124. package/dist/esm/snowplow/event-definitions/index.js.map +7 -0
  125. package/dist/esm/snowplow/event-definitions/intervention.js +7 -0
  126. package/dist/esm/snowplow/event-definitions/intervention.js.map +7 -0
  127. package/dist/esm/snowplow/event-definitions/personalised_cover.js +11 -0
  128. package/dist/esm/snowplow/event-definitions/personalised_cover.js.map +7 -0
  129. package/dist/esm/snowplow/event-definitions/qcp.js +9 -0
  130. package/dist/esm/snowplow/event-definitions/qcp.js.map +7 -0
  131. package/dist/esm/snowplow/event-definitions/questionnaire/questionnaire.js +9 -0
  132. package/dist/esm/snowplow/event-definitions/questionnaire/questionnaire.js.map +7 -0
  133. package/dist/esm/snowplow/event-definitions/questionnaire/redaction.js +7 -0
  134. package/dist/esm/snowplow/event-definitions/questionnaire/redaction.js.map +7 -0
  135. package/dist/esm/snowplow/event-definitions/referral.js +7 -0
  136. package/dist/esm/snowplow/event-definitions/referral.js.map +7 -0
  137. package/dist/esm/snowplow/event-definitions/test-utils.js +12 -0
  138. package/dist/esm/snowplow/event-definitions/test-utils.js.map +7 -0
  139. package/dist/esm/snowplow/getSnowplowConfig.js +7 -0
  140. package/dist/esm/snowplow/getSnowplowConfig.js.map +7 -0
  141. package/dist/esm/snowplow/index.js +54 -0
  142. package/dist/esm/snowplow/index.js.map +7 -0
  143. package/dist/esm/snowplow/types.js +2 -0
  144. package/dist/esm/snowplow/types.js.map +7 -0
  145. package/dist/esm/utils/index.js +15 -0
  146. package/dist/esm/utils/index.js.map +7 -0
  147. package/dist/esm/utils/isObject.js +7 -0
  148. package/dist/esm/utils/isObject.js.map +7 -0
  149. package/dist/esm/utils/testUtils.js +46 -0
  150. package/dist/esm/utils/testUtils.js.map +7 -0
  151. package/dist/esm/utils/text.js +12 -0
  152. package/dist/esm/utils/text.js.map +7 -0
  153. package/package.json +2 -2
@@ -0,0 +1,246 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/mocks/eventDefinitions.ts
21
+ var eventDefinitions_exports = {};
22
+ __export(eventDefinitions_exports, {
23
+ default: () => eventDefinitions_default
24
+ });
25
+ module.exports = __toCommonJS(eventDefinitions_exports);
26
+
27
+ // src/snowplow/event-definitions/questionnaire/redaction.ts
28
+ var PII_ANSWER = [
29
+ "customer_title",
30
+ "customer_first_name",
31
+ "customer_last_name",
32
+ "customer_email_address",
33
+ "preapp_email_address",
34
+ "customer_telephone_number",
35
+ "customer_alternative_telephone_number",
36
+ "uk_address_lookup",
37
+ "uk_correspondence_address_lookup",
38
+ "customer_address_1_pre_quote",
39
+ "customer_address_2_pre_quote",
40
+ "customer_town_pre_quote",
41
+ "customer_postcode_pre_quote",
42
+ "customer_address_1",
43
+ "customer_address_2",
44
+ "customer_town",
45
+ "customer_postcode",
46
+ "address_1_pre_quote",
47
+ "address_2_pre_quote",
48
+ "uk_postcode_pre_quote",
49
+ "town_pre_quote",
50
+ "owner_first_name",
51
+ "owner_last_name",
52
+ "beneficiary_first_name",
53
+ "beneficiary_last_name",
54
+ "gender",
55
+ "dynamic_ssn_fein",
56
+ "ssn",
57
+ "fein",
58
+ "sof_county_court_judgement_online_yes",
59
+ "sof_county_court_judgement_online_no",
60
+ "sof_ccj_count",
61
+ "sof_ccj_value",
62
+ "sof_ccj_date",
63
+ "sof_court_judgement_yes",
64
+ "sof_court_judgement_no",
65
+ "ccj_date",
66
+ "sof_single_ccj_no",
67
+ "sof_single_ccj_yes",
68
+ "sof_ccj_yes",
69
+ "sof_ccj_no",
70
+ "ccj_count",
71
+ "sof_bankrupt_yes",
72
+ "sof_bankrupt_no",
73
+ "sof_multiple_bankruptcies_yes",
74
+ "sof_multiple_bankruptcies_no",
75
+ "bankruptcy_date",
76
+ "sof_single_bankruptcy_no",
77
+ "sof_single_bankruptcy_yes",
78
+ "sof_bankruptcy_yes",
79
+ "sof_bankruptcy_no",
80
+ "bankruptcy_discharged",
81
+ "sof_liquidation_yes",
82
+ "sof_liquidation_no",
83
+ "sof_multiple_liquidations",
84
+ "liquidation_date",
85
+ "sof_criminal_offence_yes",
86
+ "sof_criminal_offence_no",
87
+ "sof_criminal_yes",
88
+ "sof_criminal_no",
89
+ "hcp_date_of_birth_1",
90
+ "hcp_date_of_birth_2",
91
+ "hcp_date_of_birth_3",
92
+ "hcp_date_of_birth_4",
93
+ "hcp_date_of_birth_5",
94
+ "hcp_date_of_birth_6",
95
+ "hcp_date_of_birth_7",
96
+ "hcp_date_of_birth_8",
97
+ "hcp_date_of_birth_9",
98
+ "hcp_date_of_birth_10",
99
+ "sof_previous_claims_yes",
100
+ "sof_previous_claims_no",
101
+ "sof_claims_yes",
102
+ "sof_claims_no",
103
+ "sof_property_claims_in_the_last_5_years_yes",
104
+ "sof_property_claims_in_the_last_5_years_no",
105
+ "sof_property_claims_in_the_last_0_to_4_years_yes",
106
+ "sof_property_claims_in_the_last_0_to_4_years_no",
107
+ "claim_count",
108
+ "sof_number_of_claims",
109
+ "number_of_claims_in_last_5_years",
110
+ "number_of_claims_in_time_owned",
111
+ "date_of_incident_1",
112
+ "date_of_incident_2",
113
+ "date_of_incident_3",
114
+ "date_of_incident_4",
115
+ "date_of_incident_5",
116
+ "type_of_incident_1",
117
+ "type_of_incident_2",
118
+ "type_of_incident_3",
119
+ "type_of_incident_4",
120
+ "type_of_incident_5",
121
+ "incident_value_1",
122
+ "incident_value_2",
123
+ "incident_value_3",
124
+ "incident_value_4",
125
+ "incident_value_5",
126
+ "sof_pollution_disease_claims_yes",
127
+ "sof_pollution_disease_claims_no",
128
+ "sof_potential_claims_yes",
129
+ "sof_potential_claims_no",
130
+ "sof_previous_circumstances_yes",
131
+ "sof_previous_circumstances_no",
132
+ "sof_possible_claims_yes",
133
+ "sof_possible_claims_no",
134
+ "date_of_possible_incident",
135
+ "type_of_possible_incident",
136
+ "possible_incident_value",
137
+ "sof_property_claims_yes",
138
+ "sof_property_claims_no",
139
+ "sof_liability_claims_yes",
140
+ "sof_liability_claims_no",
141
+ "van_registration",
142
+ "sof_disqualified_director_yes",
143
+ "sof_disqualified_director_no",
144
+ "sof_insurance_refused_yes",
145
+ "sof_insurance_refused_no",
146
+ "sof_insurance_declined_yes",
147
+ "sof_insurance_declined_no",
148
+ "insurance_refused"
149
+ ];
150
+ var RADIO_ANSWER_FROM_QUESTIONS = [
151
+ "have_secondary_trade_yes",
152
+ "have_secondary_trade_no"
153
+ ];
154
+ var ANSWER_SUFFIX_PATTERN = /_(yes|no)$/;
155
+ var redact = (params) => {
156
+ let { question, answer } = params;
157
+ const piiAnswer = new Set(PII_ANSWER);
158
+ const radioAnswerFromQuestions = new Set(RADIO_ANSWER_FROM_QUESTIONS);
159
+ if (piiAnswer.has(question)) {
160
+ answer = "REDACTED";
161
+ question = question?.replace(ANSWER_SUFFIX_PATTERN, "");
162
+ } else if (radioAnswerFromQuestions.has(question)) {
163
+ question = question?.replace(ANSWER_SUFFIX_PATTERN, "");
164
+ }
165
+ return { question, answer };
166
+ };
167
+
168
+ // src/mocks/eventDefinitions.ts
169
+ var eventDefinitions_default = [
170
+ {
171
+ name: "navButtonClicked",
172
+ type: "structured",
173
+ makePayload: (params) => {
174
+ const { label } = params;
175
+ return {
176
+ category: "navigation",
177
+ action: "thankyou_navigation_button_click",
178
+ label,
179
+ property: "test-property"
180
+ };
181
+ }
182
+ },
183
+ {
184
+ name: "questionAnswered",
185
+ type: "unstructured",
186
+ makePayload: (params) => {
187
+ const { section, context } = params;
188
+ const { question, answer } = redact(params);
189
+ return {
190
+ schema: "iglu:com.simplybusiness/form_question_answered/jsonschema/1-0-4",
191
+ data: {
192
+ site: context.site,
193
+ page_index: 1,
194
+ page_name: "quick_to_quote",
195
+ submitted_from: "quick_to_quote_experiment",
196
+ section_name: section,
197
+ question,
198
+ answer,
199
+ vertical: context.vertical,
200
+ journey_id: context.journeyId
201
+ }
202
+ };
203
+ },
204
+ contexts: ["distributionChannelContext"]
205
+ },
206
+ {
207
+ name: "primaryDetailSelected",
208
+ type: "unstructured",
209
+ makePayload: (params) => {
210
+ const { context, answer, vertical } = params;
211
+ const { site } = context;
212
+ let verticalName = vertical || context.vertical;
213
+ if (verticalName.toLowerCase().indexOf("landlord") > -1) {
214
+ verticalName = answer === "residential" ? "Landlord" : "Commercial landlord";
215
+ }
216
+ return {
217
+ schema: "iglu:com.simplybusiness/primary_detail_selected/jsonschema/1-3-1",
218
+ data: {
219
+ site,
220
+ vertical: verticalName,
221
+ primary_detail: answer,
222
+ selected_type: "trade_selector"
223
+ }
224
+ };
225
+ }
226
+ },
227
+ {
228
+ name: "helpTextOpened",
229
+ type: "unstructured",
230
+ makePayload: (params) => {
231
+ const { primaryText, label, context, helpText } = params;
232
+ return {
233
+ schema: "iglu:com.simplybusiness/help_text_opened/jsonschema/1-1-0",
234
+ data: {
235
+ vertical: context.vertical,
236
+ site: context.site,
237
+ help_text: helpText,
238
+ primary_text: primaryText,
239
+ label,
240
+ page_name: "quick_to_quote"
241
+ }
242
+ };
243
+ }
244
+ }
245
+ ];
246
+ //# sourceMappingURL=eventDefinitions.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/mocks/eventDefinitions.ts", "../../../src/snowplow/event-definitions/questionnaire/redaction.ts"],
4
+ "sourcesContent": ["import type { ParamsType } from \"../snowplow\";\nimport { redact } from \"../snowplow/event-definitions/questionnaire/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;\n const { question, answer } = redact(params);\n\n return {\n schema:\n \"iglu:com.simplybusiness/form_question_answered/jsonschema/1-0-4\",\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 journey_id: context.journeyId,\n },\n };\n },\n contexts: [\"distributionChannelContext\"],\n },\n {\n name: \"primaryDetailSelected\",\n type: \"unstructured\",\n makePayload: (params: ParamsType) => {\n const { context, answer, vertical } = params;\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-1\",\n data: {\n site,\n vertical: verticalName,\n primary_detail: answer,\n selected_type: \"trade_selector\",\n },\n };\n },\n },\n {\n name: \"helpTextOpened\",\n type: \"unstructured\",\n makePayload: (params: ParamsType) => {\n const { primaryText, label, context, helpText } = params;\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", "import type { ParamsType } from \"../../types\";\n\nconst PII_ANSWER = [\n \"customer_title\",\n \"customer_first_name\",\n \"customer_last_name\",\n \"customer_email_address\",\n \"preapp_email_address\",\n \"customer_telephone_number\",\n \"customer_alternative_telephone_number\",\n \"uk_address_lookup\",\n \"uk_correspondence_address_lookup\",\n \"customer_address_1_pre_quote\",\n \"customer_address_2_pre_quote\",\n \"customer_town_pre_quote\",\n \"customer_postcode_pre_quote\",\n \"customer_address_1\",\n \"customer_address_2\",\n \"customer_town\",\n \"customer_postcode\",\n \"address_1_pre_quote\",\n \"address_2_pre_quote\",\n \"uk_postcode_pre_quote\",\n \"town_pre_quote\",\n \"owner_first_name\",\n \"owner_last_name\",\n \"beneficiary_first_name\",\n \"beneficiary_last_name\",\n \"gender\",\n \"dynamic_ssn_fein\",\n \"ssn\",\n \"fein\",\n \"sof_county_court_judgement_online_yes\",\n \"sof_county_court_judgement_online_no\",\n \"sof_ccj_count\",\n \"sof_ccj_value\",\n \"sof_ccj_date\",\n \"sof_court_judgement_yes\",\n \"sof_court_judgement_no\",\n \"ccj_date\",\n \"sof_single_ccj_no\",\n \"sof_single_ccj_yes\",\n \"sof_ccj_yes\",\n \"sof_ccj_no\",\n \"ccj_count\",\n \"sof_bankrupt_yes\",\n \"sof_bankrupt_no\",\n \"sof_multiple_bankruptcies_yes\",\n \"sof_multiple_bankruptcies_no\",\n \"bankruptcy_date\",\n \"sof_single_bankruptcy_no\",\n \"sof_single_bankruptcy_yes\",\n \"sof_bankruptcy_yes\",\n \"sof_bankruptcy_no\",\n \"bankruptcy_discharged\",\n \"sof_liquidation_yes\",\n \"sof_liquidation_no\",\n \"sof_multiple_liquidations\",\n \"liquidation_date\",\n \"sof_criminal_offence_yes\",\n \"sof_criminal_offence_no\",\n \"sof_criminal_yes\",\n \"sof_criminal_no\",\n \"hcp_date_of_birth_1\",\n \"hcp_date_of_birth_2\",\n \"hcp_date_of_birth_3\",\n \"hcp_date_of_birth_4\",\n \"hcp_date_of_birth_5\",\n \"hcp_date_of_birth_6\",\n \"hcp_date_of_birth_7\",\n \"hcp_date_of_birth_8\",\n \"hcp_date_of_birth_9\",\n \"hcp_date_of_birth_10\",\n \"sof_previous_claims_yes\",\n \"sof_previous_claims_no\",\n \"sof_claims_yes\",\n \"sof_claims_no\",\n \"sof_property_claims_in_the_last_5_years_yes\",\n \"sof_property_claims_in_the_last_5_years_no\",\n \"sof_property_claims_in_the_last_0_to_4_years_yes\",\n \"sof_property_claims_in_the_last_0_to_4_years_no\",\n \"claim_count\",\n \"sof_number_of_claims\",\n \"number_of_claims_in_last_5_years\",\n \"number_of_claims_in_time_owned\",\n \"date_of_incident_1\",\n \"date_of_incident_2\",\n \"date_of_incident_3\",\n \"date_of_incident_4\",\n \"date_of_incident_5\",\n \"type_of_incident_1\",\n \"type_of_incident_2\",\n \"type_of_incident_3\",\n \"type_of_incident_4\",\n \"type_of_incident_5\",\n \"incident_value_1\",\n \"incident_value_2\",\n \"incident_value_3\",\n \"incident_value_4\",\n \"incident_value_5\",\n \"sof_pollution_disease_claims_yes\",\n \"sof_pollution_disease_claims_no\",\n \"sof_potential_claims_yes\",\n \"sof_potential_claims_no\",\n \"sof_previous_circumstances_yes\",\n \"sof_previous_circumstances_no\",\n \"sof_possible_claims_yes\",\n \"sof_possible_claims_no\",\n \"date_of_possible_incident\",\n \"type_of_possible_incident\",\n \"possible_incident_value\",\n \"sof_property_claims_yes\",\n \"sof_property_claims_no\",\n \"sof_liability_claims_yes\",\n \"sof_liability_claims_no\",\n \"van_registration\",\n \"sof_disqualified_director_yes\",\n \"sof_disqualified_director_no\",\n \"sof_insurance_refused_yes\",\n \"sof_insurance_refused_no\",\n \"sof_insurance_declined_yes\",\n \"sof_insurance_declined_no\",\n \"insurance_refused\",\n];\n\nconst RADIO_ANSWER_FROM_QUESTIONS = [\n \"have_secondary_trade_yes\",\n \"have_secondary_trade_no\",\n];\n\nconst ANSWER_SUFFIX_PATTERN = /_(yes|no)$/;\n\nexport const redact = (params: ParamsType) => {\n let { question, answer } = params;\n\n const piiAnswer = new Set(PII_ANSWER);\n const radioAnswerFromQuestions = new Set(RADIO_ANSWER_FROM_QUESTIONS);\n\n if (piiAnswer.has(question)) {\n answer = \"REDACTED\";\n question = question?.replace(ANSWER_SUFFIX_PATTERN, \"\");\n } else if (radioAnswerFromQuestions.has(question)) {\n question = question?.replace(ANSWER_SUFFIX_PATTERN, \"\");\n }\n return { question, answer };\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEA,IAAM,aAAa;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,8BAA8B;AAAA,EAClC;AAAA,EACA;AACF;AAEA,IAAM,wBAAwB;AAEvB,IAAM,SAAS,CAAC,WAAuB;AAC5C,MAAI,EAAE,UAAU,OAAO,IAAI;AAE3B,QAAM,YAAY,IAAI,IAAI,UAAU;AACpC,QAAM,2BAA2B,IAAI,IAAI,2BAA2B;AAEpE,MAAI,UAAU,IAAI,QAAQ,GAAG;AAC3B,aAAS;AACT,eAAW,UAAU,QAAQ,uBAAuB,EAAE;AAAA,EACxD,WAAW,yBAAyB,IAAI,QAAQ,GAAG;AACjD,eAAW,UAAU,QAAQ,uBAAuB,EAAE;AAAA,EACxD;AACA,SAAO,EAAE,UAAU,OAAO;AAC5B;;;AD9IA,IAAO,2BAAQ;AAAA,EACb;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,CAAC,WAAoD;AAChE,YAAM,EAAE,MAAM,IAAI;AAClB,aAAO;AAAA,QACL,UAAU;AAAA,QACV,QAAQ;AAAA,QACR;AAAA,QACA,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,CAAC,WAAuB;AACnC,YAAM,EAAE,SAAS,QAAQ,IAAI;AAC7B,YAAM,EAAE,UAAU,OAAO,IAAI,OAAO,MAAM;AAE1C,aAAO;AAAA,QACL,QACE;AAAA,QACF,MAAM;AAAA,UACJ,MAAM,QAAQ;AAAA,UACd,YAAY;AAAA,UACZ,WAAW;AAAA,UACX,gBAAgB;AAAA,UAChB,cAAc;AAAA,UACd;AAAA,UACA;AAAA,UACA,UAAU,QAAQ;AAAA,UAClB,YAAY,QAAQ;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU,CAAC,4BAA4B;AAAA,EACzC;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,CAAC,WAAuB;AACnC,YAAM,EAAE,SAAS,QAAQ,SAAS,IAAI;AACtC,YAAM,EAAE,KAAK,IAAI;AACjB,UAAI,eAAe,YAAY,QAAQ;AAEvC,UAAI,aAAa,YAAY,EAAE,QAAQ,UAAU,IAAI,IAAI;AACvD,uBACE,WAAW,gBAAgB,aAAa;AAAA,MAC5C;AAEA,aAAO;AAAA,QACL,QACE;AAAA,QACF,MAAM;AAAA,UACJ;AAAA,UACA,UAAU;AAAA,UACV,gBAAgB;AAAA,UAChB,eAAe;AAAA,QACjB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,CAAC,WAAuB;AACnC,YAAM,EAAE,aAAa,OAAO,SAAS,SAAS,IAAI;AAElD,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,MAAM;AAAA,UACJ,UAAU,QAAQ;AAAA,UAClB,MAAM,QAAQ;AAAA,UACd,WAAW;AAAA,UACX,cAAc;AAAA,UACd;AAAA,UACA,WAAW;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/mocks/scripts-mock.ts
21
+ var scripts_mock_exports = {};
22
+ __export(scripts_mock_exports, {
23
+ pageData: () => pageData
24
+ });
25
+ module.exports = __toCommonJS(scripts_mock_exports);
26
+ var pageData = {
27
+ scripts: [
28
+ {
29
+ metadata: { name: "snowplow" },
30
+ props: {
31
+ uid: "49a449d8aaa9dd58f90a623d4b9dbcae235bf92a",
32
+ cookieDomain: "",
33
+ // TODO: Change this url to "http://localhost:8000" for local development
34
+ avalancheCollector: "https://snowplow-collector-staging.simplybusiness.com",
35
+ appId: "us-chopin",
36
+ includeGAContext: true,
37
+ eventMethod: "post",
38
+ postPath: "/com.simplybusiness/events",
39
+ trackActivity: true,
40
+ trackPageView: true,
41
+ pageViewContext: {
42
+ schema: "iglu:uk.co.simplybusiness/journey_context/jsonschema/1-0-0",
43
+ data: {
44
+ site: "simplybusiness_us",
45
+ vertical: "usa",
46
+ superSegment: "Unknown",
47
+ primaryDetail: "Lawn care services",
48
+ journeyName: "usa",
49
+ journeyId: "666ff79d90abbc3582e496da",
50
+ pageStepName: "thank_you_ssr",
51
+ pageStepDepth: -1
52
+ }
53
+ },
54
+ distributionChannelContext: {
55
+ schema: "iglu:com.simplybusiness/distribution_channel_context/jsonschema/1-0-0",
56
+ data: { service_channel_identifier: "simplybusiness_us" }
57
+ },
58
+ serviceChannelContext: {
59
+ schema: "iglu:com.simplybusiness/service_channel_context/jsonschema/1-0-0",
60
+ data: { service_channel_identifier: "simplybusiness_us" }
61
+ },
62
+ forceSecureTracker: true
63
+ }
64
+ }
65
+ ]
66
+ };
67
+ //# sourceMappingURL=scripts-mock.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/mocks/scripts-mock.ts"],
4
+ "sourcesContent": ["export const pageData = {\n scripts: [\n {\n metadata: { name: \"snowplow\" },\n props: {\n uid: \"49a449d8aaa9dd58f90a623d4b9dbcae235bf92a\",\n cookieDomain: \"\",\n // TODO: Change this url to \"http://localhost:8000\" for local development\n avalancheCollector:\n \"https://snowplow-collector-staging.simplybusiness.com\",\n appId: \"us-chopin\",\n includeGAContext: true,\n eventMethod: \"post\",\n postPath: \"/com.simplybusiness/events\",\n trackActivity: true,\n trackPageView: true,\n pageViewContext: {\n schema: \"iglu:uk.co.simplybusiness/journey_context/jsonschema/1-0-0\",\n data: {\n site: \"simplybusiness_us\",\n vertical: \"usa\",\n superSegment: \"Unknown\",\n primaryDetail: \"Lawn care services\",\n journeyName: \"usa\",\n journeyId: \"666ff79d90abbc3582e496da\",\n pageStepName: \"thank_you_ssr\",\n pageStepDepth: -1,\n },\n },\n distributionChannelContext: {\n schema:\n \"iglu:com.simplybusiness/distribution_channel_context/jsonschema/1-0-0\",\n data: { service_channel_identifier: \"simplybusiness_us\" },\n },\n serviceChannelContext: {\n schema:\n \"iglu:com.simplybusiness/service_channel_context/jsonschema/1-0-0\",\n data: { service_channel_identifier: \"simplybusiness_us\" },\n },\n forceSecureTracker: true,\n },\n },\n ],\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,IAAM,WAAW;AAAA,EACtB,SAAS;AAAA,IACP;AAAA,MACE,UAAU,EAAE,MAAM,WAAW;AAAA,MAC7B,OAAO;AAAA,QACL,KAAK;AAAA,QACL,cAAc;AAAA;AAAA,QAEd,oBACE;AAAA,QACF,OAAO;AAAA,QACP,kBAAkB;AAAA,QAClB,aAAa;AAAA,QACb,UAAU;AAAA,QACV,eAAe;AAAA,QACf,eAAe;AAAA,QACf,iBAAiB;AAAA,UACf,QAAQ;AAAA,UACR,MAAM;AAAA,YACJ,MAAM;AAAA,YACN,UAAU;AAAA,YACV,cAAc;AAAA,YACd,eAAe;AAAA,YACf,aAAa;AAAA,YACb,WAAW;AAAA,YACX,cAAc;AAAA,YACd,eAAe;AAAA,UACjB;AAAA,QACF;AAAA,QACA,4BAA4B;AAAA,UAC1B,QACE;AAAA,UACF,MAAM,EAAE,4BAA4B,oBAAoB;AAAA,QAC1D;AAAA,QACA,uBAAuB;AAAA,UACrB,QACE;AAAA,UACF,MAAM,EAAE,4BAA4B,oBAAoB;AAAA,QAC1D;AAAA,QACA,oBAAoB;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/snowplow/Snowplow.ts
21
+ var Snowplow_exports = {};
22
+ __export(Snowplow_exports, {
23
+ Snowplow: () => Snowplow
24
+ });
25
+ module.exports = __toCommonJS(Snowplow_exports);
26
+ var import_browser_tracker = require("@snowplow/browser-tracker");
27
+ var import_browser_plugin_ga_cookies = require("@snowplow/browser-plugin-ga-cookies");
28
+
29
+ // src/snowplow/contexts.ts
30
+ var updateIdentityContext = (contexts, uid) => {
31
+ const index = Object.keys(contexts).findIndex(
32
+ (ctx) => contexts[ctx].schema?.includes("identity_context")
33
+ );
34
+ if (index > -1) {
35
+ const key = Object.keys(contexts)[index];
36
+ return {
37
+ ...contexts,
38
+ [key]: {
39
+ ...contexts[key],
40
+ data: {
41
+ ...contexts[key].data,
42
+ domain_userid: uid
43
+ }
44
+ }
45
+ };
46
+ }
47
+ return contexts;
48
+ };
49
+ var makeContexts = (keys, config) => (keys || []).map((key) => config[key]);
50
+
51
+ // src/snowplow/Snowplow.ts
52
+ var Snowplow = class _Snowplow {
53
+ constructor(props) {
54
+ this.avalancheTrackerName = "sb-ava";
55
+ this.bronzeAvalancheTrackerName = "sb-ava-br";
56
+ this.pvAvalancheTrackerName = "sb-ava-pv";
57
+ this.uid = "";
58
+ this.trackPageView = false;
59
+ this.contexts = {};
60
+ this.pvContext = [];
61
+ this.structContext = [];
62
+ this.serverData = {};
63
+ this.eventHandlers = {};
64
+ if (!props) return;
65
+ const {
66
+ appId,
67
+ cookieDomain,
68
+ avalancheCollector,
69
+ eventMethod,
70
+ uid,
71
+ postPath,
72
+ trackPageView: tpv
73
+ } = props;
74
+ this.uid = uid;
75
+ this.trackPageView = tpv;
76
+ this.serverData = props?.pageViewContext?.data || {};
77
+ const stateStorageStrategy = "cookieAndLocalStorage";
78
+ const baseOptions = {
79
+ appId,
80
+ cookieDomain,
81
+ eventMethod,
82
+ stateStorageStrategy,
83
+ postPath
84
+ };
85
+ (0, import_browser_tracker.newTracker)(this.avalancheTrackerName, avalancheCollector, baseOptions);
86
+ (0, import_browser_tracker.newTracker)(
87
+ this.bronzeAvalancheTrackerName,
88
+ avalancheCollector,
89
+ baseOptions
90
+ );
91
+ (0, import_browser_tracker.newTracker)(this.pvAvalancheTrackerName, avalancheCollector, {
92
+ ...baseOptions,
93
+ eventMethod: eventMethod === "post" ? "beacon" : eventMethod,
94
+ plugins: [(0, import_browser_plugin_ga_cookies.GaCookiesPlugin)()]
95
+ });
96
+ (0, import_browser_tracker.setCookiePath)("/");
97
+ if (uid) {
98
+ (0, import_browser_tracker.setUserId)(uid);
99
+ }
100
+ _Snowplow.instance = this;
101
+ }
102
+ setContexts(contexts) {
103
+ this.contexts = updateIdentityContext(contexts, this.uid);
104
+ this.pvContext = makeContexts(
105
+ [
106
+ "pageViewContext",
107
+ "distributionChannelContext",
108
+ "serviceChannelContext"
109
+ ],
110
+ this.contexts
111
+ );
112
+ this.structContext = makeContexts(
113
+ ["distributionChannelContext", "serviceChannelContext"],
114
+ this.contexts
115
+ );
116
+ return this;
117
+ }
118
+ // Send a page view event
119
+ trackView(event) {
120
+ if (this.trackPageView) {
121
+ (0, import_browser_tracker.trackPageView)({ ...event, context: this.pvContext }, [
122
+ this.pvAvalancheTrackerName
123
+ ]);
124
+ }
125
+ return this;
126
+ }
127
+ // Send a structured event with contexts
128
+ trackEvent(event) {
129
+ (0, import_browser_tracker.trackStructEvent)({ ...event, context: this.structContext }, [
130
+ this.bronzeAvalancheTrackerName
131
+ ]);
132
+ return this;
133
+ }
134
+ // Send a custom event with defined schema and optional contexts
135
+ trackUnstructEvent(event, contexts) {
136
+ if (!event) {
137
+ return this;
138
+ }
139
+ if (contexts && Array.isArray(contexts) && contexts.length > 0) {
140
+ const context = makeContexts(contexts, this.contexts);
141
+ (0, import_browser_tracker.trackSelfDescribingEvent)({ event, context }, [this.avalancheTrackerName]);
142
+ } else {
143
+ (0, import_browser_tracker.trackSelfDescribingEvent)({ event }, [this.avalancheTrackerName]);
144
+ }
145
+ return this;
146
+ }
147
+ addEventHandlers(eventDefinitions) {
148
+ const context = this.serverData;
149
+ eventDefinitions.forEach(({ name, type, makePayload, contexts }) => {
150
+ if (type === "structured") {
151
+ this.addEventHandler(name, (params) => {
152
+ void this.trackEvent(
153
+ makePayload({
154
+ ...params,
155
+ context
156
+ })
157
+ );
158
+ });
159
+ } else {
160
+ this.addEventHandler(name, (params) => {
161
+ const payload = makePayload({
162
+ ...params,
163
+ context
164
+ });
165
+ if (contexts && Array.isArray(contexts) && contexts.length > 0) {
166
+ void this.trackUnstructEvent(payload, contexts);
167
+ } else {
168
+ void this.trackUnstructEvent(payload);
169
+ }
170
+ });
171
+ }
172
+ });
173
+ return this;
174
+ }
175
+ addEventHandler(name, handler) {
176
+ this.eventHandlers[name] = handler;
177
+ return this;
178
+ }
179
+ removeEventHandler(name) {
180
+ delete this.eventHandlers[name];
181
+ return this;
182
+ }
183
+ trigger(name, params) {
184
+ const handler = this.eventHandlers[name];
185
+ if (Object.prototype.hasOwnProperty.call(this.eventHandlers, name) && typeof handler === "function") {
186
+ handler(params);
187
+ }
188
+ return this;
189
+ }
190
+ static getInstance(props) {
191
+ if (!_Snowplow.instance) {
192
+ _Snowplow.instance = new _Snowplow(props);
193
+ }
194
+ return _Snowplow.instance;
195
+ }
196
+ };
197
+ //# sourceMappingURL=Snowplow.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/snowplow/Snowplow.ts", "../../../src/snowplow/contexts.ts"],
4
+ "sourcesContent": ["import type {\n PageViewEvent,\n StructuredEvent,\n TrackerConfiguration,\n} from \"@snowplow/browser-tracker\";\nimport {\n newTracker,\n setCookiePath,\n setUserId,\n trackPageView,\n trackSelfDescribingEvent,\n trackStructEvent,\n} from \"@snowplow/browser-tracker\";\nimport { GaCookiesPlugin } from \"@snowplow/browser-plugin-ga-cookies\";\nimport { makeContexts, updateIdentityContext } from \"./contexts\";\nimport type { 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 plugins: [GaCookiesPlugin()],\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 = makeContexts(\n [\n \"pageViewContext\",\n \"distributionChannelContext\",\n \"serviceChannelContext\",\n ],\n this.contexts,\n );\n this.structContext = makeContexts(\n [\"distributionChannelContext\", \"serviceChannelContext\"],\n this.contexts,\n );\n return this;\n }\n\n // Send a page view event\n trackView(event?: PageViewEvent) {\n if (this.trackPageView) {\n trackPageView({ ...event, context: this.pvContext }, [\n this.pvAvalancheTrackerName,\n ]);\n }\n return this;\n }\n\n // Send a structured event with contexts\n trackEvent(event: StructuredEvent) {\n 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 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 trackSelfDescribingEvent({ event, context }, [this.avalancheTrackerName]);\n } else {\n 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 void 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 void this.trackUnstructEvent(payload, contexts);\n } else {\n void 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", "import { snakeCaseKeys } from \"../utils\";\nimport type { 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"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }