@simplybusiness/services 2.4.2 → 2.4.4
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.
- package/CHANGELOG.md +16 -0
- package/dist/cjs/index.js +9 -10
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/meta.json +13 -13
- package/dist/cjs/snowplow/SnowplowContext.js +9 -10
- package/dist/cjs/snowplow/SnowplowContext.js.map +2 -2
- package/dist/cjs/snowplow/index.js +9 -10
- package/dist/cjs/snowplow/index.js.map +2 -2
- package/dist/cjs/utils/testUtils.js +9 -10
- package/dist/cjs/utils/testUtils.js.map +2 -2
- package/dist/esm/{chunk-WB3C6L4X.js → chunk-7QIIG44X.js} +10 -11
- package/dist/esm/chunk-7QIIG44X.js.map +7 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/meta.json +10 -10
- package/dist/esm/snowplow/SnowplowContext.js +1 -1
- package/dist/esm/snowplow/index.js +1 -1
- package/dist/esm/utils/testUtils.js +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/snowplow/SnowplowContext.tsx +10 -13
- package/dist/esm/chunk-WB3C6L4X.js.map +0 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2.4.4
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 87757c7: fix: register Snowplow event handlers synchronously in useState initializer
|
|
8
|
+
|
|
9
|
+
Prevents race condition where child useEffects fire triggers
|
|
10
|
+
before the parent useEffect has called addEventHandlers().
|
|
11
|
+
|
|
12
|
+
## 2.4.3
|
|
13
|
+
|
|
14
|
+
### Patch Changes
|
|
15
|
+
|
|
16
|
+
- Updated dependencies [ff8c3ab]
|
|
17
|
+
- @simplybusiness/mobius@9.3.4
|
|
18
|
+
|
|
3
19
|
## 2.4.2
|
|
4
20
|
|
|
5
21
|
### Patch Changes
|
package/dist/cjs/index.js
CHANGED
|
@@ -1491,18 +1491,17 @@ var import_jsx_runtime = require("react/jsx-runtime");
|
|
|
1491
1491
|
var SnowplowContext = (0, import_react.createContext)(null);
|
|
1492
1492
|
var SnowplowProvider = ({ scripts, children }) => {
|
|
1493
1493
|
const [config, _setConfig] = (0, import_react.useState)(scripts);
|
|
1494
|
-
const [snowplowInstance] = (0, import_react.useState)(
|
|
1495
|
-
|
|
1496
|
-
|
|
1494
|
+
const [snowplowInstance] = (0, import_react.useState)(() => {
|
|
1495
|
+
const instance = Snowplow.getInstance(config);
|
|
1496
|
+
const contexts = getContexts(config);
|
|
1497
|
+
instance.setContexts(contexts).addEventHandlers(eventDefinitions);
|
|
1498
|
+
return instance;
|
|
1499
|
+
});
|
|
1497
1500
|
(0, import_react.useEffect)(() => {
|
|
1498
|
-
if (snowplowInstance &&
|
|
1499
|
-
|
|
1500
|
-
snowplowInstance.setContexts(contexts).addEventHandlers(eventDefinitions);
|
|
1501
|
-
if (config.trackPageView) {
|
|
1502
|
-
void snowplowInstance.trackView();
|
|
1503
|
-
}
|
|
1501
|
+
if (snowplowInstance && config?.trackPageView) {
|
|
1502
|
+
void snowplowInstance.trackView();
|
|
1504
1503
|
}
|
|
1505
|
-
}, [config, snowplowInstance
|
|
1504
|
+
}, [config, snowplowInstance]);
|
|
1506
1505
|
const value = (0, import_react.useMemo)(
|
|
1507
1506
|
() => ({
|
|
1508
1507
|
config,
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/index.tsx", "../../src/address-lookup/index.ts", "../../src/airbrake/index.ts", "../../src/utils/text.ts", "../../src/utils/isObject.tsx", "../../src/snowplow/contexts.ts", "../../src/snowplow/event-definitions/base.ts", "../../src/snowplow/event-definitions/intervention.ts", "../../src/snowplow/constants.ts", "../../src/snowplow/event-definitions/questionnaire/redaction.ts", "../../src/snowplow/event-definitions/personalised_cover.ts", "../../src/snowplow/event-definitions/qcp.ts", "../../src/snowplow/event-definitions/questionnaire/questionnaire.ts", "../../src/snowplow/event-definitions/coverage-selection.ts", "../../src/snowplow/event-definitions/referral.ts", "../../src/snowplow/event-definitions/index.ts", "../../src/snowplow/getSnowplowConfig.ts", "../../src/snowplow/Snowplow.ts", "../../src/snowplow/SnowplowContext.tsx"],
|
|
4
|
-
"sourcesContent": ["export * from \"./address-lookup\";\nexport * from \"./airbrake\";\nexport * from \"./snowplow\";\n", "import type {\n AddressError,\n AddressLookupConfig,\n FindAddressResponse,\n FindAddressResult,\n Option,\n Options,\n RetrieveAddressResponse,\n RetrieveAddressResult,\n} from \"./types\";\n\n// Loquate API constants\nconst BASE_URL = \"https://api.addressy.com/Capture/Interactive\";\nconst FIND_URL = `${BASE_URL}/Find/v1.00/json3.ws`;\nconst RETRIEVE_URL = `${BASE_URL}/Retrieve/v1.2/json3.ws`;\nconst COUNTRIES = [\"GB\"]; // 2 or 3-letter ISO country codes\nconst LIMIT = 20;\n\nexport class AddressLookup {\n private apiKey: string;\n\n private limit: number;\n\n private findUrl: string;\n\n private retrieveUrl: string;\n\n private countries: string[];\n\n constructor({ apiKey, limit, countries }: AddressLookupConfig) {\n this.apiKey = apiKey;\n this.limit = limit || LIMIT;\n this.countries = countries || COUNTRIES;\n const countriesParam = this.countries.join(\",\");\n this.findUrl = `${FIND_URL}?Key=${this.apiKey}&Limit=${this.limit}&Countries=${countriesParam}`;\n this.retrieveUrl = `${RETRIEVE_URL}?Key=${this.apiKey}`;\n }\n\n private static async fetchFromApi<RespType>(\n url: string,\n handleResponse: (data: RespType) => unknown,\n ): Promise<unknown> {\n return new Promise((resolve, reject) => {\n fetch(url)\n .then(response => response.json() as Promise<RespType>)\n .then(data => resolve(handleResponse(data)))\n .catch(error => reject(Error(String(error))));\n });\n }\n\n public find(partialAddress: string): Promise<Options> {\n return new Promise((resolve, reject) => {\n fetch(`${this.findUrl}&Text=${partialAddress}`)\n .then(response => response.json() as Promise<FindAddressResponse>)\n .then(data => resolve(this.formatItems(data)))\n .catch(error => reject(Error(String(error))));\n });\n }\n\n public findById(id: string): Promise<Options> {\n return new Promise((resolve, reject) => {\n fetch(`${this.findUrl}&Container=${id}`)\n .then(response => response.json() as Promise<FindAddressResponse>)\n .then(data => resolve(this.formatItems(data)))\n .catch(error => reject(Error(String(error))));\n });\n }\n\n public get(id: string): Promise<Record<string, string>> {\n return new Promise((resolve, reject) => {\n fetch(`${this.retrieveUrl}&Id=${id}`)\n .then(response => response.json() as Promise<RetrieveAddressResponse>)\n .then(data => resolve(AddressLookup.formatUkAddress(data)))\n .catch(error => reject(Error(String(error))));\n });\n }\n\n private formatItems({ Items }: FindAddressResponse) {\n if (!Items || !Array.isArray(Items)) {\n throw Error(\"No address found\");\n }\n\n if ((Items[0] as AddressError).Error) {\n throw Error(Items[0].Description);\n }\n\n return (Items as FindAddressResult[]).map(\n (item): Option => ({\n id: item.Id,\n label: `${item.Text}, ${item.Description}`,\n value: item.Text,\n // Add a callback to trigger secondary search\n // if the address type is not \"Address\"\n callback:\n item.Type === \"Address\" ? undefined : () => this.findById(item.Id),\n }),\n );\n }\n\n private static formatUkAddress({ Items }: RetrieveAddressResponse) {\n if (!Items || !Array.isArray(Items)) {\n throw Error(\"No address found\");\n }\n\n if ((Items[0] as AddressError).Error) {\n throw Error((Items[0] as AddressError).Description);\n }\n\n const { Line1, Line2, City, PostalCode } = (\n Items as RetrieveAddressResult[]\n )[0];\n\n return {\n address_1: Line1,\n address_2: Line2,\n town: City,\n uk_postcode: PostalCode,\n };\n }\n}\n", "import { Notifier } from \"@airbrake/browser\";\n\n// https://simplybusiness.airbrake.io/projects/512949/edit#tab-access\n// This configuration is for embedded-qcp project\nconst defaultProjectId = 512949;\nconst defaultProjectKey = \"4e25197d8faea61c10fbb97702200780\";\n\n// Map of project IDs to notifier instances to support multiple Airbrake accounts\nconst notifierInstances = new Map<number, Notifier>();\n\n// Fake notifier which logs to console instead of sending to Airbrake\nconst fakeAirbrake = {\n notify:\n globalThis.process?.env?.NODE_ENV === \"test\"\n ? () => {}\n : console.error.bind(console),\n};\n\n// Get Airbrake environment from AIRBRAKE_ENV, defaulting to \"development\"\nexport const getAirbrakeEnvironment = () =>\n globalThis.process?.env?.AIRBRAKE_ENV ?? \"development\";\n\n// Only send real alerts in staging and production environments\nconst shouldUseAirbrake = () => {\n const env = getAirbrakeEnvironment();\n return env === \"staging\" || env === \"production\";\n};\n\nexport type GetAirbrakeOptions = {\n projectId?: number;\n projectKey?: string;\n forceSend?: boolean;\n};\n\nexport function getAirbrake(options: GetAirbrakeOptions = {}) {\n const {\n projectId = defaultProjectId,\n projectKey = defaultProjectKey,\n forceSend,\n } = options;\n\n if (!forceSend && !shouldUseAirbrake()) {\n return fakeAirbrake;\n }\n\n let notifierInstance = notifierInstances.get(projectId);\n\n if (!notifierInstance) {\n notifierInstance = new Notifier({\n projectId,\n projectKey,\n environment: getAirbrakeEnvironment(),\n instrumentation: {\n onerror: false,\n unhandledrejection: false,\n },\n });\n notifierInstances.set(projectId, notifierInstance);\n }\n\n return notifierInstance;\n}\n", "import { isObject } from \".\";\n\n// Deeply converts keys in an object to snake_case\nexport const snakeCaseKeys = (object: Record<string, unknown>) =>\n Object.entries(object || {}).reduce(\n (acc: Record<string, unknown>, [key, value]): Record<string, unknown> => {\n const newKey = camelToSnakeCase(key);\n\n if (Array.isArray(value) && value.every(isObject)) {\n return {\n ...acc,\n [newKey]: value.map(v => snakeCaseKeys(v)),\n };\n }\n\n if (isObject(value)) {\n return {\n ...acc,\n [newKey]: snakeCaseKeys(value),\n };\n }\n\n return {\n ...acc,\n [newKey]: value,\n };\n },\n {},\n );\n\nexport const snakeCase = (text = \"\"): string =>\n text.toLowerCase().replace(/ /g, \"_\");\n\nexport const camelToSnakeCase = (text: string) =>\n text.charAt(0).toLowerCase() +\n text\n .slice(1)\n .replace(/(\\[.*?\\])|[A-Z]/g, (match, group) =>\n group ? match : `_${match.toLowerCase()}`,\n );\n", "export function isObject(value: unknown): value is Record<string, unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n Object.getPrototypeOf(value) === Object.prototype\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", "import type { EventDefinition, ParamsType } from \"../types\";\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\n// Base page events\nexport const baseEventDefinitions: EventDefinition[] = [\n // Mobile link in header\n {\n name: \"mobileLinkClick\",\n type: \"structured\",\n makePayload: () => ({\n category: \"marketing\",\n action: \"link-click\",\n label: \"mobile_call_button\",\n property: window.location.href,\n }),\n },\n // Operating hours link in footer\n {\n name: \"operatingHoursClick\",\n type: \"unstructured\",\n makePayload: () => ({\n schema:\n \"iglu:com.snowplowanalytics.snowplow/unstruct_event/jsonschema/1-0-0\",\n data: {\n schema:\n \"iglu:com.simplybusiness/operating_hours_clicked/jsonschema/1-0-2\",\n data: {},\n },\n }),\n },\n {\n name: \"progressbarClicked\",\n type: \"unstructured\",\n makePayload: params => {\n const {\n section,\n context,\n fromStepIndex,\n fromStepName,\n stepIndex,\n stepName,\n } = params as ParamsType;\n\n return {\n schema: \"iglu:com.simplybusiness/progressbar_clicked/jsonschema/1-1-0\",\n data: {\n source_page_index: fromStepIndex,\n source_page_name: fromStepName,\n page_index: stepIndex,\n page_name: stepName,\n site: context.site,\n section_name: section,\n vertical: context.vertical,\n },\n };\n },\n },\n // Zendesk help chat link\n {\n name: \"helpChatLinkClicked\",\n type: \"structured\",\n makePayload: params => {\n const { label } = params as ParamsType;\n\n return {\n category: \"help chat for question\",\n action: \"help_chat_for_question_clicked\",\n label,\n property: window.location.href,\n };\n },\n contexts: [\"serviceChannelContext\"],\n },\n];\n", "import type { EventDefinition } from \"../types\";\n\ntype InterventionIdTypes = \"duid\"; // Add more values as needed\n\nexport type InterventionPayload = {\n interventionId: string;\n interventionName: string;\n userUniqueIdentifier: string;\n userUniqueIdentifierType: InterventionIdTypes;\n action: string;\n site?: string;\n};\n\nexport const interventionEventDefinitions: EventDefinition[] = [\n {\n name: \"interventionInteractionCompleted\",\n type: \"unstructured\",\n makePayload: params => {\n const {\n interventionName,\n userUniqueIdentifier,\n userUniqueIdentifierType,\n action,\n site,\n } = params as InterventionPayload;\n\n return {\n schema:\n \"iglu:com.simplybusiness/intervention_interaction_completed/jsonschema/2-1-0\",\n data: {\n intervention_name: interventionName,\n user_unique_identifier: userUniqueIdentifier,\n user_unique_identifier_type: userUniqueIdentifierType,\n action,\n site,\n },\n };\n },\n },\n {\n name: \"iaLiveChatInterventionClosed\",\n type: \"structured\",\n makePayload: _ => ({\n category: \"insurance_assistant\",\n action: \"ia_live_chat_intervention_closed\",\n }),\n },\n];\n", "export const DELIMITER = \"|\"; // Used to flatten arrays\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", "import { snakeCase } from \"../../utils\";\nimport { DELIMITER } from \"../constants\";\nimport type { EventDefinition, ParamsType } from \"../types\";\nimport { redact } from \"./questionnaire/redaction\";\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-4\",\n data: {\n site: context.site,\n page_name: \"personalised_cover\",\n section_name: \"Personalised Cover Questions\",\n question,\n answer: flatAnswer,\n vertical: context.vertical,\n journey_id: context.journeyId,\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: \"coverDetailsClicked\",\n type: \"structured\",\n makePayload: params => {\n const { property } = params as ParamsType;\n\n return {\n category: \"personalised_cover\",\n action: \"cover_details_clicked\",\n label: \"cover_name\",\n property,\n };\n },\n },\n {\n name: \"additionalQuestionsClicked\",\n type: \"structured\",\n makePayload: params => {\n const { property } = params as ParamsType;\n\n return {\n category: \"personalised_cover\",\n action: \"cover_details_clicked\",\n label: \"cover_name\",\n property,\n };\n },\n },\n {\n name: \"chatbotPromptClicked\",\n type: \"structured\",\n makePayload: params => {\n const { label, property } = params as ParamsType;\n\n return {\n category: \"personalised_cover\",\n action: \"chatbot_prompt_clicked\",\n label: property,\n property: label,\n };\n },\n },\n];\n", "import { snakeCase } from \"../../utils\";\nimport type { EventDefinition, LinkType, ParamsType } from \"../types\";\n\n// QCP page events\nexport const qcpEventDefinitions: EventDefinition[] = [\n {\n // QDP details button\n name: \"detailsClicked\",\n type: \"structured\",\n makePayload: () => ({\n category: \"comparison_cta\",\n action: \"link_click\",\n label: \"Details\",\n }),\n },\n {\n // Buy button\n name: \"selectClicked\",\n type: \"structured\",\n makePayload: () => ({\n category: \"comparison_cta\",\n action: \"link_click\",\n label: \"Buy\",\n }),\n },\n {\n // Quote Details Slider Next steps button\n name: \"nextStepsClicked\",\n type: \"structured\",\n makePayload: () => ({\n category: \"quote_details_slider_next_step_cta\",\n action: \"link_click\",\n label: \"Next steps\",\n }),\n },\n {\n // Toggle deductibles accordion\n name: \"deductiblesClicked\",\n type: \"structured\",\n makePayload: () => ({\n category: \"us-qcp-react\",\n action: \"view_deductables_clicked\",\n label: \"view_deductables_clicked\",\n property: window.location.href,\n }),\n },\n {\n name: \"deductiblesClickedUk\",\n type: \"structured\",\n makePayload: params => {\n const { label, deviceType } = params as ParamsType;\n const urlFriendlyLabel = label.replace(/ /g, \"-\").toLowerCase();\n\n return {\n category: `uk-qcp-react-${deviceType}-${urlFriendlyLabel}-view-excess-toggle`,\n action: \"view_excess_clicked\",\n label,\n property: window.location.href,\n };\n },\n },\n {\n // Quote Details Slider opened\n name: \"sliderOpened\",\n type: \"structured\",\n makePayload: params => {\n const { label } = params as ParamsType;\n\n return {\n category: \"comparison_cta\",\n action: \"quote_details_slider_opened\",\n label,\n };\n },\n },\n {\n // Coverage modal opened\n name: \"coverageModalOpened\",\n type: \"structured\",\n makePayload: params => {\n const {\n category,\n product = \"extra_coverage\",\n title,\n } = params as ParamsType;\n const productLabel = snakeCase(product);\n\n return {\n category,\n action: `${productLabel}_${snakeCase(title)}_popup_opened`,\n label: productLabel,\n property: window.location.href,\n };\n },\n },\n {\n // Toggle cover select\n name: \"coverChanged\",\n type: \"unstructured\",\n makePayload: params => {\n const { name = \"\", fromValue = \"\", toValue = \"\" } = params as ParamsType;\n // Derive data\n let action = \"change\";\n\n // This logic is taken directly from Chopin without documentation:\n // If a cover has zero value, then change the action to add or remove\n if (fromValue === \"0\") {\n action = \"add\";\n }\n if (toValue === \"0\") {\n action = \"remove\";\n }\n\n return {\n schema:\n \"iglu:com.simplybusiness/comparison_page_cover_changed/jsonschema/1-0-0\",\n data: {\n name,\n action,\n from_value: fromValue,\n to_value: toValue,\n },\n };\n },\n contexts: [\"distributionChannelContext\"],\n },\n {\n name: \"ratingsModalOpened\",\n type: \"structured\",\n makePayload: params => {\n const { category, label } = params as ParamsType;\n\n return {\n category,\n action: \"insurer_rating_help_popup_triggered\",\n label,\n property: window.location.href,\n };\n },\n },\n {\n name: \"coverToggleOpened\",\n type: \"structured\",\n makePayload: () => ({\n category: \"qcp_limit_interaction\",\n label: \"limit_interaction\",\n action: \"limit_interaction_clicked\",\n property: window.location.href,\n }),\n },\n {\n name: \"paymentToggleClicked\",\n type: \"structured\",\n makePayload: params => {\n const { category, label } = params as ParamsType;\n\n return {\n category,\n action: \"button_click\",\n label,\n property: window.location.href,\n };\n },\n },\n {\n name: \"insurerDetailsAccordionClicked\",\n type: \"structured\",\n makePayload: () => ({\n category: \"quote_details_slider_insurer_details_description\",\n action: \"accordion_clicked\",\n label: \"accordion_clicked\",\n property: window.location.href,\n }),\n },\n {\n name: \"priceDetailsPopUpOpened\",\n type: \"structured\",\n makePayload: () => ({\n category: \"price_details\",\n action: \"price_details_popup_opened\",\n label: \"Price details\",\n property: window.location.href,\n }),\n },\n {\n name: \"editLimitButtonClicked\",\n type: \"structured\",\n makePayload: () => ({\n category: \"cover_limit_changes\",\n action: \"edit_limit_button_clicked\",\n label: \"Edit Limit\",\n property: window.location.href,\n }),\n },\n {\n name: \"applyButtonClicked\",\n type: \"structured\",\n makePayload: () => ({\n category: \"cover_limit_changes\",\n action: \"apply_button_clicked\",\n label: \"Apply Button Clicked\",\n property: window.location.href,\n }),\n },\n {\n name: \"coverageInfoClicked\",\n type: \"structured\",\n makePayload: params => {\n const { deviceType, open = true } = params as ParamsType;\n\n return {\n action: \"show_coverage_info_clicked\",\n category: `uk-qcp-react-${deviceType}-show-coverage-info-toggle`,\n label: `${open ? \"show\" : \"hide\"}_coverage_info_clicked`,\n property: window.location.href,\n };\n },\n },\n {\n name: \"backToApplication\",\n type: \"unstructured\",\n makePayload: params => {\n const { journeyId, vertical } = params as ParamsType;\n\n return {\n schema:\n \"iglu:com.simplybusiness/qcp_back_to_application/jsonschema/1-0-0\",\n data: {\n journey_id: journeyId,\n vertical,\n },\n };\n },\n contexts: [\"serviceChannelContext\"],\n },\n // No quotes referral\n {\n name: \"coverOptionsLinkClicked\",\n type: \"structured\",\n makePayload: () => ({\n category: \"uk-qcp-react-cover-options-link\",\n action: \"cover_options_link_clicked\",\n label: \"cover_options_link_clicked\",\n property: window.location.href,\n }),\n },\n {\n name: \"referralReasonsVariantBCoverOptionsLinkClicked\",\n type: \"structured\",\n makePayload: () => ({\n category: \"uk-24-12-qcp-mvt-referral-reasons\",\n action: \"cover_options_link_clicked_variant_b\",\n label: \"cover_options_link_clicked_variant_b\",\n property: window.location.href,\n }),\n },\n {\n name: \"referralReasonsVariantCCoverOptionsLinkClicked\",\n type: \"structured\",\n makePayload: () => ({\n category: \"uk-24-12-qcp-mvt-referral-reasons\",\n action: \"cover_options_link_clicked_variant_c\",\n label: \"cover_options_link_clicked_variant_c\",\n property: window.location.href,\n }),\n },\n {\n name: \"phoneNumberLinkClicked\",\n type: \"structured\",\n makePayload: () => ({\n category: \"uk-qcp-react-phone-number-link\",\n action: \"phone_number_link_clicked\",\n label: \"phone_number_link_clicked\",\n property: window.location.href,\n }),\n },\n {\n name: \"linkClicked\",\n type: \"unstructured\",\n makePayload: params => {\n const { targetUrl, elementContent } = params as LinkType;\n\n return {\n schema:\n \"iglu:com.snowplowanalytics.snowplow/link_click/jsonschema/1-0-1\",\n data: {\n targetUrl,\n elementContent,\n },\n };\n },\n },\n {\n name: \"qcpUpsellAccordionClicked\",\n type: \"structured\",\n makePayload: params => ({\n category: \"us-qcp-upsells\",\n action: \"accordion_clicked_qcp\",\n label: params?.label as string,\n property: window.location.href,\n }),\n },\n {\n name: \"qdsUpsellAccordionClicked\",\n type: \"structured\",\n makePayload: params => ({\n category: \"us-qcp-upsells\",\n action: \"accordion_clicked_slider\",\n label: params?.label as string,\n property: window.location.href,\n }),\n },\n {\n name: \"qcpUpsellTooltipHelperClicked\",\n type: \"structured\",\n makePayload: params => ({\n category: \"us-qcp-upsells\",\n action: \"tooltip_helper_clicked_qcp\",\n label: params?.label as string,\n property: window.location.href,\n }),\n },\n {\n name: \"qdsUpsellTooltipHelperClicked\",\n type: \"structured\",\n makePayload: params => ({\n category: \"us-qcp-upsells\",\n action: \"tooltip_helper_clicked_slider\",\n label: params?.label as string,\n property: window.location.href,\n }),\n },\n {\n name: \"qcpQuoteButtonClicked\",\n type: \"structured\",\n makePayload: payload => ({\n category: \"quote-buttons\",\n action: \"button-clicked\",\n label: payload?.label as string,\n property: window.location.href,\n }),\n },\n {\n name: \"layoutToggleClickedExperiment\",\n type: \"structured\",\n makePayload: params => {\n const { layout } = params as ParamsType;\n\n return {\n category: \"uk-25-04-16-gridview_layout\",\n action: \"layout_toggle_clicked\",\n label: layout,\n property: window.location.href,\n };\n },\n },\n {\n name: \"cancelAnytimeBadgeClicked\",\n type: \"structured\",\n makePayload: payload => {\n return {\n category: \"us-26-02-qcp-cancel-anytime-test\",\n action: \"cancel_anytime_badge_clicked\",\n label: (payload?.label as string) || \"cancel_anytime\",\n property: window.location.href,\n };\n },\n },\n];\n", "import { DELIMITER } from \"../../constants\";\nimport type { EventDefinition, ParamsType } from \"../../types\";\nimport { redact } from \"./redaction\";\n\n// Questionnaire events\nexport const questionnaireEventDefinitions: EventDefinition[] = [\n {\n name: \"questionAnswered\",\n type: \"unstructured\",\n makePayload: params => {\n const { section, 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-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: flatAnswer,\n vertical: context.vertical,\n journey_id: context.journeyId,\n },\n };\n },\n contexts: [\"serviceChannelContext\"],\n },\n {\n name: \"primaryDetailSelected\",\n type: \"unstructured\",\n makePayload: params => {\n const {\n context,\n answer,\n vertical,\n searchId,\n selectedListPosition,\n selectionMethod,\n } = params as ParamsType;\n const { site } = context;\n const isUSPage = site === \"simplybusiness_us\";\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 const data: Record<string, unknown> = {\n site,\n vertical: verticalName,\n primary_detail: answer,\n selected_type: \"trade_selector\",\n location: window?.location?.pathname ?? \"\",\n };\n\n // Always include search_id if present\n if (searchId) {\n data.search_id = searchId;\n }\n // Always include selection_method if present\n if (selectionMethod) {\n data.selection_method = selectionMethod;\n }\n\n // US only fields\n if (isUSPage) {\n data.selected_list_position =\n selectedListPosition !== undefined\n ? (selectedListPosition + 1).toString()\n : null;\n data.selected_location = \"trade_selector_vertical\";\n data.business_unit = site;\n }\n\n // Optional pre-filled source\n const preFilledSource =\n (params as ParamsType).preFilledSource ??\n (typeof sessionStorage !== \"undefined\"\n ? sessionStorage.getItem(\"preFilledSource\")\n : null);\n if (preFilledSource) {\n data.pre_filled_source = preFilledSource;\n }\n\n return {\n schema:\n \"iglu:com.simplybusiness/primary_detail_selected/jsonschema/1-5-0\",\n data,\n };\n },\n contexts: [\"distributionChannelContext\", \"serviceChannelContext\"],\n },\n {\n name: \"helpTextOpened\",\n type: \"unstructured\",\n makePayload: params => {\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 primary_text: primaryText,\n help_text: helpText,\n label,\n page_name: \"quick_to_quote\",\n },\n };\n },\n },\n {\n name: \"assumptionsButtonClicked\",\n type: \"structured\",\n makePayload: params => {\n const { source, presentationGroup } = params as ParamsType;\n\n return {\n action: source,\n category: presentationGroup,\n };\n },\n },\n {\n name: \"navButtonClicked\",\n type: \"structured\",\n makePayload: params => {\n const { label, category } = params as ParamsType;\n\n return {\n label,\n action: \"link_click\",\n category,\n };\n },\n },\n {\n name: \"manualAddressClicked\",\n type: \"structured\",\n makePayload: params => {\n const { category } = params as ParamsType;\n\n return {\n action: \"link_click\",\n category,\n label: \"Enter address manually\",\n };\n },\n },\n {\n name: \"assumptionLinkClicked\",\n type: \"structured\",\n makePayload: params => {\n const { label, category, property } = params as ParamsType;\n\n return {\n action: \"assumption_link_click\",\n category,\n label,\n property,\n };\n },\n },\n {\n name: \"addressLookupFocused\",\n type: \"structured\",\n makePayload: params => {\n const { label, category } = params as ParamsType;\n\n return {\n action: \"address_lookup_focused\",\n category,\n label,\n };\n },\n },\n {\n name: \"addressLookupTypedIn\",\n type: \"structured\",\n makePayload: params => {\n const { label, category } = params as ParamsType;\n\n return {\n action: \"address_lookup_typed_in\",\n category,\n label,\n };\n },\n },\n {\n name: \"addressOptionsDisplayed\",\n type: \"structured\",\n makePayload: params => {\n const { label, category } = params as ParamsType;\n\n return {\n action: \"address_options_displayed\",\n category,\n label,\n };\n },\n },\n {\n name: \"tradeChanged\",\n type: \"structured\",\n makePayload: params => {\n const { label, property } = params as ParamsType;\n\n return {\n action: \"change_your_selected_profession_button_clicked\",\n category: \"change_your_selected_profession_button\",\n label: `Question: ${label}`,\n property, // Answer before change\n };\n },\n },\n {\n name: \"questionValidationFailed\",\n type: \"structured\",\n makePayload: params => {\n const { question, errorMessage } = params as ParamsType;\n\n return {\n category: \"questionnaire\",\n action: `${question} validation failed`,\n label: errorMessage,\n };\n },\n },\n {\n name: \"stateQuestionAnswered\",\n type: \"unstructured\",\n makePayload: params => {\n const { context, answer, selectedCoverages } = params as ParamsType & {\n selectedCoverages?: string[];\n selectedType?: string;\n };\n\n const data: Record<string, string> = {\n vertical: context.vertical,\n selected_type: context.journeyName ?? \"usa\",\n location: window?.location?.pathname ?? \"\",\n url: window?.location?.href ?? \"\",\n state: answer,\n selection_method: \"dropdown\",\n };\n\n if (selectedCoverages?.length) {\n data.products = selectedCoverages.join(\",\");\n }\n\n return {\n schema:\n \"iglu:com.simplybusiness/state_question_answered/jsonschema/1-0-0\",\n data,\n };\n },\n },\n {\n name: \"tradeSelectorClicked\",\n type: \"structured\",\n makePayload: () => {\n return {\n category: \"marketing\",\n action: \"trade_selector_clicked\",\n label: \"trade selector clicked\",\n property: window?.location?.href ?? \"\",\n };\n },\n },\n {\n name: \"usStateClicked\",\n type: \"structured\",\n makePayload: () => {\n return {\n category: \"marketing\",\n action: \"us_state_clicked\",\n label: \"US state clicked\",\n property: window?.location?.href ?? \"\",\n };\n },\n },\n {\n name: \"usStateErrorMessageDisplayed\",\n type: \"structured\",\n makePayload: params => {\n const { stateValue } = params as ParamsType;\n\n return {\n category: \"marketing\",\n action: \"us_state_error_message_displayed\",\n label: \"US state error message displayed\",\n property: stateValue ?? \"\",\n };\n },\n },\n {\n name: \"pagesetSectionChanged\",\n type: \"unstructured\",\n makePayload: params => {\n const {\n context,\n pageIndex,\n pageName,\n sectionName,\n sectionIndex,\n sectionComplete,\n } = params as ParamsType;\n\n return {\n schema:\n \"iglu:com.simplybusiness/pageset_section_changed/jsonschema/1-0-0\",\n data: {\n site: context.site,\n vertical: context.vertical,\n page_index: pageIndex,\n page_name: pageName,\n section_name: sectionName,\n section_index: sectionIndex,\n section_complete: sectionComplete,\n },\n };\n },\n contexts: [\"distributionChannelContext\", \"serviceChannelContext\"],\n },\n {\n name: \"aiTradeSelectorFindMyBusiness\",\n type: \"structured\",\n makePayload: params => {\n const { searchQuery } = params as ParamsType;\n\n return {\n category: \"ai_trade_selector_find_my_business_btn\",\n action: \"click\",\n label: searchQuery ?? \"\",\n property: window?.location?.href ?? \"\",\n };\n },\n },\n];\n", "import type { EventDefinition, ParamsType } from \"../types\";\n\ntype CheckboxFormQuestionAnsweredParams = ParamsType & {\n pageIndex: number;\n pageName: string;\n sectionName: string;\n question: string;\n answer: string[];\n};\n\n// Coverage selection events (recommendations, showcase, etc.)\nexport const coverageSelectionEventDefinitions: EventDefinition[] = [\n {\n name: \"checkboxFormQuestionAnswered\",\n type: \"unstructured\",\n makePayload: params => {\n const { context, pageIndex, pageName, sectionName, question, answer } =\n params as CheckboxFormQuestionAnsweredParams;\n\n return {\n schema:\n \"iglu:com.simplybusiness/checkbox_form_question_answered/jsonschema/1-0-1\",\n data: {\n site: context.site,\n vertical: context.vertical ?? \"\",\n journey_id: context.journeyId,\n page_index: pageIndex,\n page_name: pageName,\n section_name: sectionName,\n question,\n answer,\n },\n };\n },\n },\n {\n name: \"learnMoreModalOpened\",\n type: \"structured\",\n makePayload: params => {\n const { product } = params as ParamsType & { product: string };\n\n return {\n category: \"coverage_selection\",\n action: \"learn_more_modal_opened\",\n label: product,\n property: window.location.href,\n };\n },\n },\n];\n", "import type { EventDefinition, ParamsType } from \"../types\";\n\n// Referral page events\nexport const referralEventDefinitions: EventDefinition[] = [\n {\n name: \"nextCoverageClicked\",\n type: \"structured\",\n makePayload: params => {\n const { url } = params as ParamsType;\n const eventName = \"post_referral_workers_compensation_continuation_link\";\n\n return {\n category: eventName,\n action: \"link_click\",\n label: eventName,\n property: url,\n };\n },\n },\n];\n", "import { baseEventDefinitions } from \"./base\";\nimport { interventionEventDefinitions } from \"./intervention\";\nimport { personalisedCoverEventDefinitions } from \"./personalised_cover\";\nimport { qcpEventDefinitions } from \"./qcp\";\nimport { questionnaireEventDefinitions } from \"./questionnaire/questionnaire\";\nimport { coverageSelectionEventDefinitions } from \"./coverage-selection\";\nimport { referralEventDefinitions } from \"./referral\";\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 ...coverageSelectionEventDefinitions,\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\nexport const coverageSelectionPageEvents = [\n ...baseEventDefinitions,\n ...coverageSelectionEventDefinitions,\n];\n\n// Create a new export for each kind of page below\n// containing just the subset needed for that page\n", "import type { TrackingProps, PageDataProps } from \"./types\";\n\n// Get Snowplow config from page data props\nexport const getSnowplowConfig = (\n pageData: PageDataProps,\n): TrackingProps | undefined =>\n pageData.scripts?.find(({ metadata }) => metadata.name === \"snowplow\")\n ?.props as TrackingProps;\n", "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", "/* eslint-disable @typescript-eslint/no-unused-vars */\nimport {\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\nimport { getContexts } from \"./contexts\";\nimport { eventDefinitions } from \"./event-definitions\";\nimport { Snowplow } from \"./Snowplow\";\nimport type { EventDefinition, TrackingProps } from \"./types\";\n\nexport interface SnowplowContextInterface {\n config: TrackingProps;\n snowplow?: Snowplow;\n}\n\nconst SnowplowContext = createContext<SnowplowContextInterface | null>(null);\n\ntype ProviderProps = {\n scripts: TrackingProps;\n children: ReactNode;\n};\n\nexport const SnowplowProvider = ({ scripts, children }: ProviderProps) => {\n const [config, _setConfig] = useState<TrackingProps>(scripts);\n const [snowplowInstance] = useState<Snowplow>(() =>\n Snowplow.getInstance(config),\n );\n\n // Attach event handlers and set contexts\n useEffect(() => {\n if (snowplowInstance && scripts) {\n const contexts = getContexts(config);\n\n snowplowInstance.setContexts(contexts).addEventHandlers(eventDefinitions);\n // Send page view event\n if (config.trackPageView) {\n void snowplowInstance.trackView();\n }\n }\n }, [config, snowplowInstance, scripts]);\n\n const value: SnowplowContextInterface = useMemo(\n () => ({\n config,\n snowplow: snowplowInstance,\n }),\n [config, snowplowInstance],\n );\n\n return (\n <SnowplowContext.Provider value={value}>\n {children}\n </SnowplowContext.Provider>\n );\n};\n\nexport function useSnowplowContext() {\n const context = useContext(SnowplowContext);\n\n if (!context) {\n throw new Error(\n \"useSnowplowContext must be used inside a `SnowplowProvider`\",\n );\n }\n return context;\n}\n"],
|
|
5
|
-
"mappings": "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,QAAQ;AAAA,IACV;AAAA,EACF;AACF;;;AC/CO,IAAM,YAAY;;;ACEzB,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;AA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",
|
|
4
|
+
"sourcesContent": ["export * from \"./address-lookup\";\nexport * from \"./airbrake\";\nexport * from \"./snowplow\";\n", "import type {\n AddressError,\n AddressLookupConfig,\n FindAddressResponse,\n FindAddressResult,\n Option,\n Options,\n RetrieveAddressResponse,\n RetrieveAddressResult,\n} from \"./types\";\n\n// Loquate API constants\nconst BASE_URL = \"https://api.addressy.com/Capture/Interactive\";\nconst FIND_URL = `${BASE_URL}/Find/v1.00/json3.ws`;\nconst RETRIEVE_URL = `${BASE_URL}/Retrieve/v1.2/json3.ws`;\nconst COUNTRIES = [\"GB\"]; // 2 or 3-letter ISO country codes\nconst LIMIT = 20;\n\nexport class AddressLookup {\n private apiKey: string;\n\n private limit: number;\n\n private findUrl: string;\n\n private retrieveUrl: string;\n\n private countries: string[];\n\n constructor({ apiKey, limit, countries }: AddressLookupConfig) {\n this.apiKey = apiKey;\n this.limit = limit || LIMIT;\n this.countries = countries || COUNTRIES;\n const countriesParam = this.countries.join(\",\");\n this.findUrl = `${FIND_URL}?Key=${this.apiKey}&Limit=${this.limit}&Countries=${countriesParam}`;\n this.retrieveUrl = `${RETRIEVE_URL}?Key=${this.apiKey}`;\n }\n\n private static async fetchFromApi<RespType>(\n url: string,\n handleResponse: (data: RespType) => unknown,\n ): Promise<unknown> {\n return new Promise((resolve, reject) => {\n fetch(url)\n .then(response => response.json() as Promise<RespType>)\n .then(data => resolve(handleResponse(data)))\n .catch(error => reject(Error(String(error))));\n });\n }\n\n public find(partialAddress: string): Promise<Options> {\n return new Promise((resolve, reject) => {\n fetch(`${this.findUrl}&Text=${partialAddress}`)\n .then(response => response.json() as Promise<FindAddressResponse>)\n .then(data => resolve(this.formatItems(data)))\n .catch(error => reject(Error(String(error))));\n });\n }\n\n public findById(id: string): Promise<Options> {\n return new Promise((resolve, reject) => {\n fetch(`${this.findUrl}&Container=${id}`)\n .then(response => response.json() as Promise<FindAddressResponse>)\n .then(data => resolve(this.formatItems(data)))\n .catch(error => reject(Error(String(error))));\n });\n }\n\n public get(id: string): Promise<Record<string, string>> {\n return new Promise((resolve, reject) => {\n fetch(`${this.retrieveUrl}&Id=${id}`)\n .then(response => response.json() as Promise<RetrieveAddressResponse>)\n .then(data => resolve(AddressLookup.formatUkAddress(data)))\n .catch(error => reject(Error(String(error))));\n });\n }\n\n private formatItems({ Items }: FindAddressResponse) {\n if (!Items || !Array.isArray(Items)) {\n throw Error(\"No address found\");\n }\n\n if ((Items[0] as AddressError).Error) {\n throw Error(Items[0].Description);\n }\n\n return (Items as FindAddressResult[]).map(\n (item): Option => ({\n id: item.Id,\n label: `${item.Text}, ${item.Description}`,\n value: item.Text,\n // Add a callback to trigger secondary search\n // if the address type is not \"Address\"\n callback:\n item.Type === \"Address\" ? undefined : () => this.findById(item.Id),\n }),\n );\n }\n\n private static formatUkAddress({ Items }: RetrieveAddressResponse) {\n if (!Items || !Array.isArray(Items)) {\n throw Error(\"No address found\");\n }\n\n if ((Items[0] as AddressError).Error) {\n throw Error((Items[0] as AddressError).Description);\n }\n\n const { Line1, Line2, City, PostalCode } = (\n Items as RetrieveAddressResult[]\n )[0];\n\n return {\n address_1: Line1,\n address_2: Line2,\n town: City,\n uk_postcode: PostalCode,\n };\n }\n}\n", "import { Notifier } from \"@airbrake/browser\";\n\n// https://simplybusiness.airbrake.io/projects/512949/edit#tab-access\n// This configuration is for embedded-qcp project\nconst defaultProjectId = 512949;\nconst defaultProjectKey = \"4e25197d8faea61c10fbb97702200780\";\n\n// Map of project IDs to notifier instances to support multiple Airbrake accounts\nconst notifierInstances = new Map<number, Notifier>();\n\n// Fake notifier which logs to console instead of sending to Airbrake\nconst fakeAirbrake = {\n notify:\n globalThis.process?.env?.NODE_ENV === \"test\"\n ? () => {}\n : console.error.bind(console),\n};\n\n// Get Airbrake environment from AIRBRAKE_ENV, defaulting to \"development\"\nexport const getAirbrakeEnvironment = () =>\n globalThis.process?.env?.AIRBRAKE_ENV ?? \"development\";\n\n// Only send real alerts in staging and production environments\nconst shouldUseAirbrake = () => {\n const env = getAirbrakeEnvironment();\n return env === \"staging\" || env === \"production\";\n};\n\nexport type GetAirbrakeOptions = {\n projectId?: number;\n projectKey?: string;\n forceSend?: boolean;\n};\n\nexport function getAirbrake(options: GetAirbrakeOptions = {}) {\n const {\n projectId = defaultProjectId,\n projectKey = defaultProjectKey,\n forceSend,\n } = options;\n\n if (!forceSend && !shouldUseAirbrake()) {\n return fakeAirbrake;\n }\n\n let notifierInstance = notifierInstances.get(projectId);\n\n if (!notifierInstance) {\n notifierInstance = new Notifier({\n projectId,\n projectKey,\n environment: getAirbrakeEnvironment(),\n instrumentation: {\n onerror: false,\n unhandledrejection: false,\n },\n });\n notifierInstances.set(projectId, notifierInstance);\n }\n\n return notifierInstance;\n}\n", "import { isObject } from \".\";\n\n// Deeply converts keys in an object to snake_case\nexport const snakeCaseKeys = (object: Record<string, unknown>) =>\n Object.entries(object || {}).reduce(\n (acc: Record<string, unknown>, [key, value]): Record<string, unknown> => {\n const newKey = camelToSnakeCase(key);\n\n if (Array.isArray(value) && value.every(isObject)) {\n return {\n ...acc,\n [newKey]: value.map(v => snakeCaseKeys(v)),\n };\n }\n\n if (isObject(value)) {\n return {\n ...acc,\n [newKey]: snakeCaseKeys(value),\n };\n }\n\n return {\n ...acc,\n [newKey]: value,\n };\n },\n {},\n );\n\nexport const snakeCase = (text = \"\"): string =>\n text.toLowerCase().replace(/ /g, \"_\");\n\nexport const camelToSnakeCase = (text: string) =>\n text.charAt(0).toLowerCase() +\n text\n .slice(1)\n .replace(/(\\[.*?\\])|[A-Z]/g, (match, group) =>\n group ? match : `_${match.toLowerCase()}`,\n );\n", "export function isObject(value: unknown): value is Record<string, unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n Object.getPrototypeOf(value) === Object.prototype\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", "import type { EventDefinition, ParamsType } from \"../types\";\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\n// Base page events\nexport const baseEventDefinitions: EventDefinition[] = [\n // Mobile link in header\n {\n name: \"mobileLinkClick\",\n type: \"structured\",\n makePayload: () => ({\n category: \"marketing\",\n action: \"link-click\",\n label: \"mobile_call_button\",\n property: window.location.href,\n }),\n },\n // Operating hours link in footer\n {\n name: \"operatingHoursClick\",\n type: \"unstructured\",\n makePayload: () => ({\n schema:\n \"iglu:com.snowplowanalytics.snowplow/unstruct_event/jsonschema/1-0-0\",\n data: {\n schema:\n \"iglu:com.simplybusiness/operating_hours_clicked/jsonschema/1-0-2\",\n data: {},\n },\n }),\n },\n {\n name: \"progressbarClicked\",\n type: \"unstructured\",\n makePayload: params => {\n const {\n section,\n context,\n fromStepIndex,\n fromStepName,\n stepIndex,\n stepName,\n } = params as ParamsType;\n\n return {\n schema: \"iglu:com.simplybusiness/progressbar_clicked/jsonschema/1-1-0\",\n data: {\n source_page_index: fromStepIndex,\n source_page_name: fromStepName,\n page_index: stepIndex,\n page_name: stepName,\n site: context.site,\n section_name: section,\n vertical: context.vertical,\n },\n };\n },\n },\n // Zendesk help chat link\n {\n name: \"helpChatLinkClicked\",\n type: \"structured\",\n makePayload: params => {\n const { label } = params as ParamsType;\n\n return {\n category: \"help chat for question\",\n action: \"help_chat_for_question_clicked\",\n label,\n property: window.location.href,\n };\n },\n contexts: [\"serviceChannelContext\"],\n },\n];\n", "import type { EventDefinition } from \"../types\";\n\ntype InterventionIdTypes = \"duid\"; // Add more values as needed\n\nexport type InterventionPayload = {\n interventionId: string;\n interventionName: string;\n userUniqueIdentifier: string;\n userUniqueIdentifierType: InterventionIdTypes;\n action: string;\n site?: string;\n};\n\nexport const interventionEventDefinitions: EventDefinition[] = [\n {\n name: \"interventionInteractionCompleted\",\n type: \"unstructured\",\n makePayload: params => {\n const {\n interventionName,\n userUniqueIdentifier,\n userUniqueIdentifierType,\n action,\n site,\n } = params as InterventionPayload;\n\n return {\n schema:\n \"iglu:com.simplybusiness/intervention_interaction_completed/jsonschema/2-1-0\",\n data: {\n intervention_name: interventionName,\n user_unique_identifier: userUniqueIdentifier,\n user_unique_identifier_type: userUniqueIdentifierType,\n action,\n site,\n },\n };\n },\n },\n {\n name: \"iaLiveChatInterventionClosed\",\n type: \"structured\",\n makePayload: _ => ({\n category: \"insurance_assistant\",\n action: \"ia_live_chat_intervention_closed\",\n }),\n },\n];\n", "export const DELIMITER = \"|\"; // Used to flatten arrays\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", "import { snakeCase } from \"../../utils\";\nimport { DELIMITER } from \"../constants\";\nimport type { EventDefinition, ParamsType } from \"../types\";\nimport { redact } from \"./questionnaire/redaction\";\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-4\",\n data: {\n site: context.site,\n page_name: \"personalised_cover\",\n section_name: \"Personalised Cover Questions\",\n question,\n answer: flatAnswer,\n vertical: context.vertical,\n journey_id: context.journeyId,\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: \"coverDetailsClicked\",\n type: \"structured\",\n makePayload: params => {\n const { property } = params as ParamsType;\n\n return {\n category: \"personalised_cover\",\n action: \"cover_details_clicked\",\n label: \"cover_name\",\n property,\n };\n },\n },\n {\n name: \"additionalQuestionsClicked\",\n type: \"structured\",\n makePayload: params => {\n const { property } = params as ParamsType;\n\n return {\n category: \"personalised_cover\",\n action: \"cover_details_clicked\",\n label: \"cover_name\",\n property,\n };\n },\n },\n {\n name: \"chatbotPromptClicked\",\n type: \"structured\",\n makePayload: params => {\n const { label, property } = params as ParamsType;\n\n return {\n category: \"personalised_cover\",\n action: \"chatbot_prompt_clicked\",\n label: property,\n property: label,\n };\n },\n },\n];\n", "import { snakeCase } from \"../../utils\";\nimport type { EventDefinition, LinkType, ParamsType } from \"../types\";\n\n// QCP page events\nexport const qcpEventDefinitions: EventDefinition[] = [\n {\n // QDP details button\n name: \"detailsClicked\",\n type: \"structured\",\n makePayload: () => ({\n category: \"comparison_cta\",\n action: \"link_click\",\n label: \"Details\",\n }),\n },\n {\n // Buy button\n name: \"selectClicked\",\n type: \"structured\",\n makePayload: () => ({\n category: \"comparison_cta\",\n action: \"link_click\",\n label: \"Buy\",\n }),\n },\n {\n // Quote Details Slider Next steps button\n name: \"nextStepsClicked\",\n type: \"structured\",\n makePayload: () => ({\n category: \"quote_details_slider_next_step_cta\",\n action: \"link_click\",\n label: \"Next steps\",\n }),\n },\n {\n // Toggle deductibles accordion\n name: \"deductiblesClicked\",\n type: \"structured\",\n makePayload: () => ({\n category: \"us-qcp-react\",\n action: \"view_deductables_clicked\",\n label: \"view_deductables_clicked\",\n property: window.location.href,\n }),\n },\n {\n name: \"deductiblesClickedUk\",\n type: \"structured\",\n makePayload: params => {\n const { label, deviceType } = params as ParamsType;\n const urlFriendlyLabel = label.replace(/ /g, \"-\").toLowerCase();\n\n return {\n category: `uk-qcp-react-${deviceType}-${urlFriendlyLabel}-view-excess-toggle`,\n action: \"view_excess_clicked\",\n label,\n property: window.location.href,\n };\n },\n },\n {\n // Quote Details Slider opened\n name: \"sliderOpened\",\n type: \"structured\",\n makePayload: params => {\n const { label } = params as ParamsType;\n\n return {\n category: \"comparison_cta\",\n action: \"quote_details_slider_opened\",\n label,\n };\n },\n },\n {\n // Coverage modal opened\n name: \"coverageModalOpened\",\n type: \"structured\",\n makePayload: params => {\n const {\n category,\n product = \"extra_coverage\",\n title,\n } = params as ParamsType;\n const productLabel = snakeCase(product);\n\n return {\n category,\n action: `${productLabel}_${snakeCase(title)}_popup_opened`,\n label: productLabel,\n property: window.location.href,\n };\n },\n },\n {\n // Toggle cover select\n name: \"coverChanged\",\n type: \"unstructured\",\n makePayload: params => {\n const { name = \"\", fromValue = \"\", toValue = \"\" } = params as ParamsType;\n // Derive data\n let action = \"change\";\n\n // This logic is taken directly from Chopin without documentation:\n // If a cover has zero value, then change the action to add or remove\n if (fromValue === \"0\") {\n action = \"add\";\n }\n if (toValue === \"0\") {\n action = \"remove\";\n }\n\n return {\n schema:\n \"iglu:com.simplybusiness/comparison_page_cover_changed/jsonschema/1-0-0\",\n data: {\n name,\n action,\n from_value: fromValue,\n to_value: toValue,\n },\n };\n },\n contexts: [\"distributionChannelContext\"],\n },\n {\n name: \"ratingsModalOpened\",\n type: \"structured\",\n makePayload: params => {\n const { category, label } = params as ParamsType;\n\n return {\n category,\n action: \"insurer_rating_help_popup_triggered\",\n label,\n property: window.location.href,\n };\n },\n },\n {\n name: \"coverToggleOpened\",\n type: \"structured\",\n makePayload: () => ({\n category: \"qcp_limit_interaction\",\n label: \"limit_interaction\",\n action: \"limit_interaction_clicked\",\n property: window.location.href,\n }),\n },\n {\n name: \"paymentToggleClicked\",\n type: \"structured\",\n makePayload: params => {\n const { category, label } = params as ParamsType;\n\n return {\n category,\n action: \"button_click\",\n label,\n property: window.location.href,\n };\n },\n },\n {\n name: \"insurerDetailsAccordionClicked\",\n type: \"structured\",\n makePayload: () => ({\n category: \"quote_details_slider_insurer_details_description\",\n action: \"accordion_clicked\",\n label: \"accordion_clicked\",\n property: window.location.href,\n }),\n },\n {\n name: \"priceDetailsPopUpOpened\",\n type: \"structured\",\n makePayload: () => ({\n category: \"price_details\",\n action: \"price_details_popup_opened\",\n label: \"Price details\",\n property: window.location.href,\n }),\n },\n {\n name: \"editLimitButtonClicked\",\n type: \"structured\",\n makePayload: () => ({\n category: \"cover_limit_changes\",\n action: \"edit_limit_button_clicked\",\n label: \"Edit Limit\",\n property: window.location.href,\n }),\n },\n {\n name: \"applyButtonClicked\",\n type: \"structured\",\n makePayload: () => ({\n category: \"cover_limit_changes\",\n action: \"apply_button_clicked\",\n label: \"Apply Button Clicked\",\n property: window.location.href,\n }),\n },\n {\n name: \"coverageInfoClicked\",\n type: \"structured\",\n makePayload: params => {\n const { deviceType, open = true } = params as ParamsType;\n\n return {\n action: \"show_coverage_info_clicked\",\n category: `uk-qcp-react-${deviceType}-show-coverage-info-toggle`,\n label: `${open ? \"show\" : \"hide\"}_coverage_info_clicked`,\n property: window.location.href,\n };\n },\n },\n {\n name: \"backToApplication\",\n type: \"unstructured\",\n makePayload: params => {\n const { journeyId, vertical } = params as ParamsType;\n\n return {\n schema:\n \"iglu:com.simplybusiness/qcp_back_to_application/jsonschema/1-0-0\",\n data: {\n journey_id: journeyId,\n vertical,\n },\n };\n },\n contexts: [\"serviceChannelContext\"],\n },\n // No quotes referral\n {\n name: \"coverOptionsLinkClicked\",\n type: \"structured\",\n makePayload: () => ({\n category: \"uk-qcp-react-cover-options-link\",\n action: \"cover_options_link_clicked\",\n label: \"cover_options_link_clicked\",\n property: window.location.href,\n }),\n },\n {\n name: \"referralReasonsVariantBCoverOptionsLinkClicked\",\n type: \"structured\",\n makePayload: () => ({\n category: \"uk-24-12-qcp-mvt-referral-reasons\",\n action: \"cover_options_link_clicked_variant_b\",\n label: \"cover_options_link_clicked_variant_b\",\n property: window.location.href,\n }),\n },\n {\n name: \"referralReasonsVariantCCoverOptionsLinkClicked\",\n type: \"structured\",\n makePayload: () => ({\n category: \"uk-24-12-qcp-mvt-referral-reasons\",\n action: \"cover_options_link_clicked_variant_c\",\n label: \"cover_options_link_clicked_variant_c\",\n property: window.location.href,\n }),\n },\n {\n name: \"phoneNumberLinkClicked\",\n type: \"structured\",\n makePayload: () => ({\n category: \"uk-qcp-react-phone-number-link\",\n action: \"phone_number_link_clicked\",\n label: \"phone_number_link_clicked\",\n property: window.location.href,\n }),\n },\n {\n name: \"linkClicked\",\n type: \"unstructured\",\n makePayload: params => {\n const { targetUrl, elementContent } = params as LinkType;\n\n return {\n schema:\n \"iglu:com.snowplowanalytics.snowplow/link_click/jsonschema/1-0-1\",\n data: {\n targetUrl,\n elementContent,\n },\n };\n },\n },\n {\n name: \"qcpUpsellAccordionClicked\",\n type: \"structured\",\n makePayload: params => ({\n category: \"us-qcp-upsells\",\n action: \"accordion_clicked_qcp\",\n label: params?.label as string,\n property: window.location.href,\n }),\n },\n {\n name: \"qdsUpsellAccordionClicked\",\n type: \"structured\",\n makePayload: params => ({\n category: \"us-qcp-upsells\",\n action: \"accordion_clicked_slider\",\n label: params?.label as string,\n property: window.location.href,\n }),\n },\n {\n name: \"qcpUpsellTooltipHelperClicked\",\n type: \"structured\",\n makePayload: params => ({\n category: \"us-qcp-upsells\",\n action: \"tooltip_helper_clicked_qcp\",\n label: params?.label as string,\n property: window.location.href,\n }),\n },\n {\n name: \"qdsUpsellTooltipHelperClicked\",\n type: \"structured\",\n makePayload: params => ({\n category: \"us-qcp-upsells\",\n action: \"tooltip_helper_clicked_slider\",\n label: params?.label as string,\n property: window.location.href,\n }),\n },\n {\n name: \"qcpQuoteButtonClicked\",\n type: \"structured\",\n makePayload: payload => ({\n category: \"quote-buttons\",\n action: \"button-clicked\",\n label: payload?.label as string,\n property: window.location.href,\n }),\n },\n {\n name: \"layoutToggleClickedExperiment\",\n type: \"structured\",\n makePayload: params => {\n const { layout } = params as ParamsType;\n\n return {\n category: \"uk-25-04-16-gridview_layout\",\n action: \"layout_toggle_clicked\",\n label: layout,\n property: window.location.href,\n };\n },\n },\n {\n name: \"cancelAnytimeBadgeClicked\",\n type: \"structured\",\n makePayload: payload => {\n return {\n category: \"us-26-02-qcp-cancel-anytime-test\",\n action: \"cancel_anytime_badge_clicked\",\n label: (payload?.label as string) || \"cancel_anytime\",\n property: window.location.href,\n };\n },\n },\n];\n", "import { DELIMITER } from \"../../constants\";\nimport type { EventDefinition, ParamsType } from \"../../types\";\nimport { redact } from \"./redaction\";\n\n// Questionnaire events\nexport const questionnaireEventDefinitions: EventDefinition[] = [\n {\n name: \"questionAnswered\",\n type: \"unstructured\",\n makePayload: params => {\n const { section, 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-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: flatAnswer,\n vertical: context.vertical,\n journey_id: context.journeyId,\n },\n };\n },\n contexts: [\"serviceChannelContext\"],\n },\n {\n name: \"primaryDetailSelected\",\n type: \"unstructured\",\n makePayload: params => {\n const {\n context,\n answer,\n vertical,\n searchId,\n selectedListPosition,\n selectionMethod,\n } = params as ParamsType;\n const { site } = context;\n const isUSPage = site === \"simplybusiness_us\";\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 const data: Record<string, unknown> = {\n site,\n vertical: verticalName,\n primary_detail: answer,\n selected_type: \"trade_selector\",\n location: window?.location?.pathname ?? \"\",\n };\n\n // Always include search_id if present\n if (searchId) {\n data.search_id = searchId;\n }\n // Always include selection_method if present\n if (selectionMethod) {\n data.selection_method = selectionMethod;\n }\n\n // US only fields\n if (isUSPage) {\n data.selected_list_position =\n selectedListPosition !== undefined\n ? (selectedListPosition + 1).toString()\n : null;\n data.selected_location = \"trade_selector_vertical\";\n data.business_unit = site;\n }\n\n // Optional pre-filled source\n const preFilledSource =\n (params as ParamsType).preFilledSource ??\n (typeof sessionStorage !== \"undefined\"\n ? sessionStorage.getItem(\"preFilledSource\")\n : null);\n if (preFilledSource) {\n data.pre_filled_source = preFilledSource;\n }\n\n return {\n schema:\n \"iglu:com.simplybusiness/primary_detail_selected/jsonschema/1-5-0\",\n data,\n };\n },\n contexts: [\"distributionChannelContext\", \"serviceChannelContext\"],\n },\n {\n name: \"helpTextOpened\",\n type: \"unstructured\",\n makePayload: params => {\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 primary_text: primaryText,\n help_text: helpText,\n label,\n page_name: \"quick_to_quote\",\n },\n };\n },\n },\n {\n name: \"assumptionsButtonClicked\",\n type: \"structured\",\n makePayload: params => {\n const { source, presentationGroup } = params as ParamsType;\n\n return {\n action: source,\n category: presentationGroup,\n };\n },\n },\n {\n name: \"navButtonClicked\",\n type: \"structured\",\n makePayload: params => {\n const { label, category } = params as ParamsType;\n\n return {\n label,\n action: \"link_click\",\n category,\n };\n },\n },\n {\n name: \"manualAddressClicked\",\n type: \"structured\",\n makePayload: params => {\n const { category } = params as ParamsType;\n\n return {\n action: \"link_click\",\n category,\n label: \"Enter address manually\",\n };\n },\n },\n {\n name: \"assumptionLinkClicked\",\n type: \"structured\",\n makePayload: params => {\n const { label, category, property } = params as ParamsType;\n\n return {\n action: \"assumption_link_click\",\n category,\n label,\n property,\n };\n },\n },\n {\n name: \"addressLookupFocused\",\n type: \"structured\",\n makePayload: params => {\n const { label, category } = params as ParamsType;\n\n return {\n action: \"address_lookup_focused\",\n category,\n label,\n };\n },\n },\n {\n name: \"addressLookupTypedIn\",\n type: \"structured\",\n makePayload: params => {\n const { label, category } = params as ParamsType;\n\n return {\n action: \"address_lookup_typed_in\",\n category,\n label,\n };\n },\n },\n {\n name: \"addressOptionsDisplayed\",\n type: \"structured\",\n makePayload: params => {\n const { label, category } = params as ParamsType;\n\n return {\n action: \"address_options_displayed\",\n category,\n label,\n };\n },\n },\n {\n name: \"tradeChanged\",\n type: \"structured\",\n makePayload: params => {\n const { label, property } = params as ParamsType;\n\n return {\n action: \"change_your_selected_profession_button_clicked\",\n category: \"change_your_selected_profession_button\",\n label: `Question: ${label}`,\n property, // Answer before change\n };\n },\n },\n {\n name: \"questionValidationFailed\",\n type: \"structured\",\n makePayload: params => {\n const { question, errorMessage } = params as ParamsType;\n\n return {\n category: \"questionnaire\",\n action: `${question} validation failed`,\n label: errorMessage,\n };\n },\n },\n {\n name: \"stateQuestionAnswered\",\n type: \"unstructured\",\n makePayload: params => {\n const { context, answer, selectedCoverages } = params as ParamsType & {\n selectedCoverages?: string[];\n selectedType?: string;\n };\n\n const data: Record<string, string> = {\n vertical: context.vertical,\n selected_type: context.journeyName ?? \"usa\",\n location: window?.location?.pathname ?? \"\",\n url: window?.location?.href ?? \"\",\n state: answer,\n selection_method: \"dropdown\",\n };\n\n if (selectedCoverages?.length) {\n data.products = selectedCoverages.join(\",\");\n }\n\n return {\n schema:\n \"iglu:com.simplybusiness/state_question_answered/jsonschema/1-0-0\",\n data,\n };\n },\n },\n {\n name: \"tradeSelectorClicked\",\n type: \"structured\",\n makePayload: () => {\n return {\n category: \"marketing\",\n action: \"trade_selector_clicked\",\n label: \"trade selector clicked\",\n property: window?.location?.href ?? \"\",\n };\n },\n },\n {\n name: \"usStateClicked\",\n type: \"structured\",\n makePayload: () => {\n return {\n category: \"marketing\",\n action: \"us_state_clicked\",\n label: \"US state clicked\",\n property: window?.location?.href ?? \"\",\n };\n },\n },\n {\n name: \"usStateErrorMessageDisplayed\",\n type: \"structured\",\n makePayload: params => {\n const { stateValue } = params as ParamsType;\n\n return {\n category: \"marketing\",\n action: \"us_state_error_message_displayed\",\n label: \"US state error message displayed\",\n property: stateValue ?? \"\",\n };\n },\n },\n {\n name: \"pagesetSectionChanged\",\n type: \"unstructured\",\n makePayload: params => {\n const {\n context,\n pageIndex,\n pageName,\n sectionName,\n sectionIndex,\n sectionComplete,\n } = params as ParamsType;\n\n return {\n schema:\n \"iglu:com.simplybusiness/pageset_section_changed/jsonschema/1-0-0\",\n data: {\n site: context.site,\n vertical: context.vertical,\n page_index: pageIndex,\n page_name: pageName,\n section_name: sectionName,\n section_index: sectionIndex,\n section_complete: sectionComplete,\n },\n };\n },\n contexts: [\"distributionChannelContext\", \"serviceChannelContext\"],\n },\n {\n name: \"aiTradeSelectorFindMyBusiness\",\n type: \"structured\",\n makePayload: params => {\n const { searchQuery } = params as ParamsType;\n\n return {\n category: \"ai_trade_selector_find_my_business_btn\",\n action: \"click\",\n label: searchQuery ?? \"\",\n property: window?.location?.href ?? \"\",\n };\n },\n },\n];\n", "import type { EventDefinition, ParamsType } from \"../types\";\n\ntype CheckboxFormQuestionAnsweredParams = ParamsType & {\n pageIndex: number;\n pageName: string;\n sectionName: string;\n question: string;\n answer: string[];\n};\n\n// Coverage selection events (recommendations, showcase, etc.)\nexport const coverageSelectionEventDefinitions: EventDefinition[] = [\n {\n name: \"checkboxFormQuestionAnswered\",\n type: \"unstructured\",\n makePayload: params => {\n const { context, pageIndex, pageName, sectionName, question, answer } =\n params as CheckboxFormQuestionAnsweredParams;\n\n return {\n schema:\n \"iglu:com.simplybusiness/checkbox_form_question_answered/jsonschema/1-0-1\",\n data: {\n site: context.site,\n vertical: context.vertical ?? \"\",\n journey_id: context.journeyId,\n page_index: pageIndex,\n page_name: pageName,\n section_name: sectionName,\n question,\n answer,\n },\n };\n },\n },\n {\n name: \"learnMoreModalOpened\",\n type: \"structured\",\n makePayload: params => {\n const { product } = params as ParamsType & { product: string };\n\n return {\n category: \"coverage_selection\",\n action: \"learn_more_modal_opened\",\n label: product,\n property: window.location.href,\n };\n },\n },\n];\n", "import type { EventDefinition, ParamsType } from \"../types\";\n\n// Referral page events\nexport const referralEventDefinitions: EventDefinition[] = [\n {\n name: \"nextCoverageClicked\",\n type: \"structured\",\n makePayload: params => {\n const { url } = params as ParamsType;\n const eventName = \"post_referral_workers_compensation_continuation_link\";\n\n return {\n category: eventName,\n action: \"link_click\",\n label: eventName,\n property: url,\n };\n },\n },\n];\n", "import { baseEventDefinitions } from \"./base\";\nimport { interventionEventDefinitions } from \"./intervention\";\nimport { personalisedCoverEventDefinitions } from \"./personalised_cover\";\nimport { qcpEventDefinitions } from \"./qcp\";\nimport { questionnaireEventDefinitions } from \"./questionnaire/questionnaire\";\nimport { coverageSelectionEventDefinitions } from \"./coverage-selection\";\nimport { referralEventDefinitions } from \"./referral\";\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 ...coverageSelectionEventDefinitions,\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\nexport const coverageSelectionPageEvents = [\n ...baseEventDefinitions,\n ...coverageSelectionEventDefinitions,\n];\n\n// Create a new export for each kind of page below\n// containing just the subset needed for that page\n", "import type { TrackingProps, PageDataProps } from \"./types\";\n\n// Get Snowplow config from page data props\nexport const getSnowplowConfig = (\n pageData: PageDataProps,\n): TrackingProps | undefined =>\n pageData.scripts?.find(({ metadata }) => metadata.name === \"snowplow\")\n ?.props as TrackingProps;\n", "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", "/* eslint-disable @typescript-eslint/no-unused-vars */\nimport {\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\nimport { getContexts } from \"./contexts\";\nimport { eventDefinitions } from \"./event-definitions\";\nimport { Snowplow } from \"./Snowplow\";\nimport type { EventDefinition, TrackingProps } from \"./types\";\n\nexport interface SnowplowContextInterface {\n config: TrackingProps;\n snowplow?: Snowplow;\n}\n\nconst SnowplowContext = createContext<SnowplowContextInterface | null>(null);\n\ntype ProviderProps = {\n scripts: TrackingProps;\n children: ReactNode;\n};\n\nexport const SnowplowProvider = ({ scripts, children }: ProviderProps) => {\n const [config, _setConfig] = useState<TrackingProps>(scripts);\n const [snowplowInstance] = useState<Snowplow>(() => {\n const instance = Snowplow.getInstance(config);\n const contexts = getContexts(config);\n instance.setContexts(contexts).addEventHandlers(eventDefinitions);\n return instance;\n });\n\n // Send page view event after mount\n useEffect(() => {\n if (snowplowInstance && config?.trackPageView) {\n void snowplowInstance.trackView();\n }\n }, [config, snowplowInstance]);\n\n const value: SnowplowContextInterface = useMemo(\n () => ({\n config,\n snowplow: snowplowInstance,\n }),\n [config, snowplowInstance],\n );\n\n return (\n <SnowplowContext.Provider value={value}>\n {children}\n </SnowplowContext.Provider>\n );\n};\n\nexport function useSnowplowContext() {\n const context = useContext(SnowplowContext);\n\n if (!context) {\n throw new Error(\n \"useSnowplowContext must be used inside a `SnowplowProvider`\",\n );\n }\n return context;\n}\n"],
|
|
5
|
+
"mappings": "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,QAAQ;AAAA,IACV;AAAA,EACF;AACF;;;AC/CO,IAAM,YAAY;;;ACEzB,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;AA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",
|
|
6
6
|
"names": ["eventDefinitions"]
|
|
7
7
|
}
|
package/dist/cjs/meta.json
CHANGED
|
@@ -205,7 +205,7 @@
|
|
|
205
205
|
"format": "esm"
|
|
206
206
|
},
|
|
207
207
|
"src/snowplow/SnowplowContext.tsx": {
|
|
208
|
-
"bytes":
|
|
208
|
+
"bytes": 1696,
|
|
209
209
|
"imports": [
|
|
210
210
|
{
|
|
211
211
|
"path": "react",
|
|
@@ -360,7 +360,7 @@
|
|
|
360
360
|
"imports": [],
|
|
361
361
|
"exports": [],
|
|
362
362
|
"inputs": {},
|
|
363
|
-
"bytes":
|
|
363
|
+
"bytes": 77843
|
|
364
364
|
},
|
|
365
365
|
"dist/cjs/index.js": {
|
|
366
366
|
"imports": [
|
|
@@ -448,10 +448,10 @@
|
|
|
448
448
|
"bytesInOutput": 4458
|
|
449
449
|
},
|
|
450
450
|
"src/snowplow/SnowplowContext.tsx": {
|
|
451
|
-
"bytesInOutput":
|
|
451
|
+
"bytesInOutput": 1186
|
|
452
452
|
}
|
|
453
453
|
},
|
|
454
|
-
"bytes":
|
|
454
|
+
"bytes": 42179
|
|
455
455
|
},
|
|
456
456
|
"dist/cjs/utils/index.js.map": {
|
|
457
457
|
"imports": [],
|
|
@@ -517,7 +517,7 @@
|
|
|
517
517
|
"imports": [],
|
|
518
518
|
"exports": [],
|
|
519
519
|
"inputs": {},
|
|
520
|
-
"bytes":
|
|
520
|
+
"bytes": 72946
|
|
521
521
|
},
|
|
522
522
|
"dist/cjs/utils/testUtils.js": {
|
|
523
523
|
"imports": [
|
|
@@ -562,7 +562,7 @@
|
|
|
562
562
|
"bytesInOutput": 1452
|
|
563
563
|
},
|
|
564
564
|
"src/snowplow/SnowplowContext.tsx": {
|
|
565
|
-
"bytesInOutput":
|
|
565
|
+
"bytesInOutput": 951
|
|
566
566
|
},
|
|
567
567
|
"src/utils/text.ts": {
|
|
568
568
|
"bytesInOutput": 719
|
|
@@ -610,7 +610,7 @@
|
|
|
610
610
|
"bytesInOutput": 119
|
|
611
611
|
}
|
|
612
612
|
},
|
|
613
|
-
"bytes":
|
|
613
|
+
"bytes": 39639
|
|
614
614
|
},
|
|
615
615
|
"dist/cjs/snowplow/Snowplow.js.map": {
|
|
616
616
|
"imports": [],
|
|
@@ -704,7 +704,7 @@
|
|
|
704
704
|
"imports": [],
|
|
705
705
|
"exports": [],
|
|
706
706
|
"inputs": {},
|
|
707
|
-
"bytes":
|
|
707
|
+
"bytes": 69503
|
|
708
708
|
},
|
|
709
709
|
"dist/cjs/snowplow/index.js": {
|
|
710
710
|
"imports": [
|
|
@@ -781,10 +781,10 @@
|
|
|
781
781
|
"bytesInOutput": 4458
|
|
782
782
|
},
|
|
783
783
|
"src/snowplow/SnowplowContext.tsx": {
|
|
784
|
-
"bytesInOutput":
|
|
784
|
+
"bytesInOutput": 1186
|
|
785
785
|
}
|
|
786
786
|
},
|
|
787
|
-
"bytes":
|
|
787
|
+
"bytes": 38284
|
|
788
788
|
},
|
|
789
789
|
"dist/cjs/snowplow/types.js.map": {
|
|
790
790
|
"imports": [],
|
|
@@ -807,7 +807,7 @@
|
|
|
807
807
|
"imports": [],
|
|
808
808
|
"exports": [],
|
|
809
809
|
"inputs": {},
|
|
810
|
-
"bytes":
|
|
810
|
+
"bytes": 68745
|
|
811
811
|
},
|
|
812
812
|
"dist/cjs/snowplow/SnowplowContext.js": {
|
|
813
813
|
"imports": [
|
|
@@ -836,7 +836,7 @@
|
|
|
836
836
|
"entryPoint": "src/snowplow/SnowplowContext.tsx",
|
|
837
837
|
"inputs": {
|
|
838
838
|
"src/snowplow/SnowplowContext.tsx": {
|
|
839
|
-
"bytesInOutput":
|
|
839
|
+
"bytesInOutput": 1407
|
|
840
840
|
},
|
|
841
841
|
"src/utils/text.ts": {
|
|
842
842
|
"bytesInOutput": 719
|
|
@@ -881,7 +881,7 @@
|
|
|
881
881
|
"bytesInOutput": 4458
|
|
882
882
|
}
|
|
883
883
|
},
|
|
884
|
-
"bytes":
|
|
884
|
+
"bytes": 37597
|
|
885
885
|
},
|
|
886
886
|
"dist/cjs/snowplow/event-definitions/base.js.map": {
|
|
887
887
|
"imports": [],
|
|
@@ -1364,18 +1364,17 @@ var import_jsx_runtime = require("react/jsx-runtime");
|
|
|
1364
1364
|
var SnowplowContext = (0, import_react.createContext)(null);
|
|
1365
1365
|
var SnowplowProvider = ({ scripts, children }) => {
|
|
1366
1366
|
const [config, _setConfig] = (0, import_react.useState)(scripts);
|
|
1367
|
-
const [snowplowInstance] = (0, import_react.useState)(
|
|
1368
|
-
|
|
1369
|
-
|
|
1367
|
+
const [snowplowInstance] = (0, import_react.useState)(() => {
|
|
1368
|
+
const instance = Snowplow.getInstance(config);
|
|
1369
|
+
const contexts = getContexts(config);
|
|
1370
|
+
instance.setContexts(contexts).addEventHandlers(eventDefinitions);
|
|
1371
|
+
return instance;
|
|
1372
|
+
});
|
|
1370
1373
|
(0, import_react.useEffect)(() => {
|
|
1371
|
-
if (snowplowInstance &&
|
|
1372
|
-
|
|
1373
|
-
snowplowInstance.setContexts(contexts).addEventHandlers(eventDefinitions);
|
|
1374
|
-
if (config.trackPageView) {
|
|
1375
|
-
void snowplowInstance.trackView();
|
|
1376
|
-
}
|
|
1374
|
+
if (snowplowInstance && config?.trackPageView) {
|
|
1375
|
+
void snowplowInstance.trackView();
|
|
1377
1376
|
}
|
|
1378
|
-
}, [config, snowplowInstance
|
|
1377
|
+
}, [config, snowplowInstance]);
|
|
1379
1378
|
const value = (0, import_react.useMemo)(
|
|
1380
1379
|
() => ({
|
|
1381
1380
|
config,
|