@simplybusiness/services 2.7.6 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/cjs/index.js +27 -0
  3. package/dist/cjs/index.js.map +2 -2
  4. package/dist/cjs/meta.json +23 -23
  5. package/dist/cjs/snowplow/Snowplow.js.map +1 -1
  6. package/dist/cjs/snowplow/SnowplowContext.js +27 -0
  7. package/dist/cjs/snowplow/SnowplowContext.js.map +2 -2
  8. package/dist/cjs/snowplow/contexts.js.map +1 -1
  9. package/dist/cjs/snowplow/event-definitions/index.js +27 -0
  10. package/dist/cjs/snowplow/event-definitions/index.js.map +2 -2
  11. package/dist/cjs/snowplow/event-definitions/questionnaire/questionnaire.js +27 -0
  12. package/dist/cjs/snowplow/event-definitions/questionnaire/questionnaire.js.map +2 -2
  13. package/dist/cjs/snowplow/index.js +27 -0
  14. package/dist/cjs/snowplow/index.js.map +2 -2
  15. package/dist/cjs/utils/testUtils.js +27 -0
  16. package/dist/cjs/utils/testUtils.js.map +2 -2
  17. package/dist/esm/{chunk-2NJVETWD.js → chunk-EXE7XR3Q.js} +2 -2
  18. package/dist/esm/{chunk-3U2OGG7X.js → chunk-HLJQKITS.js} +28 -1
  19. package/dist/esm/{chunk-3U2OGG7X.js.map → chunk-HLJQKITS.js.map} +2 -2
  20. package/dist/esm/{chunk-YL4B2IYT.js → chunk-LDG3C5GH.js} +4 -4
  21. package/dist/esm/{chunk-TN5IBPWO.js → chunk-MZ7BEV3O.js} +1 -1
  22. package/dist/esm/{chunk-TN5IBPWO.js.map → chunk-MZ7BEV3O.js.map} +1 -1
  23. package/dist/esm/{chunk-2TWF6FRS.js → chunk-N5QMO2XU.js} +2 -2
  24. package/dist/esm/index.js +5 -5
  25. package/dist/esm/meta.json +49 -49
  26. package/dist/esm/snowplow/Snowplow.js +2 -2
  27. package/dist/esm/snowplow/SnowplowContext.js +5 -5
  28. package/dist/esm/snowplow/contexts.js +1 -1
  29. package/dist/esm/snowplow/event-definitions/index.js +2 -2
  30. package/dist/esm/snowplow/event-definitions/questionnaire/questionnaire.js +1 -1
  31. package/dist/esm/snowplow/index.js +5 -5
  32. package/dist/esm/utils/testUtils.js +5 -5
  33. package/dist/esm/utils/testUtils.js.map +2 -2
  34. package/dist/tsconfig.build.tsbuildinfo +1 -1
  35. package/dist/types/mocks/eventDefinitions.d.ts +3 -3
  36. package/package.json +9 -8
  37. package/src/snowplow/SnowplowContext.test.tsx +1 -4
  38. package/src/snowplow/contexts.test.ts +2 -2
  39. package/src/snowplow/contexts.ts +1 -1
  40. package/src/snowplow/event-definitions/questionnaire/questionnaire.test.ts +48 -0
  41. package/src/snowplow/event-definitions/questionnaire/questionnaire.ts +29 -0
  42. package/src/snowplow/index.test.ts +5 -5
  43. package/src/utils/testUtils.tsx +1 -2
  44. /package/dist/esm/{chunk-2NJVETWD.js.map → chunk-EXE7XR3Q.js.map} +0 -0
  45. /package/dist/esm/{chunk-YL4B2IYT.js.map → chunk-LDG3C5GH.js.map} +0 -0
  46. /package/dist/esm/{chunk-2TWF6FRS.js.map → chunk-N5QMO2XU.js.map} +0 -0
@@ -49,7 +49,7 @@
49
49
  "format": "esm"
50
50
  },
51
51
  "src/snowplow/contexts.ts": {
52
- "bytes": 1439,
52
+ "bytes": 1404,
53
53
  "imports": [
54
54
  {
55
55
  "path": "src/utils/index.ts",
@@ -102,7 +102,7 @@
102
102
  "format": "esm"
103
103
  },
104
104
  "src/snowplow/event-definitions/questionnaire/questionnaire.ts": {
105
- "bytes": 9359,
105
+ "bytes": 10181,
106
106
  "imports": [
107
107
  {
108
108
  "path": "src/snowplow/constants.ts",
@@ -293,7 +293,7 @@
293
293
  "format": "esm"
294
294
  },
295
295
  "src/utils/testUtils.tsx": {
296
- "bytes": 1093,
296
+ "bytes": 1020,
297
297
  "imports": [
298
298
  {
299
299
  "path": "@testing-library/react",
@@ -350,7 +350,7 @@
350
350
  "imports": [],
351
351
  "exports": [],
352
352
  "inputs": {},
353
- "bytes": 76631
353
+ "bytes": 77963
354
354
  },
355
355
  "dist/cjs/index.js": {
356
356
  "imports": [
@@ -420,7 +420,7 @@
420
420
  "bytesInOutput": 3841
421
421
  },
422
422
  "src/snowplow/event-definitions/questionnaire/questionnaire.ts": {
423
- "bytesInOutput": 8208
423
+ "bytesInOutput": 9005
424
424
  },
425
425
  "src/snowplow/event-definitions/coverage-selection.ts": {
426
426
  "bytesInOutput": 1605
@@ -441,7 +441,7 @@
441
441
  "bytesInOutput": 1186
442
442
  }
443
443
  },
444
- "bytes": 41399
444
+ "bytes": 42196
445
445
  },
446
446
  "dist/cjs/utils/index.js.map": {
447
447
  "imports": [],
@@ -507,7 +507,7 @@
507
507
  "imports": [],
508
508
  "exports": [],
509
509
  "inputs": {},
510
- "bytes": 71739
510
+ "bytes": 72994
511
511
  },
512
512
  "dist/cjs/utils/testUtils.js": {
513
513
  "imports": [
@@ -582,7 +582,7 @@
582
582
  "bytesInOutput": 3841
583
583
  },
584
584
  "src/snowplow/event-definitions/questionnaire/questionnaire.ts": {
585
- "bytesInOutput": 8208
585
+ "bytesInOutput": 9005
586
586
  },
587
587
  "src/snowplow/event-definitions/coverage-selection.ts": {
588
588
  "bytesInOutput": 1605
@@ -600,13 +600,13 @@
600
600
  "bytesInOutput": 119
601
601
  }
602
602
  },
603
- "bytes": 38925
603
+ "bytes": 39722
604
604
  },
605
605
  "dist/cjs/snowplow/Snowplow.js.map": {
606
606
  "imports": [],
607
607
  "exports": [],
608
608
  "inputs": {},
609
- "bytes": 10890
609
+ "bytes": 10855
610
610
  },
611
611
  "dist/cjs/snowplow/Snowplow.js": {
612
612
  "imports": [
@@ -654,7 +654,7 @@
654
654
  "imports": [],
655
655
  "exports": [],
656
656
  "inputs": {},
657
- "bytes": 4674
657
+ "bytes": 4639
658
658
  },
659
659
  "dist/cjs/snowplow/contexts.js": {
660
660
  "imports": [],
@@ -694,7 +694,7 @@
694
694
  "imports": [],
695
695
  "exports": [],
696
696
  "inputs": {},
697
- "bytes": 68291
697
+ "bytes": 69623
698
698
  },
699
699
  "dist/cjs/snowplow/index.js": {
700
700
  "imports": [
@@ -753,7 +753,7 @@
753
753
  "bytesInOutput": 3841
754
754
  },
755
755
  "src/snowplow/event-definitions/questionnaire/questionnaire.ts": {
756
- "bytesInOutput": 8208
756
+ "bytesInOutput": 9005
757
757
  },
758
758
  "src/snowplow/event-definitions/coverage-selection.ts": {
759
759
  "bytesInOutput": 1605
@@ -774,7 +774,7 @@
774
774
  "bytesInOutput": 1186
775
775
  }
776
776
  },
777
- "bytes": 37504
777
+ "bytes": 38301
778
778
  },
779
779
  "dist/cjs/snowplow/types.js.map": {
780
780
  "imports": [],
@@ -797,7 +797,7 @@
797
797
  "imports": [],
798
798
  "exports": [],
799
799
  "inputs": {},
800
- "bytes": 67538
800
+ "bytes": 68870
801
801
  },
802
802
  "dist/cjs/snowplow/SnowplowContext.js": {
803
803
  "imports": [
@@ -856,7 +856,7 @@
856
856
  "bytesInOutput": 3841
857
857
  },
858
858
  "src/snowplow/event-definitions/questionnaire/questionnaire.ts": {
859
- "bytesInOutput": 8208
859
+ "bytesInOutput": 9005
860
860
  },
861
861
  "src/snowplow/event-definitions/coverage-selection.ts": {
862
862
  "bytesInOutput": 1605
@@ -871,7 +871,7 @@
871
871
  "bytesInOutput": 4556
872
872
  }
873
873
  },
874
- "bytes": 36883
874
+ "bytes": 37680
875
875
  },
876
876
  "dist/cjs/snowplow/event-definitions/base.js.map": {
877
877
  "imports": [],
@@ -911,7 +911,7 @@
911
911
  "imports": [],
912
912
  "exports": [],
913
913
  "inputs": {},
914
- "bytes": 52835
914
+ "bytes": 54202
915
915
  },
916
916
  "dist/cjs/snowplow/event-definitions/index.js": {
917
917
  "imports": [],
@@ -943,7 +943,7 @@
943
943
  "bytesInOutput": 3841
944
944
  },
945
945
  "src/snowplow/event-definitions/questionnaire/questionnaire.ts": {
946
- "bytesInOutput": 8208
946
+ "bytesInOutput": 9005
947
947
  },
948
948
  "src/snowplow/event-definitions/coverage-selection.ts": {
949
949
  "bytesInOutput": 1605
@@ -952,7 +952,7 @@
952
952
  "bytesInOutput": 379
953
953
  }
954
954
  },
955
- "bytes": 29475
955
+ "bytes": 30272
956
956
  },
957
957
  "dist/cjs/snowplow/event-definitions/intervention.js.map": {
958
958
  "imports": [],
@@ -1049,7 +1049,7 @@
1049
1049
  "imports": [],
1050
1050
  "exports": [],
1051
1051
  "inputs": {},
1052
- "bytes": 21072
1052
+ "bytes": 22439
1053
1053
  },
1054
1054
  "dist/cjs/snowplow/event-definitions/questionnaire/questionnaire.js": {
1055
1055
  "imports": [],
@@ -1057,7 +1057,7 @@
1057
1057
  "entryPoint": "src/snowplow/event-definitions/questionnaire/questionnaire.ts",
1058
1058
  "inputs": {
1059
1059
  "src/snowplow/event-definitions/questionnaire/questionnaire.ts": {
1060
- "bytesInOutput": 8401
1060
+ "bytesInOutput": 9198
1061
1061
  },
1062
1062
  "src/snowplow/constants.ts": {
1063
1063
  "bytesInOutput": 21
@@ -1066,7 +1066,7 @@
1066
1066
  "bytesInOutput": 3841
1067
1067
  }
1068
1068
  },
1069
- "bytes": 13328
1069
+ "bytes": 14125
1070
1070
  },
1071
1071
  "dist/cjs/snowplow/event-definitions/questionnaire/redaction.js.map": {
1072
1072
  "imports": [],
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/snowplow/Snowplow.ts", "../../../src/snowplow/contexts.ts"],
4
- "sourcesContent": ["import type {\n PageViewEvent,\n StructuredEvent,\n TrackerConfiguration,\n} from \"@snowplow/browser-tracker\";\nimport {\n newTracker,\n setCookiePath,\n setUserId,\n trackPageView,\n trackSelfDescribingEvent,\n trackStructEvent,\n} from \"@snowplow/browser-tracker\";\nimport { GaCookiesPlugin } from \"@snowplow/browser-plugin-ga-cookies\";\nimport { makeContexts, updateIdentityContext } from \"./contexts\";\nimport type { EventDefinition, SerialisedEvent, TrackingProps } from \"./types\";\n\nexport type FrontOfficeStructuredEvent = StructuredEvent & {\n serviceChannelIdentifier: string;\n};\n\n/**\n * This class is an abstraction which wraps Snowplow\n * and exposes common methods with other services:\n * - trackEvent : sends a standard payload\n * - trackUnstructEvent : sends a payload for custom schema\n */\nexport class Snowplow {\n avalancheTrackerName = \"sb-ava\";\n\n bronzeAvalancheTrackerName = \"sb-ava-br\";\n\n pvAvalancheTrackerName = \"sb-ava-pv\";\n\n uid: unknown = \"\";\n\n trackPageView: boolean = false;\n\n contexts: Record<string, SerialisedEvent> = {};\n\n pvContext: SerialisedEvent[] = [];\n\n structContext: SerialisedEvent[] = [];\n\n serverData: Record<string, unknown> = {};\n\n eventHandlers: Record<string, (params?: Record<string, unknown>) => void> =\n {};\n\n static instance: Snowplow | undefined;\n\n constructor(props?: TrackingProps) {\n if (!props) return;\n\n const {\n appId,\n cookieDomain,\n avalancheCollector,\n eventMethod,\n uid,\n postPath,\n trackPageView: tpv,\n } = props;\n this.uid = uid;\n this.trackPageView = tpv;\n this.serverData = props?.pageViewContext?.data || {};\n\n // Set options\n const stateStorageStrategy = \"cookieAndLocalStorage\";\n const baseOptions: TrackerConfiguration = {\n appId,\n cookieDomain,\n eventMethod,\n stateStorageStrategy,\n postPath,\n };\n // Initialize trackers\n newTracker(this.avalancheTrackerName, avalancheCollector, baseOptions);\n\n newTracker(\n this.bronzeAvalancheTrackerName,\n avalancheCollector,\n baseOptions,\n );\n\n // Page view tracker\n newTracker(this.pvAvalancheTrackerName, avalancheCollector, {\n ...baseOptions,\n eventMethod: eventMethod === \"post\" ? \"beacon\" : eventMethod,\n plugins: [GaCookiesPlugin()],\n });\n\n setCookiePath(\"/\");\n if (uid) {\n setUserId(uid);\n }\n // Create a singleton instance\n Snowplow.instance = this;\n }\n\n setContexts(contexts: Record<string, SerialisedEvent>) {\n this.contexts = updateIdentityContext(contexts, this.uid);\n this.pvContext = makeContexts(\n [\n \"pageViewContext\",\n \"distributionChannelContext\",\n \"serviceChannelContext\",\n ],\n this.contexts,\n );\n this.structContext = makeContexts(\n [\"distributionChannelContext\", \"serviceChannelContext\"],\n this.contexts,\n );\n return this;\n }\n\n // Send a page view event\n trackView(event?: PageViewEvent) {\n if (this.trackPageView) {\n trackPageView({ ...event, context: this.pvContext }, [\n this.pvAvalancheTrackerName,\n ]);\n }\n return this;\n }\n\n // Send a structured event with contexts\n trackEvent(event: StructuredEvent) {\n trackStructEvent({ ...event, context: this.structContext }, [\n this.bronzeAvalancheTrackerName,\n ]);\n return this;\n }\n\n // Send a custom event with defined schema and optional contexts\n trackUnstructEvent(event: SerialisedEvent, contexts?: string[]) {\n if (!event) {\n return this;\n }\n\n if (contexts && Array.isArray(contexts) && contexts.length > 0) {\n // Add context to the event\n const context = makeContexts(contexts, this.contexts);\n trackSelfDescribingEvent({ event, context }, [this.avalancheTrackerName]);\n } else {\n trackSelfDescribingEvent({ event }, [this.avalancheTrackerName]);\n }\n return this;\n }\n\n addEventHandlers(eventDefinitions: EventDefinition[]) {\n // Add server context to makePayload functions\n const context = this.serverData;\n\n eventDefinitions.forEach(({ name, type, makePayload, contexts }) => {\n // Convert type into relevant function\n if (type === \"structured\") {\n this.addEventHandler(name, (params?: Record<string, unknown>) => {\n void this.trackEvent(\n makePayload({\n ...params,\n context,\n }) as StructuredEvent,\n );\n });\n } else {\n this.addEventHandler(name, (params?: Record<string, unknown>) => {\n const payload = makePayload({\n ...params,\n context,\n }) as SerialisedEvent;\n\n if (contexts && Array.isArray(contexts) && contexts.length > 0) {\n void this.trackUnstructEvent(payload, contexts);\n } else {\n void this.trackUnstructEvent(payload);\n }\n });\n }\n });\n return this;\n }\n\n private addEventHandler(\n name: string,\n handler: (params?: Record<string, unknown>) => void,\n ) {\n this.eventHandlers[name] = handler;\n return this;\n }\n\n private removeEventHandler(name: string) {\n delete this.eventHandlers[name];\n return this;\n }\n\n trigger(name: string, params?: Record<string, unknown>) {\n if (!this.serverData || Object.keys(this.serverData).length === 0) {\n return this;\n }\n\n const handler = this.eventHandlers[name];\n\n if (\n Object.prototype.hasOwnProperty.call(this.eventHandlers, name) &&\n typeof handler === \"function\"\n ) {\n handler(params);\n }\n return this;\n }\n\n static getInstance(props?: TrackingProps) {\n if (!Snowplow.instance) {\n Snowplow.instance = new Snowplow(props);\n }\n return Snowplow.instance;\n }\n}\n", "import { snakeCaseKeys } from \"../utils\";\nimport type { SerialisedEvent, TrackingProps } from \"./types\";\n\nexport const getContexts = (\n config: TrackingProps,\n): Record<string, SerialisedEvent> => {\n // Create an object that only contains Context keys\n // and snake_case the keys\n const contextEntries = Object.entries(config || {})\n .filter(([key]) => key.includes(\"Context\") && key !== \"includeGAContext\")\n .reduce((acc, [key, value]) => {\n if (typeof value === \"object\") {\n return { ...acc, [key]: snakeCaseKeys({ ...value }) };\n }\n return {\n ...acc,\n [key]: snakeCaseKeys({ data: { service_channel_identifier: value } }),\n };\n }, {});\n\n return contextEntries as Record<string, SerialisedEvent>;\n};\n\nexport const updateIdentityContext = (\n contexts: Record<string, SerialisedEvent>,\n uid: unknown,\n): Record<string, SerialisedEvent> => {\n const index = Object.keys(contexts).findIndex(ctx =>\n contexts[ctx].schema?.includes(\"identity_context\"),\n );\n if (index > -1) {\n const key = Object.keys(contexts)[index];\n return {\n ...contexts,\n [key]: {\n ...contexts[key],\n data: {\n ...contexts[key].data,\n domain_userid: uid,\n },\n },\n };\n }\n return contexts;\n};\n\nexport const makeContexts = (\n keys: string[],\n config: Record<string, SerialisedEvent>,\n): SerialisedEvent[] => (keys || []).map(key => config[key]);\n"],
4
+ "sourcesContent": ["import type {\n PageViewEvent,\n StructuredEvent,\n TrackerConfiguration,\n} from \"@snowplow/browser-tracker\";\nimport {\n newTracker,\n setCookiePath,\n setUserId,\n trackPageView,\n trackSelfDescribingEvent,\n trackStructEvent,\n} from \"@snowplow/browser-tracker\";\nimport { GaCookiesPlugin } from \"@snowplow/browser-plugin-ga-cookies\";\nimport { makeContexts, updateIdentityContext } from \"./contexts\";\nimport type { EventDefinition, SerialisedEvent, TrackingProps } from \"./types\";\n\nexport type FrontOfficeStructuredEvent = StructuredEvent & {\n serviceChannelIdentifier: string;\n};\n\n/**\n * This class is an abstraction which wraps Snowplow\n * and exposes common methods with other services:\n * - trackEvent : sends a standard payload\n * - trackUnstructEvent : sends a payload for custom schema\n */\nexport class Snowplow {\n avalancheTrackerName = \"sb-ava\";\n\n bronzeAvalancheTrackerName = \"sb-ava-br\";\n\n pvAvalancheTrackerName = \"sb-ava-pv\";\n\n uid: unknown = \"\";\n\n trackPageView: boolean = false;\n\n contexts: Record<string, SerialisedEvent> = {};\n\n pvContext: SerialisedEvent[] = [];\n\n structContext: SerialisedEvent[] = [];\n\n serverData: Record<string, unknown> = {};\n\n eventHandlers: Record<string, (params?: Record<string, unknown>) => void> =\n {};\n\n static instance: Snowplow | undefined;\n\n constructor(props?: TrackingProps) {\n if (!props) return;\n\n const {\n appId,\n cookieDomain,\n avalancheCollector,\n eventMethod,\n uid,\n postPath,\n trackPageView: tpv,\n } = props;\n this.uid = uid;\n this.trackPageView = tpv;\n this.serverData = props?.pageViewContext?.data || {};\n\n // Set options\n const stateStorageStrategy = \"cookieAndLocalStorage\";\n const baseOptions: TrackerConfiguration = {\n appId,\n cookieDomain,\n eventMethod,\n stateStorageStrategy,\n postPath,\n };\n // Initialize trackers\n newTracker(this.avalancheTrackerName, avalancheCollector, baseOptions);\n\n newTracker(\n this.bronzeAvalancheTrackerName,\n avalancheCollector,\n baseOptions,\n );\n\n // Page view tracker\n newTracker(this.pvAvalancheTrackerName, avalancheCollector, {\n ...baseOptions,\n eventMethod: eventMethod === \"post\" ? \"beacon\" : eventMethod,\n plugins: [GaCookiesPlugin()],\n });\n\n setCookiePath(\"/\");\n if (uid) {\n setUserId(uid);\n }\n // Create a singleton instance\n Snowplow.instance = this;\n }\n\n setContexts(contexts: Record<string, SerialisedEvent>) {\n this.contexts = updateIdentityContext(contexts, this.uid);\n this.pvContext = makeContexts(\n [\n \"pageViewContext\",\n \"distributionChannelContext\",\n \"serviceChannelContext\",\n ],\n this.contexts,\n );\n this.structContext = makeContexts(\n [\"distributionChannelContext\", \"serviceChannelContext\"],\n this.contexts,\n );\n return this;\n }\n\n // Send a page view event\n trackView(event?: PageViewEvent) {\n if (this.trackPageView) {\n trackPageView({ ...event, context: this.pvContext }, [\n this.pvAvalancheTrackerName,\n ]);\n }\n return this;\n }\n\n // Send a structured event with contexts\n trackEvent(event: StructuredEvent) {\n trackStructEvent({ ...event, context: this.structContext }, [\n this.bronzeAvalancheTrackerName,\n ]);\n return this;\n }\n\n // Send a custom event with defined schema and optional contexts\n trackUnstructEvent(event: SerialisedEvent, contexts?: string[]) {\n if (!event) {\n return this;\n }\n\n if (contexts && Array.isArray(contexts) && contexts.length > 0) {\n // Add context to the event\n const context = makeContexts(contexts, this.contexts);\n trackSelfDescribingEvent({ event, context }, [this.avalancheTrackerName]);\n } else {\n trackSelfDescribingEvent({ event }, [this.avalancheTrackerName]);\n }\n return this;\n }\n\n addEventHandlers(eventDefinitions: EventDefinition[]) {\n // Add server context to makePayload functions\n const context = this.serverData;\n\n eventDefinitions.forEach(({ name, type, makePayload, contexts }) => {\n // Convert type into relevant function\n if (type === \"structured\") {\n this.addEventHandler(name, (params?: Record<string, unknown>) => {\n void this.trackEvent(\n makePayload({\n ...params,\n context,\n }) as StructuredEvent,\n );\n });\n } else {\n this.addEventHandler(name, (params?: Record<string, unknown>) => {\n const payload = makePayload({\n ...params,\n context,\n }) as SerialisedEvent;\n\n if (contexts && Array.isArray(contexts) && contexts.length > 0) {\n void this.trackUnstructEvent(payload, contexts);\n } else {\n void this.trackUnstructEvent(payload);\n }\n });\n }\n });\n return this;\n }\n\n private addEventHandler(\n name: string,\n handler: (params?: Record<string, unknown>) => void,\n ) {\n this.eventHandlers[name] = handler;\n return this;\n }\n\n private removeEventHandler(name: string) {\n delete this.eventHandlers[name];\n return this;\n }\n\n trigger(name: string, params?: Record<string, unknown>) {\n if (!this.serverData || Object.keys(this.serverData).length === 0) {\n return this;\n }\n\n const handler = this.eventHandlers[name];\n\n if (\n Object.prototype.hasOwnProperty.call(this.eventHandlers, name) &&\n typeof handler === \"function\"\n ) {\n handler(params);\n }\n return this;\n }\n\n static getInstance(props?: TrackingProps) {\n if (!Snowplow.instance) {\n Snowplow.instance = new Snowplow(props);\n }\n return Snowplow.instance;\n }\n}\n", "import { snakeCaseKeys } from \"../utils\";\nimport type { SerialisedEvent, TrackingProps } from \"./types\";\n\nexport const getContexts = (\n config: TrackingProps,\n): Record<string, SerialisedEvent> => {\n // Create an object that only contains Context keys\n // and snake_case the keys\n const contextEntries = Object.entries(config || {})\n .filter(([key]) => key.includes(\"Context\") && key !== \"includeGAContext\")\n .reduce((acc, [key, value]) => {\n if (typeof value === \"object\") {\n return { ...acc, [key]: snakeCaseKeys({ ...value }) };\n }\n return {\n ...acc,\n [key]: snakeCaseKeys({ data: { service_channel_identifier: value } }),\n };\n }, {});\n\n return contextEntries;\n};\n\nexport const updateIdentityContext = (\n contexts: Record<string, SerialisedEvent>,\n uid: unknown,\n): Record<string, SerialisedEvent> => {\n const index = Object.keys(contexts).findIndex(ctx =>\n contexts[ctx].schema?.includes(\"identity_context\"),\n );\n if (index > -1) {\n const key = Object.keys(contexts)[index];\n return {\n ...contexts,\n [key]: {\n ...contexts[key],\n data: {\n ...contexts[key].data,\n domain_userid: uid,\n },\n },\n };\n }\n return contexts;\n};\n\nexport const makeContexts = (\n keys: string[],\n config: Record<string, SerialisedEvent>,\n): SerialisedEvent[] => (keys || []).map(key => config[key]);\n"],
5
5
  "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1066,6 +1066,33 @@ var questionnaireEventDefinitions = [
1066
1066
  property: window?.location?.href ?? ""
1067
1067
  };
1068
1068
  }
1069
+ },
1070
+ {
1071
+ name: "usPhoneNumberSmsConsentSkipped",
1072
+ type: "structured",
1073
+ makePayload: () => {
1074
+ return {
1075
+ category: "us_phone_number_modal",
1076
+ action: "sms_consent_skipped",
1077
+ property: window?.location?.href ?? ""
1078
+ };
1079
+ }
1080
+ },
1081
+ {
1082
+ name: "usPhoneNumberSubmitted",
1083
+ type: "structured",
1084
+ makePayload: (params) => {
1085
+ const { consentLabel, viewName } = params;
1086
+ const consent = consentLabel?.trim();
1087
+ const consentName = consent === "Yes, I agree" ? "consent_given" : consent || "no_consent";
1088
+ const name = viewName?.trim() || "no_view";
1089
+ return {
1090
+ category: "us_phone_number_modal",
1091
+ action: "submitted",
1092
+ label: `${consentName}_from_${name}`,
1093
+ property: window?.location?.href ?? ""
1094
+ };
1095
+ }
1069
1096
  }
1070
1097
  ];
1071
1098