@simplybusiness/services 2.0.2 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 9956a8b: Bumping to use the latest schema (1-0-4) for form_question_answered and start sending journey_id in the event
8
+
3
9
  ## 2.0.2
4
10
 
5
11
  ### Patch Changes
package/dist/cjs/index.js CHANGED
@@ -506,13 +506,15 @@ var personalisedCoverEventDefinitions = [
506
506
  const { question, answer } = redact(params);
507
507
  const flatAnswer = Array.isArray(answer) ? answer.join(DELIMITER) : answer;
508
508
  return {
509
- schema: "iglu:com.simplybusiness/form_question_answered/jsonschema/1-0-1",
509
+ schema: "iglu:com.simplybusiness/form_question_answered/jsonschema/1-0-4",
510
510
  data: {
511
511
  site: context.site,
512
512
  page_name: "personalised_cover",
513
513
  section_name: "Personalised Cover Questions",
514
514
  question,
515
- answer: flatAnswer
515
+ answer: flatAnswer,
516
+ vertical: context.vertical,
517
+ journey_id: context.journeyId
516
518
  }
517
519
  };
518
520
  }
@@ -966,7 +968,8 @@ var questionnaireEventDefinitions = [
966
968
  section_name: section,
967
969
  question,
968
970
  answer: flatAnswer,
969
- vertical: context.vertical
971
+ vertical: context.vertical,
972
+ journey_id: context.journeyId
970
973
  }
971
974
  };
972
975
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../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 \"./src\";\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 ? jest.fn()\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-1\",\n data: {\n site: context.site,\n page_name: \"personalised_cover\",\n section_name: \"Personalised Cover Questions\",\n question,\n answer: flatAnswer,\n },\n };\n },\n },\n {\n name: \"limitLinkClicked\",\n type: \"structured\",\n makePayload: params => {\n const { label } = params as ParamsType;\n\n return {\n category: \"personalised_cover\",\n action: \"limit_link_clicked\",\n label,\n property: \"link_clicked\",\n };\n },\n },\n {\n name: \"limitChanged\",\n type: \"structured\",\n makePayload: params => {\n const { label, limit } = params as ParamsType;\n\n return {\n category: \"personalised_cover\",\n action: \"limit_changed\",\n label,\n property: limit,\n };\n },\n },\n {\n name: \"coverPresented\",\n type: \"structured\",\n makePayload: params => {\n const { property } = params as ParamsType;\n\n return {\n category: \"personalised_cover\",\n action: \"cover_presented\",\n label: \"cover_name\",\n property,\n };\n },\n },\n {\n name: \"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: \"selectCoverOptionsClicked\",\n type: \"structured\",\n makePayload: payload => {\n return {\n category: \"uk-25-09-qcp-covers-demand-test\",\n action: \"cover_options_clicked\",\n label: payload?.label as string,\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 },\n };\n },\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 return {\n schema:\n \"iglu:com.simplybusiness/primary_detail_selected/jsonschema/1-4-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: \"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", "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", "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 { 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 });\n\n setCookiePath(\"/\");\n if (uid) {\n setUserId(uid);\n }\n // Create a singleton instance\n Snowplow.instance = this;\n }\n\n setContexts(contexts: Record<string, SerialisedEvent>) {\n this.contexts = updateIdentityContext(contexts, this.uid);\n this.pvContext = Object.values(this.contexts);\n this.structContext = makeContexts(\n [\"distributionChannelContext\", \"serviceChannelContext\"],\n this.contexts,\n );\n return this;\n }\n\n // Send a page view event\n trackView(event?: PageViewEvent) {\n if (this.trackPageView) {\n trackPageView({ ...event, context: this.pvContext }, [\n this.avalancheTrackerName,\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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;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;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,8BAA8B;AAAA,EAClC;AAAA,EACA;AACF;AAEA,IAAM,wBAAwB;AAEvB,IAAM,SAAS,CAAC,WAAuB;AAC5C,MAAI,EAAE,UAAU,OAAO,IAAI;AAE3B,QAAM,YAAY,IAAI,IAAI,UAAU;AACpC,QAAM,2BAA2B,IAAI,IAAI,2BAA2B;AAEpE,MAAI,UAAU,IAAI,QAAQ,GAAG;AAC3B,aAAS;AACT,eAAW,UAAU,QAAQ,uBAAuB,EAAE;AAAA,EACxD,WAAW,yBAAyB,IAAI,QAAQ,GAAG;AACjD,eAAW,UAAU,QAAQ,uBAAuB,EAAE;AAAA,EACxD;AACA,SAAO,EAAE,UAAU,OAAO;AAC5B;;;ACvHO,IAAM,oCAAuD;AAAA,EAClE;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,QAAM;AAAA,MACjB,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,QAAM;AAAA,MACjB,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,OAAO,SAAS,IAAI;AAE5B,aAAO;AAAA,QACL,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,UAAU,GAAG,UAAU,KAAK,CAAC,IAAI,UAAU,QAAQ,CAAC;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,QAAQ,IAAI;AACpB,YAAM,EAAE,UAAU,OAAO,IAAI,OAAO,MAAoB;AAExD,YAAM,aAAa,MAAM,QAAQ,MAAM,IACnC,OAAO,KAAK,SAAS,IACrB;AAEJ,aAAO;AAAA,QACL,QACE;AAAA,QACF,MAAM;AAAA,UACJ,MAAM,QAAQ;AAAA,UACd,WAAW;AAAA,UACX,cAAc;AAAA,UACd;AAAA,UACA,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,MAAM,IAAI;AAElB,aAAO;AAAA,QACL,UAAU;AAAA,QACV,QAAQ;AAAA,QACR;AAAA,QACA,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,OAAO,MAAM,IAAI;AAEzB,aAAO;AAAA,QACL,UAAU;AAAA,QACV,QAAQ;AAAA,QACR;AAAA,QACA,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,SAAS,IAAI;AAErB,aAAO;AAAA,QACL,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,OAAO;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,SAAS,IAAI;AAErB,aAAO;AAAA,QACL,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,OAAO;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,SAAS,IAAI;AAErB,aAAO;AAAA,QACL,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,OAAO;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,OAAO,SAAS,IAAI;AAE5B,aAAO;AAAA,QACL,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AACF;;;ACrKO,IAAM,sBAAyC;AAAA,EACpD;AAAA;AAAA,IAEE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,OAAO;AAAA,MAClB,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA;AAAA;AAAA,IAEE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,OAAO;AAAA,MAClB,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA;AAAA;AAAA,IAEE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,OAAO;AAAA,MAClB,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA;AAAA;AAAA,IAEE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,OAAO;AAAA,MAClB,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,UAAU,OAAO,SAAS;AAAA,IAC5B;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,OAAO,WAAW,IAAI;AAC9B,YAAM,mBAAmB,MAAM,QAAQ,MAAM,GAAG,EAAE,YAAY;AAE9D,aAAO;AAAA,QACL,UAAU,gBAAgB,UAAU,IAAI,gBAAgB;AAAA,QACxD,QAAQ;AAAA,QACR;AAAA,QACA,UAAU,OAAO,SAAS;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA;AAAA,IAEE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,MAAM,IAAI;AAElB,aAAO;AAAA,QACL,UAAU;AAAA,QACV,QAAQ;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA;AAAA,IAEE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM;AAAA,QACJ;AAAA,QACA,UAAU;AAAA,QACV;AAAA,MACF,IAAI;AACJ,YAAM,eAAe,UAAU,OAAO;AAEtC,aAAO;AAAA,QACL;AAAA,QACA,QAAQ,GAAG,YAAY,IAAI,UAAU,KAAK,CAAC;AAAA,QAC3C,OAAO;AAAA,QACP,UAAU,OAAO,SAAS;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA;AAAA,IAEE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,OAAO,IAAI,YAAY,IAAI,UAAU,GAAG,IAAI;AAEpD,UAAI,SAAS;AAIb,UAAI,cAAc,KAAK;AACrB,iBAAS;AAAA,MACX;AACA,UAAI,YAAY,KAAK;AACnB,iBAAS;AAAA,MACX;AAEA,aAAO;AAAA,QACL,QACE;AAAA,QACF,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,UACA,YAAY;AAAA,UACZ,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU,CAAC,4BAA4B;AAAA,EACzC;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,UAAU,MAAM,IAAI;AAE5B,aAAO;AAAA,QACL;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,QACA,UAAU,OAAO,SAAS;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,OAAO;AAAA,MAClB,UAAU;AAAA,MACV,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,UAAU,OAAO,SAAS;AAAA,IAC5B;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,UAAU,MAAM,IAAI;AAE5B,aAAO;AAAA,QACL;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,QACA,UAAU,OAAO,SAAS;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,OAAO;AAAA,MAClB,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,UAAU,OAAO,SAAS;AAAA,IAC5B;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,OAAO;AAAA,MAClB,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,UAAU,OAAO,SAAS;AAAA,IAC5B;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,OAAO;AAAA,MAClB,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,UAAU,OAAO,SAAS;AAAA,IAC5B;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,OAAO;AAAA,MAClB,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,UAAU,OAAO,SAAS;AAAA,IAC5B;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,YAAY,OAAO,KAAK,IAAI;AAEpC,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,UAAU,gBAAgB,UAAU;AAAA,QACpC,OAAO,GAAG,OAAO,SAAS,MAAM;AAAA,QAChC,UAAU,OAAO,SAAS;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,WAAW,SAAS,IAAI;AAEhC,aAAO;AAAA,QACL,QACE;AAAA,QACF,MAAM;AAAA,UACJ,YAAY;AAAA,UACZ;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU,CAAC,uBAAuB;AAAA,EACpC;AAAA;AAAA,EAEA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,OAAO;AAAA,MAClB,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,UAAU,OAAO,SAAS;AAAA,IAC5B;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,OAAO;AAAA,MAClB,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,UAAU,OAAO,SAAS;AAAA,IAC5B;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,OAAO;AAAA,MAClB,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,UAAU,OAAO,SAAS;AAAA,IAC5B;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,OAAO;AAAA,MAClB,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,UAAU,OAAO,SAAS;AAAA,IAC5B;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,WAAW,eAAe,IAAI;AAEtC,aAAO;AAAA,QACL,QACE;AAAA,QACF,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,aAAW;AAAA,MACtB,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO,QAAQ;AAAA,MACf,UAAU,OAAO,SAAS;AAAA,IAC5B;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,aAAW;AAAA,MACtB,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO,QAAQ;AAAA,MACf,UAAU,OAAO,SAAS;AAAA,IAC5B;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,aAAW;AAAA,MACtB,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO,QAAQ;AAAA,MACf,UAAU,OAAO,SAAS;AAAA,IAC5B;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,aAAW;AAAA,MACtB,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO,QAAQ;AAAA,MACf,UAAU,OAAO,SAAS;AAAA,IAC5B;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,cAAY;AAAA,MACvB,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO,SAAS;AAAA,MAChB,UAAU,OAAO,SAAS;AAAA,IAC5B;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,OAAO,IAAI;AAEnB,aAAO;AAAA,QACL,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,UAAU,OAAO,SAAS;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,aAAW;AACtB,aAAO;AAAA,QACL,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,OAAO,SAAS;AAAA,QAChB,UAAU,OAAO,SAAS;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AACF;;;AC3WO,IAAM,gCAAmD;AAAA,EAC9D;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,SAAS,QAAQ,IAAI;AAC7B,YAAM,EAAE,UAAU,OAAO,IAAI,OAAO,MAAoB;AAExD,YAAM,aAAa,MAAM,QAAQ,MAAM,IACnC,OAAO,KAAK,SAAS,IACrB;AAEJ,aAAO;AAAA,QACL,QACE;AAAA,QACF,MAAM;AAAA,UACJ,MAAM,QAAQ;AAAA,UACd,YAAY;AAAA,UACZ,WAAW;AAAA,UACX,gBAAgB;AAAA,UAChB,cAAc;AAAA,UACd;AAAA,UACA,QAAQ;AAAA,UACR,UAAU,QAAQ;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,IAAI;AACJ,YAAM,EAAE,KAAK,IAAI;AACjB,YAAM,WAAW,SAAS;AAC1B,UAAI,eAAe,YAAY,QAAQ;AAEvC,UAAI,aAAa,YAAY,EAAE,QAAQ,UAAU,IAAI,IAAI;AACvD,uBACE,WAAW,gBAAgB,aAAa;AAAA,MAC5C;AAEA,YAAM,OAAgC;AAAA,QACpC;AAAA,QACA,UAAU;AAAA,QACV,gBAAgB;AAAA,QAChB,eAAe;AAAA,QACf,UAAU,QAAQ,UAAU,YAAY;AAAA,MAC1C;AAGA,UAAI,UAAU;AACZ,aAAK,YAAY;AAAA,MACnB;AAEA,UAAI,iBAAiB;AACnB,aAAK,mBAAmB;AAAA,MAC1B;AAGA,UAAI,UAAU;AACZ,aAAK,yBACH,yBAAyB,UACpB,uBAAuB,GAAG,SAAS,IACpC;AACN,aAAK,oBAAoB;AACzB,aAAK,gBAAgB;AAAA,MACvB;AAEA,aAAO;AAAA,QACL,QACE;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU,CAAC,8BAA8B,uBAAuB;AAAA,EAClE;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,aAAa,OAAO,SAAS,SAAS,IAAI;AAElD,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,MAAM;AAAA,UACJ,UAAU,QAAQ;AAAA,UAClB,MAAM,QAAQ;AAAA,UACd,cAAc;AAAA,UACd,WAAW;AAAA,UACX;AAAA,UACA,WAAW;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,QAAQ,kBAAkB,IAAI;AAEtC,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,OAAO,SAAS,IAAI;AAE5B,aAAO;AAAA,QACL;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,SAAS,IAAI;AAErB,aAAO;AAAA,QACL,QAAQ;AAAA,QACR;AAAA,QACA,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,OAAO,UAAU,SAAS,IAAI;AAEtC,aAAO;AAAA,QACL,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,OAAO,SAAS,IAAI;AAE5B,aAAO;AAAA,QACL,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,OAAO,SAAS,IAAI;AAE5B,aAAO;AAAA,QACL,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,OAAO,SAAS,IAAI;AAE5B,aAAO;AAAA,QACL,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,OAAO,SAAS,IAAI;AAE5B,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,OAAO,aAAa,KAAK;AAAA,QACzB;AAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,SAAS,QAAQ,kBAAkB,IAAI;AAK/C,YAAM,OAA+B;AAAA,QACnC,UAAU,QAAQ;AAAA,QAClB,eAAe,QAAQ,eAAe;AAAA,QACtC,UAAU,QAAQ,UAAU,YAAY;AAAA,QACxC,KAAK,QAAQ,UAAU,QAAQ;AAAA,QAC/B,OAAO;AAAA,QACP,kBAAkB;AAAA,MACpB;AAEA,UAAI,mBAAmB,QAAQ;AAC7B,aAAK,WAAW,kBAAkB,KAAK,GAAG;AAAA,MAC5C;AAEA,aAAO;AAAA,QACL,QACE;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACvOO,IAAM,oCAAuD;AAAA,EAClE;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,SAAS,WAAW,UAAU,aAAa,UAAU,OAAO,IAClE;AAEF,aAAO;AAAA,QACL,QACE;AAAA,QACF,MAAM;AAAA,UACJ,MAAM,QAAQ;AAAA,UACd,UAAU,QAAQ,YAAY;AAAA,UAC9B,YAAY,QAAQ;AAAA,UACpB,YAAY;AAAA,UACZ,WAAW;AAAA,UACX,cAAc;AAAA,UACd;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AChCO,IAAM,2BAA8C;AAAA,EACzD;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM,EAAE,IAAI,IAAI;AAChB,YAAM,YAAY;AAElB,aAAO;AAAA,QACL,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AACF;;;ACVO,IAAM,mBAAmB;AAAA,EAC9B,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;AAEO,IAAM,gBAAgB,CAAC,GAAG,sBAAsB,GAAG,mBAAmB;AAEtE,IAAM,qBAAqB;AAAA,EAChC,GAAG;AAAA,EACH,GAAG;AACL;AAEO,IAAM,8BAA8B;AAAA,EACzC,GAAG;AAAA,EACH,GAAG;AACL;AAEO,IAAM,yBAAyB,CAAC,GAAG,4BAA4B;AAI/D,IAAM,0BAA0B,CAAC,GAAG,6BAA6B;AAEjE,IAAM,8BAA8B;AAAA,EACzC,GAAG;AAAA,EACH,GAAG;AACL;;;ACrCO,IAAM,oBAAoB,CAC/B,aAEA,SAAS,SAAS,KAAK,CAAC,EAAE,SAAS,MAAM,SAAS,SAAS,UAAU,GACjE;;;ACFN,6BAOO;AAcA,IAAM,WAAN,MAAM,UAAS;AAAA,EAwBpB,YAAY,OAAuB;AAvBnC,gCAAuB;AAEvB,sCAA6B;AAE7B,kCAAyB;AAEzB,eAAe;AAEf,yBAAyB;AAEzB,oBAA4C,CAAC;AAE7C,qBAA+B,CAAC;AAEhC,yBAAmC,CAAC;AAEpC,sBAAsC,CAAC;AAEvC,yBACE,CAAC;AAKD,QAAI,CAAC,MAAO;AAEZ,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,eAAe;AAAA,IACjB,IAAI;AACJ,SAAK,MAAM;AACX,SAAK,gBAAgB;AACrB,SAAK,aAAa,OAAO,iBAAiB,QAAQ,CAAC;AAGnD,UAAM,uBAAuB;AAC7B,UAAM,cAAoC;AAAA,MACxC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,2CAAW,KAAK,sBAAsB,oBAAoB,WAAW;AAErE;AAAA,MACE,KAAK;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAGA,2CAAW,KAAK,wBAAwB,oBAAoB;AAAA,MAC1D,GAAG;AAAA,MACH,aAAa,gBAAgB,SAAS,WAAW;AAAA,IACnD,CAAC;AAED,8CAAc,GAAG;AACjB,QAAI,KAAK;AACP,4CAAU,GAAG;AAAA,IACf;AAEA,cAAS,WAAW;AAAA,EACtB;AAAA,EAEA,YAAY,UAA2C;AACrD,SAAK,WAAW,sBAAsB,UAAU,KAAK,GAAG;AACxD,SAAK,YAAY,OAAO,OAAO,KAAK,QAAQ;AAC5C,SAAK,gBAAgB;AAAA,MACnB,CAAC,8BAA8B,uBAAuB;AAAA,MACtD,KAAK;AAAA,IACP;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,UAAU,OAAuB;AAC/B,QAAI,KAAK,eAAe;AACtB,gDAAc,EAAE,GAAG,OAAO,SAAS,KAAK,UAAU,GAAG;AAAA,QACnD,KAAK;AAAA,MACP,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,WAAW,OAAwB;AACjC,iDAAiB,EAAE,GAAG,OAAO,SAAS,KAAK,cAAc,GAAG;AAAA,MAC1D,KAAK;AAAA,IACP,CAAC;AACD,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,mBAAmB,OAAwB,UAAqB;AAC9D,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,IACT;AAEA,QAAI,YAAY,MAAM,QAAQ,QAAQ,KAAK,SAAS,SAAS,GAAG;AAE9D,YAAM,UAAU,aAAa,UAAU,KAAK,QAAQ;AACpD,2DAAyB,EAAE,OAAO,QAAQ,GAAG,CAAC,KAAK,oBAAoB,CAAC;AAAA,IAC1E,OAAO;AACL,2DAAyB,EAAE,MAAM,GAAG,CAAC,KAAK,oBAAoB,CAAC;AAAA,IACjE;AACA,WAAO;AAAA,EACT;AAAA,EAEA,iBAAiBA,mBAAqC;AAEpD,UAAM,UAAU,KAAK;AAErB,IAAAA,kBAAiB,QAAQ,CAAC,EAAE,MAAM,MAAM,aAAa,SAAS,MAAM;AAElE,UAAI,SAAS,cAAc;AACzB,aAAK,gBAAgB,MAAM,CAAC,WAAqC;AAC/D,eAAK,KAAK;AAAA,YACR,YAAY;AAAA,cACV,GAAG;AAAA,cACH;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH,OAAO;AACL,aAAK,gBAAgB,MAAM,CAAC,WAAqC;AAC/D,gBAAM,UAAU,YAAY;AAAA,YAC1B,GAAG;AAAA,YACH;AAAA,UACF,CAAC;AAED,cAAI,YAAY,MAAM,QAAQ,QAAQ,KAAK,SAAS,SAAS,GAAG;AAC9D,iBAAK,KAAK,mBAAmB,SAAS,QAAQ;AAAA,UAChD,OAAO;AACL,iBAAK,KAAK,mBAAmB,OAAO;AAAA,UACtC;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEQ,gBACN,MACA,SACA;AACA,SAAK,cAAc,IAAI,IAAI;AAC3B,WAAO;AAAA,EACT;AAAA,EAEQ,mBAAmB,MAAc;AACvC,WAAO,KAAK,cAAc,IAAI;AAC9B,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,MAAc,QAAkC;AACtD,UAAM,UAAU,KAAK,cAAc,IAAI;AAEvC,QACE,OAAO,UAAU,eAAe,KAAK,KAAK,eAAe,IAAI,KAC7D,OAAO,YAAY,YACnB;AACA,cAAQ,MAAM;AAAA,IAChB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,YAAY,OAAuB;AACxC,QAAI,CAAC,UAAS,UAAU;AACtB,gBAAS,WAAW,IAAI,UAAS,KAAK;AAAA,IACxC;AACA,WAAO,UAAS;AAAA,EAClB;AACF;;;AC7MA,mBAOO;AA8CH;AAnCJ,IAAM,sBAAkB,4BAA+C,IAAI;AAOpE,IAAM,mBAAmB,CAAC,EAAE,SAAS,SAAS,MAAqB;AACxE,QAAM,CAAC,QAAQ,UAAU,QAAI,uBAAwB,OAAO;AAC5D,QAAM,CAAC,gBAAgB,QAAI;AAAA,IAAmB,MAC5C,SAAS,YAAY,MAAM;AAAA,EAC7B;AAGA,8BAAU,MAAM;AACd,QAAI,oBAAoB,SAAS;AAC/B,YAAM,WAAW,YAAY,MAAM;AAEnC,uBAAiB,YAAY,QAAQ,EAAE,iBAAiB,gBAAgB;AAExE,UAAI,OAAO,eAAe;AACxB,aAAK,iBAAiB,UAAU;AAAA,MAClC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,QAAQ,kBAAkB,OAAO,CAAC;AAEtC,QAAM,YAAkC;AAAA,IACtC,OAAO;AAAA,MACL;AAAA,MACA,UAAU;AAAA,IACZ;AAAA,IACA,CAAC,QAAQ,gBAAgB;AAAA,EAC3B;AAEA,SACE,4CAAC,gBAAgB,UAAhB,EAAyB,OACvB,UACH;AAEJ;AAEO,SAAS,qBAAqB;AACnC,QAAM,cAAU,yBAAW,eAAe;AAE1C,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;",
4
+ "sourcesContent": ["export * from \"./src\";\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 ? jest.fn()\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: \"selectCoverOptionsClicked\",\n type: \"structured\",\n makePayload: payload => {\n return {\n category: \"uk-25-09-qcp-covers-demand-test\",\n action: \"cover_options_clicked\",\n label: payload?.label as string,\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 },\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 return {\n schema:\n \"iglu:com.simplybusiness/primary_detail_selected/jsonschema/1-4-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: \"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", "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", "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 { 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 });\n\n setCookiePath(\"/\");\n if (uid) {\n setUserId(uid);\n }\n // Create a singleton instance\n Snowplow.instance = this;\n }\n\n setContexts(contexts: Record<string, SerialisedEvent>) {\n this.contexts = updateIdentityContext(contexts, this.uid);\n this.pvContext = Object.values(this.contexts);\n this.structContext = makeContexts(\n [\"distributionChannelContext\", \"serviceChannelContext\"],\n this.contexts,\n );\n return this;\n }\n\n // Send a page view event\n trackView(event?: PageViewEvent) {\n if (this.trackPageView) {\n trackPageView({ ...event, context: this.pvContext }, [\n this.avalancheTrackerName,\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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;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;AAAA,EA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",
6
6
  "names": ["eventDefinitions"]
7
7
  }
@@ -80,7 +80,7 @@
80
80
  "format": "esm"
81
81
  },
82
82
  "src/snowplow/event-definitions/personalised_cover.ts": {
83
- "bytes": 4387,
83
+ "bytes": 4466,
84
84
  "imports": [
85
85
  {
86
86
  "path": "src/utils/index.ts",
@@ -112,7 +112,7 @@
112
112
  "format": "esm"
113
113
  },
114
114
  "src/snowplow/event-definitions/questionnaire/questionnaire.ts": {
115
- "bytes": 6112,
115
+ "bytes": 6153,
116
116
  "imports": [
117
117
  {
118
118
  "path": "src/snowplow/constants.ts",
@@ -309,7 +309,7 @@
309
309
  "imports": [],
310
310
  "exports": [],
311
311
  "inputs": {},
312
- "bytes": 72352
312
+ "bytes": 72538
313
313
  },
314
314
  "dist/cjs/index.js": {
315
315
  "imports": [
@@ -368,13 +368,13 @@
368
368
  "bytesInOutput": 3841
369
369
  },
370
370
  "src/snowplow/event-definitions/personalised_cover.ts": {
371
- "bytesInOutput": 3145
371
+ "bytesInOutput": 3224
372
372
  },
373
373
  "src/snowplow/event-definitions/qcp.ts": {
374
374
  "bytesInOutput": 8811
375
375
  },
376
376
  "src/snowplow/event-definitions/questionnaire/questionnaire.ts": {
377
- "bytesInOutput": 5320
377
+ "bytesInOutput": 5361
378
378
  },
379
379
  "src/snowplow/event-definitions/coverage-selection.ts": {
380
380
  "bytesInOutput": 639
@@ -395,7 +395,7 @@
395
395
  "bytesInOutput": 1196
396
396
  }
397
397
  },
398
- "bytes": 38928
398
+ "bytes": 39048
399
399
  }
400
400
  }
401
401
  }
package/dist/esm/index.js CHANGED
@@ -464,13 +464,15 @@ var personalisedCoverEventDefinitions = [
464
464
  const { question, answer } = redact(params);
465
465
  const flatAnswer = Array.isArray(answer) ? answer.join(DELIMITER) : answer;
466
466
  return {
467
- schema: "iglu:com.simplybusiness/form_question_answered/jsonschema/1-0-1",
467
+ schema: "iglu:com.simplybusiness/form_question_answered/jsonschema/1-0-4",
468
468
  data: {
469
469
  site: context.site,
470
470
  page_name: "personalised_cover",
471
471
  section_name: "Personalised Cover Questions",
472
472
  question,
473
- answer: flatAnswer
473
+ answer: flatAnswer,
474
+ vertical: context.vertical,
475
+ journey_id: context.journeyId
474
476
  }
475
477
  };
476
478
  }
@@ -924,7 +926,8 @@ var questionnaireEventDefinitions = [
924
926
  section_name: section,
925
927
  question,
926
928
  answer: flatAnswer,
927
- vertical: context.vertical
929
+ vertical: context.vertical,
930
+ journey_id: context.journeyId
928
931
  }
929
932
  };
930
933
  }