@simplybusiness/services 2.2.3 → 2.2.5
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 +18 -0
- package/dist/cjs/index.js +12 -3
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/meta.json +14 -4
- package/dist/esm/index.js +12 -3
- package/dist/esm/index.js.map +2 -2
- package/dist/esm/meta.json +14 -4
- package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +3 -2
- package/src/snowplow/Snowplow.ts +11 -2
- package/src/snowplow/index.test.ts +11 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2.2.5
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [f645017]
|
|
8
|
+
- Updated dependencies [5a8e751]
|
|
9
|
+
- Updated dependencies [447645e]
|
|
10
|
+
- Updated dependencies [8aa78a1]
|
|
11
|
+
- @simplybusiness/mobius@9.1.0
|
|
12
|
+
|
|
13
|
+
## 2.2.4
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- e7e3b04: Add pageview contexts
|
|
18
|
+
- Updated dependencies [f8e2249]
|
|
19
|
+
- @simplybusiness/mobius@9.0.2
|
|
20
|
+
|
|
3
21
|
## 2.2.3
|
|
4
22
|
|
|
5
23
|
### Patch Changes
|
package/dist/cjs/index.js
CHANGED
|
@@ -1256,6 +1256,7 @@ var getSnowplowConfig = (pageData) => pageData.scripts?.find(({ metadata }) => m
|
|
|
1256
1256
|
|
|
1257
1257
|
// src/snowplow/Snowplow.ts
|
|
1258
1258
|
var import_browser_tracker = require("@snowplow/browser-tracker");
|
|
1259
|
+
var import_browser_plugin_ga_cookies = require("@snowplow/browser-plugin-ga-cookies");
|
|
1259
1260
|
var Snowplow = class _Snowplow {
|
|
1260
1261
|
constructor(props) {
|
|
1261
1262
|
this.avalancheTrackerName = "sb-ava";
|
|
@@ -1297,7 +1298,8 @@ var Snowplow = class _Snowplow {
|
|
|
1297
1298
|
);
|
|
1298
1299
|
(0, import_browser_tracker.newTracker)(this.pvAvalancheTrackerName, avalancheCollector, {
|
|
1299
1300
|
...baseOptions,
|
|
1300
|
-
eventMethod: eventMethod === "post" ? "beacon" : eventMethod
|
|
1301
|
+
eventMethod: eventMethod === "post" ? "beacon" : eventMethod,
|
|
1302
|
+
plugins: [(0, import_browser_plugin_ga_cookies.GaCookiesPlugin)()]
|
|
1301
1303
|
});
|
|
1302
1304
|
(0, import_browser_tracker.setCookiePath)("/");
|
|
1303
1305
|
if (uid) {
|
|
@@ -1307,7 +1309,14 @@ var Snowplow = class _Snowplow {
|
|
|
1307
1309
|
}
|
|
1308
1310
|
setContexts(contexts) {
|
|
1309
1311
|
this.contexts = updateIdentityContext(contexts, this.uid);
|
|
1310
|
-
this.pvContext =
|
|
1312
|
+
this.pvContext = makeContexts(
|
|
1313
|
+
[
|
|
1314
|
+
"pageViewContext",
|
|
1315
|
+
"distributionChannelContext",
|
|
1316
|
+
"serviceChannelContext"
|
|
1317
|
+
],
|
|
1318
|
+
this.contexts
|
|
1319
|
+
);
|
|
1311
1320
|
this.structContext = makeContexts(
|
|
1312
1321
|
["distributionChannelContext", "serviceChannelContext"],
|
|
1313
1322
|
this.contexts
|
|
@@ -1318,7 +1327,7 @@ var Snowplow = class _Snowplow {
|
|
|
1318
1327
|
trackView(event) {
|
|
1319
1328
|
if (this.trackPageView) {
|
|
1320
1329
|
(0, import_browser_tracker.trackPageView)({ ...event, context: this.pvContext }, [
|
|
1321
|
-
this.
|
|
1330
|
+
this.pvAvalancheTrackerName
|
|
1322
1331
|
]);
|
|
1323
1332
|
}
|
|
1324
1333
|
return this;
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -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 ? () => {}\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 name: \"cancelAnytimeBadgeClicked\",\n type: \"structured\",\n makePayload: payload => {\n return {\n category: \"us-26-02-qcp-cancel-anytime-test\",\n action: \"cancel_anytime_badge_clicked\",\n label: (payload?.label as string) || \"cancel_anytime\",\n property: window.location.href,\n };\n },\n },\n];\n", "import { DELIMITER } from \"../../constants\";\nimport type { EventDefinition, ParamsType } from \"../../types\";\nimport { redact } from \"./redaction\";\n\n// Questionnaire events\nexport const questionnaireEventDefinitions: EventDefinition[] = [\n {\n name: \"questionAnswered\",\n type: \"unstructured\",\n makePayload: params => {\n const { section, context } = params as ParamsType;\n const { question, answer } = redact(params as ParamsType);\n // Flatten the answer to a delimited string\n const flatAnswer = Array.isArray(answer)\n ? answer.join(DELIMITER)\n : answer;\n\n return {\n schema:\n \"iglu:com.simplybusiness/form_question_answered/jsonschema/1-0-4\",\n data: {\n site: context.site,\n page_index: 1,\n page_name: \"quick_to_quote\",\n submitted_from: \"quick_to_quote_experiment\",\n section_name: section,\n question,\n answer: flatAnswer,\n vertical: context.vertical,\n journey_id: context.journeyId,\n },\n };\n },\n },\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 name: \"learnMoreModalOpened\",\n type: \"structured\",\n makePayload: params => {\n const { product } = params as ParamsType & { product: string };\n\n return {\n category: \"coverage_selection\",\n action: \"learn_more_modal_opened\",\n label: product,\n property: window.location.href,\n };\n },\n },\n];\n", "import type { EventDefinition, ParamsType } from \"../types\";\n\n// Referral page events\nexport const referralEventDefinitions: EventDefinition[] = [\n {\n name: \"nextCoverageClicked\",\n type: \"structured\",\n makePayload: params => {\n const { url } = params as ParamsType;\n const eventName = \"post_referral_workers_compensation_continuation_link\";\n\n return {\n category: eventName,\n action: \"link_click\",\n label: eventName,\n property: url,\n };\n },\n },\n];\n", "import { baseEventDefinitions } from \"./base\";\nimport { interventionEventDefinitions } from \"./intervention\";\nimport { personalisedCoverEventDefinitions } from \"./personalised_cover\";\nimport { qcpEventDefinitions } from \"./qcp\";\nimport { questionnaireEventDefinitions } from \"./questionnaire/questionnaire\";\nimport { coverageSelectionEventDefinitions } from \"./coverage-selection\";\nimport { referralEventDefinitions } from \"./referral\";\n\n// All events (keep up to date with new files)\nexport const eventDefinitions = [\n ...baseEventDefinitions,\n ...qcpEventDefinitions,\n ...referralEventDefinitions,\n ...interventionEventDefinitions,\n ...questionnaireEventDefinitions,\n ...personalisedCoverEventDefinitions,\n ...coverageSelectionEventDefinitions,\n];\n\nexport const qcpPageEvents = [...baseEventDefinitions, ...qcpEventDefinitions];\n\nexport const referralPageEvents = [\n ...baseEventDefinitions,\n ...referralEventDefinitions,\n];\n\nexport const personalisedCoverPageEvents = [\n ...baseEventDefinitions,\n ...personalisedCoverEventDefinitions,\n];\n\nexport const interventionPageEvents = [...interventionEventDefinitions];\n\nexport type { InterventionPayload } from \"./intervention\";\n\nexport const questionnairePageEvents = [...questionnaireEventDefinitions];\n\nexport const coverageSelectionPageEvents = [\n ...baseEventDefinitions,\n ...coverageSelectionEventDefinitions,\n];\n\n// Create a new export for each kind of page below\n// containing just the subset needed for that page\n", "import type { TrackingProps, PageDataProps } from \"./types\";\n\n// Get Snowplow config from page data props\nexport const getSnowplowConfig = (\n pageData: PageDataProps,\n): TrackingProps | undefined =>\n pageData.scripts?.find(({ metadata }) => metadata.name === \"snowplow\")\n ?.props as TrackingProps;\n", "import type {\n PageViewEvent,\n StructuredEvent,\n TrackerConfiguration,\n} from \"@snowplow/browser-tracker\";\nimport {\n newTracker,\n setCookiePath,\n setUserId,\n trackPageView,\n trackSelfDescribingEvent,\n trackStructEvent,\n} from \"@snowplow/browser-tracker\";\nimport { 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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,QAAQ;AAAA,IACV;AAAA,EACF;AACF;;;AC/CO,IAAM,YAAY;;;ACEzB,IAAM,aAAa;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AA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",
|
|
4
|
+
"sourcesContent": ["export * from \"./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 ? () => {}\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 name: \"cancelAnytimeBadgeClicked\",\n type: \"structured\",\n makePayload: payload => {\n return {\n category: \"us-26-02-qcp-cancel-anytime-test\",\n action: \"cancel_anytime_badge_clicked\",\n label: (payload?.label as string) || \"cancel_anytime\",\n property: window.location.href,\n };\n },\n },\n];\n", "import { DELIMITER } from \"../../constants\";\nimport type { EventDefinition, ParamsType } from \"../../types\";\nimport { redact } from \"./redaction\";\n\n// Questionnaire events\nexport const questionnaireEventDefinitions: EventDefinition[] = [\n {\n name: \"questionAnswered\",\n type: \"unstructured\",\n makePayload: params => {\n const { section, context } = params as ParamsType;\n const { question, answer } = redact(params as ParamsType);\n // Flatten the answer to a delimited string\n const flatAnswer = Array.isArray(answer)\n ? answer.join(DELIMITER)\n : answer;\n\n return {\n schema:\n \"iglu:com.simplybusiness/form_question_answered/jsonschema/1-0-4\",\n data: {\n site: context.site,\n page_index: 1,\n page_name: \"quick_to_quote\",\n submitted_from: \"quick_to_quote_experiment\",\n section_name: section,\n question,\n answer: flatAnswer,\n vertical: context.vertical,\n journey_id: context.journeyId,\n },\n };\n },\n },\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 name: \"learnMoreModalOpened\",\n type: \"structured\",\n makePayload: params => {\n const { product } = params as ParamsType & { product: string };\n\n return {\n category: \"coverage_selection\",\n action: \"learn_more_modal_opened\",\n label: product,\n property: window.location.href,\n };\n },\n },\n];\n", "import type { EventDefinition, ParamsType } from \"../types\";\n\n// Referral page events\nexport const referralEventDefinitions: EventDefinition[] = [\n {\n name: \"nextCoverageClicked\",\n type: \"structured\",\n makePayload: params => {\n const { url } = params as ParamsType;\n const eventName = \"post_referral_workers_compensation_continuation_link\";\n\n return {\n category: eventName,\n action: \"link_click\",\n label: eventName,\n property: url,\n };\n },\n },\n];\n", "import { baseEventDefinitions } from \"./base\";\nimport { interventionEventDefinitions } from \"./intervention\";\nimport { personalisedCoverEventDefinitions } from \"./personalised_cover\";\nimport { qcpEventDefinitions } from \"./qcp\";\nimport { questionnaireEventDefinitions } from \"./questionnaire/questionnaire\";\nimport { coverageSelectionEventDefinitions } from \"./coverage-selection\";\nimport { referralEventDefinitions } from \"./referral\";\n\n// All events (keep up to date with new files)\nexport const eventDefinitions = [\n ...baseEventDefinitions,\n ...qcpEventDefinitions,\n ...referralEventDefinitions,\n ...interventionEventDefinitions,\n ...questionnaireEventDefinitions,\n ...personalisedCoverEventDefinitions,\n ...coverageSelectionEventDefinitions,\n];\n\nexport const qcpPageEvents = [...baseEventDefinitions, ...qcpEventDefinitions];\n\nexport const referralPageEvents = [\n ...baseEventDefinitions,\n ...referralEventDefinitions,\n];\n\nexport const personalisedCoverPageEvents = [\n ...baseEventDefinitions,\n ...personalisedCoverEventDefinitions,\n];\n\nexport const interventionPageEvents = [...interventionEventDefinitions];\n\nexport type { InterventionPayload } from \"./intervention\";\n\nexport const questionnairePageEvents = [...questionnaireEventDefinitions];\n\nexport const coverageSelectionPageEvents = [\n ...baseEventDefinitions,\n ...coverageSelectionEventDefinitions,\n];\n\n// Create a new export for each kind of page below\n// containing just the subset needed for that page\n", "import type { TrackingProps, PageDataProps } from \"./types\";\n\n// Get Snowplow config from page data props\nexport const getSnowplowConfig = (\n pageData: PageDataProps,\n): TrackingProps | undefined =>\n pageData.scripts?.find(({ metadata }) => metadata.name === \"snowplow\")\n ?.props as TrackingProps;\n", "import type {\n PageViewEvent,\n StructuredEvent,\n TrackerConfiguration,\n} from \"@snowplow/browser-tracker\";\nimport {\n newTracker,\n setCookiePath,\n setUserId,\n trackPageView,\n trackSelfDescribingEvent,\n trackStructEvent,\n} from \"@snowplow/browser-tracker\";\nimport { GaCookiesPlugin } from \"@snowplow/browser-plugin-ga-cookies\";\nimport { makeContexts, updateIdentityContext } from \"./contexts\";\nimport type { EventDefinition, SerialisedEvent, TrackingProps } from \"./types\";\n\nexport type FrontOfficeStructuredEvent = StructuredEvent & {\n serviceChannelIdentifier: string;\n};\n\n/**\n * This class is an abstraction which wraps Snowplow\n * and exposes common methods with other services:\n * - trackEvent : sends a standard payload\n * - trackUnstructEvent : sends a payload for custom schema\n */\nexport class Snowplow {\n avalancheTrackerName = \"sb-ava\";\n\n bronzeAvalancheTrackerName = \"sb-ava-br\";\n\n pvAvalancheTrackerName = \"sb-ava-pv\";\n\n uid: unknown = \"\";\n\n trackPageView: boolean = false;\n\n contexts: Record<string, SerialisedEvent> = {};\n\n pvContext: SerialisedEvent[] = [];\n\n structContext: SerialisedEvent[] = [];\n\n serverData: Record<string, unknown> = {};\n\n eventHandlers: Record<string, (params?: Record<string, unknown>) => void> =\n {};\n\n static instance: Snowplow | undefined;\n\n constructor(props?: TrackingProps) {\n if (!props) return;\n\n const {\n appId,\n cookieDomain,\n avalancheCollector,\n eventMethod,\n uid,\n postPath,\n trackPageView: tpv,\n } = props;\n this.uid = uid;\n this.trackPageView = tpv;\n this.serverData = props?.pageViewContext?.data || {};\n\n // Set options\n const stateStorageStrategy = \"cookieAndLocalStorage\";\n const baseOptions: TrackerConfiguration = {\n appId,\n cookieDomain,\n eventMethod,\n stateStorageStrategy,\n postPath,\n };\n // Initialize trackers\n newTracker(this.avalancheTrackerName, avalancheCollector, baseOptions);\n\n newTracker(\n this.bronzeAvalancheTrackerName,\n avalancheCollector,\n baseOptions,\n );\n\n // Page view tracker\n newTracker(this.pvAvalancheTrackerName, avalancheCollector, {\n ...baseOptions,\n eventMethod: eventMethod === \"post\" ? \"beacon\" : eventMethod,\n plugins: [GaCookiesPlugin()],\n });\n\n setCookiePath(\"/\");\n if (uid) {\n setUserId(uid);\n }\n // Create a singleton instance\n Snowplow.instance = this;\n }\n\n setContexts(contexts: Record<string, SerialisedEvent>) {\n this.contexts = updateIdentityContext(contexts, this.uid);\n this.pvContext = makeContexts(\n [\n \"pageViewContext\",\n \"distributionChannelContext\",\n \"serviceChannelContext\",\n ],\n this.contexts,\n );\n this.structContext = makeContexts(\n [\"distributionChannelContext\", \"serviceChannelContext\"],\n this.contexts,\n );\n return this;\n }\n\n // Send a page view event\n trackView(event?: PageViewEvent) {\n if (this.trackPageView) {\n trackPageView({ ...event, context: this.pvContext }, [\n this.pvAvalancheTrackerName,\n ]);\n }\n return this;\n }\n\n // Send a structured event with contexts\n trackEvent(event: StructuredEvent) {\n trackStructEvent({ ...event, context: this.structContext }, [\n this.bronzeAvalancheTrackerName,\n ]);\n return this;\n }\n\n // Send a custom event with defined schema and optional contexts\n trackUnstructEvent(event: SerialisedEvent, contexts?: string[]) {\n if (!event) {\n return this;\n }\n\n if (contexts && Array.isArray(contexts) && contexts.length > 0) {\n // Add context to the event\n const context = makeContexts(contexts, this.contexts);\n trackSelfDescribingEvent({ event, context }, [this.avalancheTrackerName]);\n } else {\n trackSelfDescribingEvent({ event }, [this.avalancheTrackerName]);\n }\n return this;\n }\n\n addEventHandlers(eventDefinitions: EventDefinition[]) {\n // Add server context to makePayload functions\n const context = this.serverData;\n\n eventDefinitions.forEach(({ name, type, makePayload, contexts }) => {\n // Convert type into relevant function\n if (type === \"structured\") {\n this.addEventHandler(name, (params?: Record<string, unknown>) => {\n void this.trackEvent(\n makePayload({\n ...params,\n context,\n }) as StructuredEvent,\n );\n });\n } else {\n this.addEventHandler(name, (params?: Record<string, unknown>) => {\n const payload = makePayload({\n ...params,\n context,\n }) as SerialisedEvent;\n\n if (contexts && Array.isArray(contexts) && contexts.length > 0) {\n void this.trackUnstructEvent(payload, contexts);\n } else {\n void this.trackUnstructEvent(payload);\n }\n });\n }\n });\n return this;\n }\n\n private addEventHandler(\n name: string,\n handler: (params?: Record<string, unknown>) => void,\n ) {\n this.eventHandlers[name] = handler;\n return this;\n }\n\n private removeEventHandler(name: string) {\n delete this.eventHandlers[name];\n return this;\n }\n\n trigger(name: string, params?: Record<string, unknown>) {\n const handler = this.eventHandlers[name];\n\n if (\n Object.prototype.hasOwnProperty.call(this.eventHandlers, name) &&\n typeof handler === \"function\"\n ) {\n handler(params);\n }\n return this;\n }\n\n static getInstance(props?: TrackingProps) {\n if (!Snowplow.instance) {\n Snowplow.instance = new Snowplow(props);\n }\n return Snowplow.instance;\n }\n}\n", "/* eslint-disable @typescript-eslint/no-unused-vars */\nimport {\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\nimport { getContexts } from \"./contexts\";\nimport { eventDefinitions } from \"./event-definitions\";\nimport { Snowplow } from \"./Snowplow\";\nimport type { EventDefinition, TrackingProps } from \"./types\";\n\nexport interface SnowplowContextInterface {\n config: TrackingProps;\n snowplow?: Snowplow;\n}\n\nconst SnowplowContext = createContext<SnowplowContextInterface | null>(null);\n\ntype ProviderProps = {\n scripts: TrackingProps;\n children: ReactNode;\n};\n\nexport const SnowplowProvider = ({ scripts, children }: ProviderProps) => {\n const [config, _setConfig] = useState<TrackingProps>(scripts);\n const [snowplowInstance] = useState<Snowplow>(() =>\n Snowplow.getInstance(config),\n );\n\n // Attach event handlers and set contexts\n useEffect(() => {\n if (snowplowInstance && scripts) {\n const contexts = getContexts(config);\n\n snowplowInstance.setContexts(contexts).addEventHandlers(eventDefinitions);\n // Send page view event\n if (config.trackPageView) {\n void snowplowInstance.trackView();\n }\n }\n }, [config, snowplowInstance, scripts]);\n\n const value: SnowplowContextInterface = useMemo(\n () => ({\n config,\n snowplow: snowplowInstance,\n }),\n [config, snowplowInstance],\n );\n\n return (\n <SnowplowContext.Provider value={value}>\n {children}\n </SnowplowContext.Provider>\n );\n};\n\nexport function useSnowplowContext() {\n const context = useContext(SnowplowContext);\n\n if (!context) {\n throw new Error(\n \"useSnowplowContext must be used inside a `SnowplowProvider`\",\n );\n }\n return context;\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACYA,IAAM,WAAW;AACjB,IAAM,WAAW,GAAG,QAAQ;AAC5B,IAAM,eAAe,GAAG,QAAQ;AAChC,IAAM,YAAY,CAAC,IAAI;AACvB,IAAM,QAAQ;AAEP,IAAM,gBAAN,MAAM,eAAc;AAAA,EAWzB,YAAY,EAAE,QAAQ,OAAO,UAAU,GAAwB;AAC7D,SAAK,SAAS;AACd,SAAK,QAAQ,SAAS;AACtB,SAAK,YAAY,aAAa;AAC9B,UAAM,iBAAiB,KAAK,UAAU,KAAK,GAAG;AAC9C,SAAK,UAAU,GAAG,QAAQ,QAAQ,KAAK,MAAM,UAAU,KAAK,KAAK,cAAc,cAAc;AAC7F,SAAK,cAAc,GAAG,YAAY,QAAQ,KAAK,MAAM;AAAA,EACvD;AAAA,EAEA,aAAqB,aACnB,KACA,gBACkB;AAClB,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,GAAG,EACN,KAAK,cAAY,SAAS,KAAK,CAAsB,EACrD,KAAK,UAAQ,QAAQ,eAAe,IAAI,CAAC,CAAC,EAC1C,MAAM,WAAS,OAAO,MAAM,OAAO,KAAK,CAAC,CAAC,CAAC;AAAA,IAChD,CAAC;AAAA,EACH;AAAA,EAEO,KAAK,gBAA0C;AACpD,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,GAAG,KAAK,OAAO,SAAS,cAAc,EAAE,EAC3C,KAAK,cAAY,SAAS,KAAK,CAAiC,EAChE,KAAK,UAAQ,QAAQ,KAAK,YAAY,IAAI,CAAC,CAAC,EAC5C,MAAM,WAAS,OAAO,MAAM,OAAO,KAAK,CAAC,CAAC,CAAC;AAAA,IAChD,CAAC;AAAA,EACH;AAAA,EAEO,SAAS,IAA8B;AAC5C,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,GAAG,KAAK,OAAO,cAAc,EAAE,EAAE,EACpC,KAAK,cAAY,SAAS,KAAK,CAAiC,EAChE,KAAK,UAAQ,QAAQ,KAAK,YAAY,IAAI,CAAC,CAAC,EAC5C,MAAM,WAAS,OAAO,MAAM,OAAO,KAAK,CAAC,CAAC,CAAC;AAAA,IAChD,CAAC;AAAA,EACH;AAAA,EAEO,IAAI,IAA6C;AACtD,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,GAAG,KAAK,WAAW,OAAO,EAAE,EAAE,EACjC,KAAK,cAAY,SAAS,KAAK,CAAqC,EACpE,KAAK,UAAQ,QAAQ,eAAc,gBAAgB,IAAI,CAAC,CAAC,EACzD,MAAM,WAAS,OAAO,MAAM,OAAO,KAAK,CAAC,CAAC,CAAC;AAAA,IAChD,CAAC;AAAA,EACH;AAAA,EAEQ,YAAY,EAAE,MAAM,GAAwB;AAClD,QAAI,CAAC,SAAS,CAAC,MAAM,QAAQ,KAAK,GAAG;AACnC,YAAM,MAAM,kBAAkB;AAAA,IAChC;AAEA,QAAK,MAAM,CAAC,EAAmB,OAAO;AACpC,YAAM,MAAM,MAAM,CAAC,EAAE,WAAW;AAAA,IAClC;AAEA,WAAQ,MAA8B;AAAA,MACpC,CAAC,UAAkB;AAAA,QACjB,IAAI,KAAK;AAAA,QACT,OAAO,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AAAA,QACxC,OAAO,KAAK;AAAA;AAAA;AAAA,QAGZ,UACE,KAAK,SAAS,YAAY,SAAY,MAAM,KAAK,SAAS,KAAK,EAAE;AAAA,MACrE;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAe,gBAAgB,EAAE,MAAM,GAA4B;AACjE,QAAI,CAAC,SAAS,CAAC,MAAM,QAAQ,KAAK,GAAG;AACnC,YAAM,MAAM,kBAAkB;AAAA,IAChC;AAEA,QAAK,MAAM,CAAC,EAAmB,OAAO;AACpC,YAAM,MAAO,MAAM,CAAC,EAAmB,WAAW;AAAA,IACpD;AAEA,UAAM,EAAE,OAAO,OAAO,MAAM,WAAW,IACrC,MACA,CAAC;AAEH,WAAO;AAAA,MACL,WAAW;AAAA,MACX,WAAW;AAAA,MACX,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,EACF;AACF;;;ACvHA,qBAAyB;AAIzB,IAAM,mBAAmB;AACzB,IAAM,oBAAoB;AAG1B,IAAM,oBAAoB,oBAAI,IAAsB;AAGpD,IAAM,eAAe;AAAA,EACnB,QACE,WAAW,SAAS,KAAK,aAAa,SAClC,MAAM;AAAA,EAAC,IACP,QAAQ,MAAM,KAAK,OAAO;AAClC;AAGO,IAAM,yBAAyB,MACpC,WAAW,SAAS,KAAK,gBAAgB;AAG3C,IAAM,oBAAoB,MAAM;AAC9B,QAAM,MAAM,uBAAuB;AACnC,SAAO,QAAQ,aAAa,QAAQ;AACtC;AAQO,SAAS,YAAY,UAA8B,CAAC,GAAG;AAC5D,QAAM;AAAA,IACJ,YAAY;AAAA,IACZ,aAAa;AAAA,IACb;AAAA,EACF,IAAI;AAEJ,MAAI,CAAC,aAAa,CAAC,kBAAkB,GAAG;AACtC,WAAO;AAAA,EACT;AAEA,MAAI,mBAAmB,kBAAkB,IAAI,SAAS;AAEtD,MAAI,CAAC,kBAAkB;AACrB,uBAAmB,IAAI,wBAAS;AAAA,MAC9B;AAAA,MACA;AAAA,MACA,aAAa,uBAAuB;AAAA,MACpC,iBAAiB;AAAA,QACf,SAAS;AAAA,QACT,oBAAoB;AAAA,MACtB;AAAA,IACF,CAAC;AACD,sBAAkB,IAAI,WAAW,gBAAgB;AAAA,EACnD;AAEA,SAAO;AACT;;;AC1DO,IAAM,gBAAgB,CAAC,WAC5B,OAAO,QAAQ,UAAU,CAAC,CAAC,EAAE;AAAA,EAC3B,CAAC,KAA8B,CAAC,KAAK,KAAK,MAA+B;AACvE,UAAM,SAAS,iBAAiB,GAAG;AAEnC,QAAI,MAAM,QAAQ,KAAK,KAAK,MAAM,MAAM,QAAQ,GAAG;AACjD,aAAO;AAAA,QACL,GAAG;AAAA,QACH,CAAC,MAAM,GAAG,MAAM,IAAI,OAAK,cAAc,CAAC,CAAC;AAAA,MAC3C;AAAA,IACF;AAEA,QAAI,SAAS,KAAK,GAAG;AACnB,aAAO;AAAA,QACL,GAAG;AAAA,QACH,CAAC,MAAM,GAAG,cAAc,KAAK;AAAA,MAC/B;AAAA,IACF;AAEA,WAAO;AAAA,MACL,GAAG;AAAA,MACH,CAAC,MAAM,GAAG;AAAA,IACZ;AAAA,EACF;AAAA,EACA,CAAC;AACH;AAEK,IAAM,YAAY,CAAC,OAAO,OAC/B,KAAK,YAAY,EAAE,QAAQ,MAAM,GAAG;AAE/B,IAAM,mBAAmB,CAAC,SAC/B,KAAK,OAAO,CAAC,EAAE,YAAY,IAC3B,KACG,MAAM,CAAC,EACP;AAAA,EAAQ;AAAA,EAAoB,CAAC,OAAO,UACnC,QAAQ,QAAQ,IAAI,MAAM,YAAY,CAAC;AACzC;;;ACvCG,SAAS,SAAS,OAAkD;AACzE,SACE,OAAO,UAAU,YACjB,UAAU,QACV,CAAC,MAAM,QAAQ,KAAK,KACpB,OAAO,eAAe,KAAK,MAAM,OAAO;AAE5C;;;ACJO,IAAM,cAAc,CACzB,WACoC;AAGpC,QAAM,iBAAiB,OAAO,QAAQ,UAAU,CAAC,CAAC,EAC/C,OAAO,CAAC,CAAC,GAAG,MAAM,IAAI,SAAS,SAAS,KAAK,QAAQ,kBAAkB,EACvE,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM;AAC7B,QAAI,OAAO,UAAU,UAAU;AAC7B,aAAO,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,cAAc,EAAE,GAAG,MAAM,CAAC,EAAE;AAAA,IACtD;AACA,WAAO;AAAA,MACL,GAAG;AAAA,MACH,CAAC,GAAG,GAAG,cAAc,EAAE,MAAM,EAAE,4BAA4B,MAAM,EAAE,CAAC;AAAA,IACtE;AAAA,EACF,GAAG,CAAC,CAAC;AAEP,SAAO;AACT;AAEO,IAAM,wBAAwB,CACnC,UACA,QACoC;AACpC,QAAM,QAAQ,OAAO,KAAK,QAAQ,EAAE;AAAA,IAAU,SAC5C,SAAS,GAAG,EAAE,QAAQ,SAAS,kBAAkB;AAAA,EACnD;AACA,MAAI,QAAQ,IAAI;AACd,UAAM,MAAM,OAAO,KAAK,QAAQ,EAAE,KAAK;AACvC,WAAO;AAAA,MACL,GAAG;AAAA,MACH,CAAC,GAAG,GAAG;AAAA,QACL,GAAG,SAAS,GAAG;AAAA,QACf,MAAM;AAAA,UACJ,GAAG,SAAS,GAAG,EAAE;AAAA,UACjB,eAAe;AAAA,QACjB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEO,IAAM,eAAe,CAC1B,MACA,YACuB,QAAQ,CAAC,GAAG,IAAI,SAAO,OAAO,GAAG,CAAC;;;AC1BpD,IAAM,uBAA0C;AAAA;AAAA,EAErD;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;AAAA,EAEA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,OAAO;AAAA,MAClB,QACE;AAAA,MACF,MAAM;AAAA,QACJ,QACE;AAAA,QACF,MAAM,CAAC;AAAA,MACT;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;AAEJ,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,MAAM;AAAA,UACJ,mBAAmB;AAAA,UACnB,kBAAkB;AAAA,UAClB,YAAY;AAAA,UACZ,WAAW;AAAA,UACX,MAAM,QAAQ;AAAA,UACd,cAAc;AAAA,UACd,UAAU,QAAQ;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAEA;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,OAAO,SAAS;AAAA,MAC5B;AAAA,IACF;AAAA,IACA,UAAU,CAAC,uBAAuB;AAAA,EACpC;AACF;;;AC/EO,IAAM,+BAAkD;AAAA,EAC7D;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,YAAU;AACrB,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,IAAI;AAEJ,aAAO;AAAA,QACL,QACE;AAAA,QACF,MAAM;AAAA,UACJ,mBAAmB;AAAA,UACnB,wBAAwB;AAAA,UACxB,6BAA6B;AAAA,UAC7B;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa,QAAM;AAAA,MACjB,UAAU;AAAA,MACV,QAAQ;AAAA,IACV;AAAA,EACF;AACF;;;AC/CO,IAAM,YAAY;;;ACEzB,IAAM,aAAa;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AA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",
|
|
6
6
|
"names": ["eventDefinitions"]
|
|
7
7
|
}
|
package/dist/cjs/meta.json
CHANGED
|
@@ -184,13 +184,18 @@
|
|
|
184
184
|
"format": "esm"
|
|
185
185
|
},
|
|
186
186
|
"src/snowplow/Snowplow.ts": {
|
|
187
|
-
"bytes":
|
|
187
|
+
"bytes": 5633,
|
|
188
188
|
"imports": [
|
|
189
189
|
{
|
|
190
190
|
"path": "@snowplow/browser-tracker",
|
|
191
191
|
"kind": "import-statement",
|
|
192
192
|
"external": true
|
|
193
193
|
},
|
|
194
|
+
{
|
|
195
|
+
"path": "@snowplow/browser-plugin-ga-cookies",
|
|
196
|
+
"kind": "import-statement",
|
|
197
|
+
"external": true
|
|
198
|
+
},
|
|
194
199
|
{
|
|
195
200
|
"path": "src/snowplow/contexts.ts",
|
|
196
201
|
"kind": "import-statement",
|
|
@@ -309,7 +314,7 @@
|
|
|
309
314
|
"imports": [],
|
|
310
315
|
"exports": [],
|
|
311
316
|
"inputs": {},
|
|
312
|
-
"bytes":
|
|
317
|
+
"bytes": 74004
|
|
313
318
|
},
|
|
314
319
|
"dist/cjs/index.js": {
|
|
315
320
|
"imports": [
|
|
@@ -323,6 +328,11 @@
|
|
|
323
328
|
"kind": "require-call",
|
|
324
329
|
"external": true
|
|
325
330
|
},
|
|
331
|
+
{
|
|
332
|
+
"path": "@snowplow/browser-plugin-ga-cookies",
|
|
333
|
+
"kind": "require-call",
|
|
334
|
+
"external": true
|
|
335
|
+
},
|
|
326
336
|
{
|
|
327
337
|
"path": "react",
|
|
328
338
|
"kind": "require-call",
|
|
@@ -389,13 +399,13 @@
|
|
|
389
399
|
"bytesInOutput": 117
|
|
390
400
|
},
|
|
391
401
|
"src/snowplow/Snowplow.ts": {
|
|
392
|
-
"bytesInOutput":
|
|
402
|
+
"bytesInOutput": 4458
|
|
393
403
|
},
|
|
394
404
|
"src/snowplow/SnowplowContext.tsx": {
|
|
395
405
|
"bytesInOutput": 1196
|
|
396
406
|
}
|
|
397
407
|
},
|
|
398
|
-
"bytes":
|
|
408
|
+
"bytes": 39972
|
|
399
409
|
}
|
|
400
410
|
}
|
|
401
411
|
}
|
package/dist/esm/index.js
CHANGED
|
@@ -1221,6 +1221,7 @@ import {
|
|
|
1221
1221
|
trackSelfDescribingEvent,
|
|
1222
1222
|
trackStructEvent
|
|
1223
1223
|
} from "@snowplow/browser-tracker";
|
|
1224
|
+
import { GaCookiesPlugin } from "@snowplow/browser-plugin-ga-cookies";
|
|
1224
1225
|
var Snowplow = class _Snowplow {
|
|
1225
1226
|
constructor(props) {
|
|
1226
1227
|
this.avalancheTrackerName = "sb-ava";
|
|
@@ -1262,7 +1263,8 @@ var Snowplow = class _Snowplow {
|
|
|
1262
1263
|
);
|
|
1263
1264
|
newTracker(this.pvAvalancheTrackerName, avalancheCollector, {
|
|
1264
1265
|
...baseOptions,
|
|
1265
|
-
eventMethod: eventMethod === "post" ? "beacon" : eventMethod
|
|
1266
|
+
eventMethod: eventMethod === "post" ? "beacon" : eventMethod,
|
|
1267
|
+
plugins: [GaCookiesPlugin()]
|
|
1266
1268
|
});
|
|
1267
1269
|
setCookiePath("/");
|
|
1268
1270
|
if (uid) {
|
|
@@ -1272,7 +1274,14 @@ var Snowplow = class _Snowplow {
|
|
|
1272
1274
|
}
|
|
1273
1275
|
setContexts(contexts) {
|
|
1274
1276
|
this.contexts = updateIdentityContext(contexts, this.uid);
|
|
1275
|
-
this.pvContext =
|
|
1277
|
+
this.pvContext = makeContexts(
|
|
1278
|
+
[
|
|
1279
|
+
"pageViewContext",
|
|
1280
|
+
"distributionChannelContext",
|
|
1281
|
+
"serviceChannelContext"
|
|
1282
|
+
],
|
|
1283
|
+
this.contexts
|
|
1284
|
+
);
|
|
1276
1285
|
this.structContext = makeContexts(
|
|
1277
1286
|
["distributionChannelContext", "serviceChannelContext"],
|
|
1278
1287
|
this.contexts
|
|
@@ -1283,7 +1292,7 @@ var Snowplow = class _Snowplow {
|
|
|
1283
1292
|
trackView(event) {
|
|
1284
1293
|
if (this.trackPageView) {
|
|
1285
1294
|
trackPageView({ ...event, context: this.pvContext }, [
|
|
1286
|
-
this.
|
|
1295
|
+
this.pvAvalancheTrackerName
|
|
1287
1296
|
]);
|
|
1288
1297
|
}
|
|
1289
1298
|
return this;
|