@simplybusiness/services 0.21.5 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/dist/cjs/index.js +1198 -17
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/index.js +1193 -4
- package/package.json +7 -6
- package/src/snowplow/event-definitions/intervention.ts +2 -2
- package/dist/cjs/address-lookup/index.js +0 -98
- package/dist/cjs/address-lookup/index.js.map +0 -1
- package/dist/cjs/address-lookup/types.js +0 -7
- package/dist/cjs/address-lookup/types.js.map +0 -1
- package/dist/cjs/airbrake/index.js +0 -45
- package/dist/cjs/airbrake/index.js.map +0 -1
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/mocks/eventDefinitions.js +0 -90
- package/dist/cjs/mocks/eventDefinitions.js.map +0 -1
- package/dist/cjs/mocks/scripts-mock.js +0 -59
- package/dist/cjs/mocks/scripts-mock.js.map +0 -1
- package/dist/cjs/mocks/snowplowBrowserTrackerMock.js +0 -7
- package/dist/cjs/mocks/snowplowBrowserTrackerMock.js.map +0 -1
- package/dist/cjs/snowplow/Snowplow.js +0 -174
- package/dist/cjs/snowplow/Snowplow.js.map +0 -1
- package/dist/cjs/snowplow/SnowplowContext.js +0 -61
- package/dist/cjs/snowplow/SnowplowContext.js.map +0 -1
- package/dist/cjs/snowplow/constants.js +0 -13
- package/dist/cjs/snowplow/constants.js.map +0 -1
- package/dist/cjs/snowplow/contexts.js +0 -68
- package/dist/cjs/snowplow/contexts.js.map +0 -1
- package/dist/cjs/snowplow/event-definitions/base.js +0 -56
- package/dist/cjs/snowplow/event-definitions/base.js.map +0 -1
- package/dist/cjs/snowplow/event-definitions/index.js +0 -65
- package/dist/cjs/snowplow/event-definitions/index.js.map +0 -1
- package/dist/cjs/snowplow/event-definitions/intervention.js +0 -33
- package/dist/cjs/snowplow/event-definitions/intervention.js.map +0 -1
- package/dist/cjs/snowplow/event-definitions/personalised_cover.js +0 -122
- package/dist/cjs/snowplow/event-definitions/personalised_cover.js.map +0 -1
- package/dist/cjs/snowplow/event-definitions/qcp.js +0 -348
- package/dist/cjs/snowplow/event-definitions/qcp.js.map +0 -1
- package/dist/cjs/snowplow/event-definitions/questionnaire.js +0 -115
- package/dist/cjs/snowplow/event-definitions/questionnaire.js.map +0 -1
- package/dist/cjs/snowplow/event-definitions/redaction.js +0 -154
- package/dist/cjs/snowplow/event-definitions/redaction.js.map +0 -1
- package/dist/cjs/snowplow/event-definitions/referral.js +0 -37
- package/dist/cjs/snowplow/event-definitions/referral.js.map +0 -1
- package/dist/cjs/snowplow/getSnowplowConfig.js +0 -16
- package/dist/cjs/snowplow/getSnowplowConfig.js.map +0 -1
- package/dist/cjs/snowplow/index.js +0 -25
- package/dist/cjs/snowplow/index.js.map +0 -1
- package/dist/cjs/snowplow/types.js +0 -6
- package/dist/cjs/snowplow/types.js.map +0 -1
- package/dist/cjs/utils/index.js +0 -21
- package/dist/cjs/utils/index.js.map +0 -1
- package/dist/cjs/utils/isObject.js +0 -15
- package/dist/cjs/utils/isObject.js.map +0 -1
- package/dist/cjs/utils/testUtils.js +0 -43
- package/dist/cjs/utils/testUtils.js.map +0 -1
- package/dist/cjs/utils/text.js +0 -45
- package/dist/cjs/utils/text.js.map +0 -1
- package/dist/esm/address-lookup/index.js +0 -88
- package/dist/esm/address-lookup/index.js.map +0 -1
- package/dist/esm/address-lookup/types.js +0 -5
- package/dist/esm/address-lookup/types.js.map +0 -1
- package/dist/esm/airbrake/index.js +0 -35
- package/dist/esm/airbrake/index.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/mocks/eventDefinitions.js +0 -80
- package/dist/esm/mocks/eventDefinitions.js.map +0 -1
- package/dist/esm/mocks/scripts-mock.js +0 -49
- package/dist/esm/mocks/scripts-mock.js.map +0 -1
- package/dist/esm/mocks/snowplowBrowserTrackerMock.js +0 -6
- package/dist/esm/mocks/snowplowBrowserTrackerMock.js.map +0 -1
- package/dist/esm/snowplow/Snowplow.js +0 -169
- package/dist/esm/snowplow/Snowplow.js.map +0 -1
- package/dist/esm/snowplow/SnowplowContext.js +0 -43
- package/dist/esm/snowplow/SnowplowContext.js.map +0 -1
- package/dist/esm/snowplow/constants.js +0 -3
- package/dist/esm/snowplow/constants.js.map +0 -1
- package/dist/esm/snowplow/contexts.js +0 -47
- package/dist/esm/snowplow/contexts.js.map +0 -1
- package/dist/esm/snowplow/event-definitions/base.js +0 -66
- package/dist/esm/snowplow/event-definitions/base.js.map +0 -1
- package/dist/esm/snowplow/event-definitions/index.js +0 -36
- package/dist/esm/snowplow/event-definitions/index.js.map +0 -1
- package/dist/esm/snowplow/event-definitions/intervention.js +0 -23
- package/dist/esm/snowplow/event-definitions/intervention.js.map +0 -1
- package/dist/esm/snowplow/event-definitions/personalised_cover.js +0 -131
- package/dist/esm/snowplow/event-definitions/personalised_cover.js.map +0 -1
- package/dist/esm/snowplow/event-definitions/qcp.js +0 -339
- package/dist/esm/snowplow/event-definitions/qcp.js.map +0 -1
- package/dist/esm/snowplow/event-definitions/questionnaire.js +0 -106
- package/dist/esm/snowplow/event-definitions/questionnaire.js.map +0 -1
- package/dist/esm/snowplow/event-definitions/redaction.js +0 -144
- package/dist/esm/snowplow/event-definitions/redaction.js.map +0 -1
- package/dist/esm/snowplow/event-definitions/referral.js +0 -28
- package/dist/esm/snowplow/event-definitions/referral.js.map +0 -1
- package/dist/esm/snowplow/getSnowplowConfig.js +0 -7
- package/dist/esm/snowplow/getSnowplowConfig.js.map +0 -1
- package/dist/esm/snowplow/index.js +0 -8
- package/dist/esm/snowplow/index.js.map +0 -1
- package/dist/esm/snowplow/types.js +0 -3
- package/dist/esm/snowplow/types.js.map +0 -1
- package/dist/esm/utils/index.js +0 -4
- package/dist/esm/utils/index.js.map +0 -1
- package/dist/esm/utils/isObject.js +0 -5
- package/dist/esm/utils/isObject.js.map +0 -1
- package/dist/esm/utils/testUtils.js +0 -26
- package/dist/esm/utils/testUtils.js.map +0 -1
- package/dist/esm/utils/text.js +0 -25
- package/dist/esm/utils/text.js.map +0 -1
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
function _define_property(obj, key, value) {
|
|
2
|
-
if (key in obj) {
|
|
3
|
-
Object.defineProperty(obj, key, {
|
|
4
|
-
value: value,
|
|
5
|
-
enumerable: true,
|
|
6
|
-
configurable: true,
|
|
7
|
-
writable: true
|
|
8
|
-
});
|
|
9
|
-
} else {
|
|
10
|
-
obj[key] = value;
|
|
11
|
-
}
|
|
12
|
-
return obj;
|
|
13
|
-
}
|
|
14
|
-
import { newTracker, setCookiePath, setUserId, trackPageView, trackSelfDescribingEvent, trackStructEvent } from "@snowplow/browser-tracker";
|
|
15
|
-
import { makeContexts, updateIdentityContext } from "./contexts";
|
|
16
|
-
/**
|
|
17
|
-
* This class is an abstraction which wraps Snowplow
|
|
18
|
-
* and exposes common methods with other services:
|
|
19
|
-
* - trackEvent : sends a standard payload
|
|
20
|
-
* - trackUnstructEvent : sends a payload for custom schema
|
|
21
|
-
*/ export class Snowplow {
|
|
22
|
-
setContexts(contexts) {
|
|
23
|
-
this.contexts = updateIdentityContext(contexts, this.uid);
|
|
24
|
-
this.pvContext = Object.values(this.contexts);
|
|
25
|
-
this.structContext = makeContexts([
|
|
26
|
-
"distributionChannelContext",
|
|
27
|
-
"serviceChannelContext"
|
|
28
|
-
], this.contexts);
|
|
29
|
-
return this;
|
|
30
|
-
}
|
|
31
|
-
// Send a page view event
|
|
32
|
-
async trackView(event) {
|
|
33
|
-
if (this.trackPageView) {
|
|
34
|
-
await trackPageView({
|
|
35
|
-
...event,
|
|
36
|
-
context: this.pvContext
|
|
37
|
-
}, [
|
|
38
|
-
this.avalancheTrackerName
|
|
39
|
-
]);
|
|
40
|
-
}
|
|
41
|
-
return this;
|
|
42
|
-
}
|
|
43
|
-
// Send a structured event with contexts
|
|
44
|
-
async trackEvent(event) {
|
|
45
|
-
await trackStructEvent({
|
|
46
|
-
...event,
|
|
47
|
-
context: this.structContext
|
|
48
|
-
}, [
|
|
49
|
-
this.bronzeAvalancheTrackerName
|
|
50
|
-
]);
|
|
51
|
-
return this;
|
|
52
|
-
}
|
|
53
|
-
// Send a custom event with defined schema and optional contexts
|
|
54
|
-
async trackUnstructEvent(event, contexts) {
|
|
55
|
-
if (!event) {
|
|
56
|
-
return this;
|
|
57
|
-
}
|
|
58
|
-
if (contexts && Array.isArray(contexts) && contexts.length > 0) {
|
|
59
|
-
// Add context to the event
|
|
60
|
-
const context = makeContexts(contexts, this.contexts);
|
|
61
|
-
await trackSelfDescribingEvent({
|
|
62
|
-
event,
|
|
63
|
-
context
|
|
64
|
-
}, [
|
|
65
|
-
this.avalancheTrackerName
|
|
66
|
-
]);
|
|
67
|
-
} else {
|
|
68
|
-
await trackSelfDescribingEvent({
|
|
69
|
-
event
|
|
70
|
-
}, [
|
|
71
|
-
this.avalancheTrackerName
|
|
72
|
-
]);
|
|
73
|
-
}
|
|
74
|
-
return this;
|
|
75
|
-
}
|
|
76
|
-
addEventHandlers(eventDefinitions) {
|
|
77
|
-
// Add server context to makePayload functions
|
|
78
|
-
const context = this.serverData;
|
|
79
|
-
eventDefinitions.forEach(({ name, type, makePayload, contexts })=>{
|
|
80
|
-
// Convert type into relevant function
|
|
81
|
-
if (type === "structured") {
|
|
82
|
-
this.addEventHandler(name, (params)=>{
|
|
83
|
-
this.trackEvent(makePayload({
|
|
84
|
-
...params,
|
|
85
|
-
context
|
|
86
|
-
}));
|
|
87
|
-
});
|
|
88
|
-
} else {
|
|
89
|
-
this.addEventHandler(name, (params)=>{
|
|
90
|
-
const payload = makePayload({
|
|
91
|
-
...params,
|
|
92
|
-
context
|
|
93
|
-
});
|
|
94
|
-
if (contexts && Array.isArray(contexts) && contexts.length > 0) {
|
|
95
|
-
this.trackUnstructEvent(payload, contexts);
|
|
96
|
-
} else {
|
|
97
|
-
this.trackUnstructEvent(payload);
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
return this;
|
|
103
|
-
}
|
|
104
|
-
addEventHandler(name, handler) {
|
|
105
|
-
this.eventHandlers[name] = handler;
|
|
106
|
-
return this;
|
|
107
|
-
}
|
|
108
|
-
removeEventHandler(name) {
|
|
109
|
-
delete this.eventHandlers[name];
|
|
110
|
-
return this;
|
|
111
|
-
}
|
|
112
|
-
trigger(name, params) {
|
|
113
|
-
const handler = this.eventHandlers[name];
|
|
114
|
-
if (Object.prototype.hasOwnProperty.call(this.eventHandlers, name) && typeof handler === "function") {
|
|
115
|
-
handler(params);
|
|
116
|
-
}
|
|
117
|
-
return this;
|
|
118
|
-
}
|
|
119
|
-
static getInstance(props) {
|
|
120
|
-
if (!Snowplow.instance) {
|
|
121
|
-
Snowplow.instance = new Snowplow(props);
|
|
122
|
-
}
|
|
123
|
-
return Snowplow.instance;
|
|
124
|
-
}
|
|
125
|
-
constructor(props){
|
|
126
|
-
var _props_pageViewContext;
|
|
127
|
-
_define_property(this, "avalancheTrackerName", "sb-ava");
|
|
128
|
-
_define_property(this, "bronzeAvalancheTrackerName", "sb-ava-br");
|
|
129
|
-
_define_property(this, "pvAvalancheTrackerName", "sb-ava-pv");
|
|
130
|
-
_define_property(this, "uid", "");
|
|
131
|
-
_define_property(this, "trackPageView", false);
|
|
132
|
-
_define_property(this, "contexts", {});
|
|
133
|
-
_define_property(this, "pvContext", []);
|
|
134
|
-
_define_property(this, "structContext", []);
|
|
135
|
-
_define_property(this, "serverData", {});
|
|
136
|
-
_define_property(this, "eventHandlers", {});
|
|
137
|
-
if (!props) return;
|
|
138
|
-
const { appId, cookieDomain, avalancheCollector, eventMethod, uid, postPath, trackPageView: tpv } = props;
|
|
139
|
-
this.uid = uid;
|
|
140
|
-
this.trackPageView = tpv;
|
|
141
|
-
this.serverData = (props === null || props === void 0 ? void 0 : (_props_pageViewContext = props.pageViewContext) === null || _props_pageViewContext === void 0 ? void 0 : _props_pageViewContext.data) || {};
|
|
142
|
-
// Set options
|
|
143
|
-
const stateStorageStrategy = "cookieAndLocalStorage";
|
|
144
|
-
const baseOptions = {
|
|
145
|
-
appId,
|
|
146
|
-
cookieDomain,
|
|
147
|
-
eventMethod,
|
|
148
|
-
stateStorageStrategy,
|
|
149
|
-
postPath
|
|
150
|
-
};
|
|
151
|
-
// Initialize trackers
|
|
152
|
-
newTracker(this.avalancheTrackerName, avalancheCollector, baseOptions);
|
|
153
|
-
newTracker(this.bronzeAvalancheTrackerName, avalancheCollector, baseOptions);
|
|
154
|
-
// Page view tracker
|
|
155
|
-
newTracker(this.pvAvalancheTrackerName, avalancheCollector, {
|
|
156
|
-
...baseOptions,
|
|
157
|
-
eventMethod: eventMethod === "post" ? "beacon" : eventMethod
|
|
158
|
-
});
|
|
159
|
-
setCookiePath("/");
|
|
160
|
-
if (uid) {
|
|
161
|
-
setUserId(uid);
|
|
162
|
-
}
|
|
163
|
-
// Create a singleton instance
|
|
164
|
-
Snowplow.instance = this;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
_define_property(Snowplow, "instance", void 0);
|
|
168
|
-
|
|
169
|
-
//# sourceMappingURL=Snowplow.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/snowplow/Snowplow.ts"],"sourcesContent":["import {\n PageViewEvent,\n StructuredEvent,\n TrackerConfiguration,\n newTracker,\n setCookiePath,\n setUserId,\n trackPageView,\n trackSelfDescribingEvent,\n trackStructEvent,\n} from \"@snowplow/browser-tracker\";\nimport { makeContexts, updateIdentityContext } from \"./contexts\";\nimport { 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 async trackView(event?: PageViewEvent) {\n if (this.trackPageView) {\n await trackPageView({ ...event, context: this.pvContext }, [\n this.avalancheTrackerName,\n ]);\n }\n return this;\n }\n\n // Send a structured event with contexts\n async trackEvent(event: StructuredEvent) {\n await 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 async 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\n await trackSelfDescribingEvent({ event, context }, [\n this.avalancheTrackerName,\n ]);\n } else {\n await 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 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 this.trackUnstructEvent(payload, contexts);\n } else {\n 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"],"names":["newTracker","setCookiePath","setUserId","trackPageView","trackSelfDescribingEvent","trackStructEvent","makeContexts","updateIdentityContext","Snowplow","setContexts","contexts","uid","pvContext","Object","values","structContext","trackView","event","context","avalancheTrackerName","trackEvent","bronzeAvalancheTrackerName","trackUnstructEvent","Array","isArray","length","addEventHandlers","eventDefinitions","serverData","forEach","name","type","makePayload","addEventHandler","params","payload","handler","eventHandlers","removeEventHandler","trigger","prototype","hasOwnProperty","call","getInstance","props","instance","constructor","pvAvalancheTrackerName","appId","cookieDomain","avalancheCollector","eventMethod","postPath","tpv","pageViewContext","data","stateStorageStrategy","baseOptions"],"mappings":"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"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-unused-vars */ import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { createContext, useContext, useEffect, useMemo, useRef, useState } from "react";
|
|
3
|
-
import { getContexts } from "./contexts";
|
|
4
|
-
import { eventDefinitions } from "./event-definitions";
|
|
5
|
-
import { Snowplow } from "./Snowplow";
|
|
6
|
-
const SnowplowContext = /*#__PURE__*/ createContext(null);
|
|
7
|
-
export const SnowplowProvider = ({ scripts, children })=>{
|
|
8
|
-
const [config, _setConfig] = useState(scripts);
|
|
9
|
-
const snowplow = useRef(Snowplow.getInstance(config));
|
|
10
|
-
// Attach event handlers and set contexts
|
|
11
|
-
useEffect(()=>{
|
|
12
|
-
if (snowplow.current && scripts) {
|
|
13
|
-
const contexts = getContexts(config);
|
|
14
|
-
snowplow.current.setContexts(contexts).addEventHandlers(eventDefinitions);
|
|
15
|
-
// Send page view event
|
|
16
|
-
if (config.trackPageView) snowplow.current.trackView();
|
|
17
|
-
}
|
|
18
|
-
}, [
|
|
19
|
-
config,
|
|
20
|
-
snowplow,
|
|
21
|
-
scripts
|
|
22
|
-
]);
|
|
23
|
-
const value = useMemo(()=>({
|
|
24
|
-
config,
|
|
25
|
-
snowplow: snowplow.current
|
|
26
|
-
}), [
|
|
27
|
-
config,
|
|
28
|
-
snowplow
|
|
29
|
-
]);
|
|
30
|
-
return /*#__PURE__*/ _jsx(SnowplowContext.Provider, {
|
|
31
|
-
value: value,
|
|
32
|
-
children: children
|
|
33
|
-
});
|
|
34
|
-
};
|
|
35
|
-
export function useSnowplowContext() {
|
|
36
|
-
const context = useContext(SnowplowContext);
|
|
37
|
-
if (!context) {
|
|
38
|
-
throw new Error("useSnowplowContext must be used inside a `SnowplowProvider`");
|
|
39
|
-
}
|
|
40
|
-
return context;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
//# sourceMappingURL=SnowplowContext.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/snowplow/SnowplowContext.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport {\n createContext,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport { getContexts } from \"./contexts\";\nimport { eventDefinitions } from \"./event-definitions\";\nimport { Snowplow } from \"./Snowplow\";\nimport { 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 snowplow = useRef<Snowplow>(Snowplow.getInstance(config));\n\n // Attach event handlers and set contexts\n useEffect(() => {\n if (snowplow.current && scripts) {\n const contexts = getContexts(config);\n\n snowplow.current\n .setContexts(contexts)\n .addEventHandlers(eventDefinitions as EventDefinition[]);\n // Send page view event\n if (config.trackPageView) snowplow.current.trackView();\n }\n }, [config, snowplow, scripts]);\n\n const value: SnowplowContextInterface = useMemo(\n () => ({\n config,\n snowplow: snowplow.current,\n }),\n [config, snowplow],\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"],"names":["createContext","useContext","useEffect","useMemo","useRef","useState","getContexts","eventDefinitions","Snowplow","SnowplowContext","SnowplowProvider","scripts","children","config","_setConfig","snowplow","getInstance","current","contexts","setContexts","addEventHandlers","trackPageView","trackView","value","Provider","useSnowplowContext","context","Error"],"mappings":"AAAA,oDAAoD;AACpD,SACEA,aAAa,EACbC,UAAU,EACVC,SAAS,EACTC,OAAO,EACPC,MAAM,EACNC,QAAQ,QAEH,QAAQ;AACf,SAASC,WAAW,QAAQ,aAAa;AACzC,SAASC,gBAAgB,QAAQ,sBAAsB;AACvD,SAASC,QAAQ,QAAQ,aAAa;AAQtC,MAAMC,gCAAkBT,cAA+C;AAOvE,OAAO,MAAMU,mBAAmB,CAAC,EAAEC,OAAO,EAAEC,QAAQ,EAAiB;IACnE,MAAM,CAACC,QAAQC,WAAW,GAAGT,SAAwBM;IACrD,MAAMI,WAAWX,OAAiBI,SAASQ,WAAW,CAACH;IAEvD,yCAAyC;IACzCX,UAAU;QACR,IAAIa,SAASE,OAAO,IAAIN,SAAS;YAC/B,MAAMO,WAAWZ,YAAYO;YAE7BE,SAASE,OAAO,CACbE,WAAW,CAACD,UACZE,gBAAgB,CAACb;YACpB,uBAAuB;YACvB,IAAIM,OAAOQ,aAAa,EAAEN,SAASE,OAAO,CAACK,SAAS;QACtD;IACF,GAAG;QAACT;QAAQE;QAAUJ;KAAQ;IAE9B,MAAMY,QAAkCpB,QACtC,IAAO,CAAA;YACLU;YACAE,UAAUA,SAASE,OAAO;QAC5B,CAAA,GACA;QAACJ;QAAQE;KAAS;IAGpB,qBACE,KAACN,gBAAgBe,QAAQ;QAACD,OAAOA;kBAC9BX;;AAGP,EAAE;AAEF,OAAO,SAASa;IACd,MAAMC,UAAUzB,WAAWQ;IAE3B,IAAI,CAACiB,SAAS;QACZ,MAAM,IAAIC,MACR;IAEJ;IACA,OAAOD;AACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/snowplow/constants.ts"],"sourcesContent":["export const DELIMITER = \"|\"; // Used to flatten arrays\n"],"names":["DELIMITER"],"mappings":"AAAA,OAAO,MAAMA,YAAY,IAAI,CAAC,yBAAyB"}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { snakeCaseKeys } from "../utils";
|
|
2
|
-
export const getContexts = (config)=>{
|
|
3
|
-
// Create an object that only contains Context keys
|
|
4
|
-
// and snake_case the keys
|
|
5
|
-
const contextEntries = Object.entries(config || {}).filter(([key])=>key.includes("Context") && key !== "includeGAContext").reduce((acc, [key, value])=>{
|
|
6
|
-
if (typeof value === "object") {
|
|
7
|
-
return {
|
|
8
|
-
...acc,
|
|
9
|
-
[key]: snakeCaseKeys({
|
|
10
|
-
...value
|
|
11
|
-
})
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
return {
|
|
15
|
-
...acc,
|
|
16
|
-
[key]: snakeCaseKeys({
|
|
17
|
-
data: {
|
|
18
|
-
service_channel_identifier: value
|
|
19
|
-
}
|
|
20
|
-
})
|
|
21
|
-
};
|
|
22
|
-
}, {});
|
|
23
|
-
return contextEntries;
|
|
24
|
-
};
|
|
25
|
-
export const updateIdentityContext = (contexts, uid)=>{
|
|
26
|
-
const index = Object.keys(contexts).findIndex((ctx)=>{
|
|
27
|
-
var _contexts_ctx_schema;
|
|
28
|
-
return (_contexts_ctx_schema = contexts[ctx].schema) === null || _contexts_ctx_schema === void 0 ? void 0 : _contexts_ctx_schema.includes("identity_context");
|
|
29
|
-
});
|
|
30
|
-
if (index > -1) {
|
|
31
|
-
const key = Object.keys(contexts)[index];
|
|
32
|
-
return {
|
|
33
|
-
...contexts,
|
|
34
|
-
[key]: {
|
|
35
|
-
...contexts[key],
|
|
36
|
-
data: {
|
|
37
|
-
...contexts[key].data,
|
|
38
|
-
domain_userid: uid
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
return contexts;
|
|
44
|
-
};
|
|
45
|
-
export const makeContexts = (keys, config)=>(keys || []).map((key)=>config[key]);
|
|
46
|
-
|
|
47
|
-
//# sourceMappingURL=contexts.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/snowplow/contexts.ts"],"sourcesContent":["import { snakeCaseKeys } from \"../utils\";\nimport { 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"],"names":["snakeCaseKeys","getContexts","config","contextEntries","Object","entries","filter","key","includes","reduce","acc","value","data","service_channel_identifier","updateIdentityContext","contexts","uid","index","keys","findIndex","ctx","schema","domain_userid","makeContexts","map"],"mappings":"AAAA,SAASA,aAAa,QAAQ,WAAW;AAGzC,OAAO,MAAMC,cAAc,CACzBC;IAEA,mDAAmD;IACnD,0BAA0B;IAC1B,MAAMC,iBAAiBC,OAAOC,OAAO,CAACH,UAAU,CAAC,GAC9CI,MAAM,CAAC,CAAC,CAACC,IAAI,GAAKA,IAAIC,QAAQ,CAAC,cAAcD,QAAQ,oBACrDE,MAAM,CAAC,CAACC,KAAK,CAACH,KAAKI,MAAM;QACxB,IAAI,OAAOA,UAAU,UAAU;YAC7B,OAAO;gBAAE,GAAGD,GAAG;gBAAE,CAACH,IAAI,EAAEP,cAAc;oBAAE,GAAGW,KAAK;gBAAC;YAAG;QACtD;QACA,OAAO;YACL,GAAGD,GAAG;YACN,CAACH,IAAI,EAAEP,cAAc;gBAAEY,MAAM;oBAAEC,4BAA4BF;gBAAM;YAAE;QACrE;IACF,GAAG,CAAC;IAEN,OAAOR;AACT,EAAE;AAEF,OAAO,MAAMW,wBAAwB,CACnCC,UACAC;IAEA,MAAMC,QAAQb,OAAOc,IAAI,CAACH,UAAUI,SAAS,CAACC,CAAAA;YAC5CL;gBAAAA,uBAAAA,QAAQ,CAACK,IAAI,CAACC,MAAM,cAApBN,2CAAAA,qBAAsBP,QAAQ,CAAC;;IAEjC,IAAIS,QAAQ,CAAC,GAAG;QACd,MAAMV,MAAMH,OAAOc,IAAI,CAACH,SAAS,CAACE,MAAM;QACxC,OAAO;YACL,GAAGF,QAAQ;YACX,CAACR,IAAI,EAAE;gBACL,GAAGQ,QAAQ,CAACR,IAAI;gBAChBK,MAAM;oBACJ,GAAGG,QAAQ,CAACR,IAAI,CAACK,IAAI;oBACrBU,eAAeN;gBACjB;YACF;QACF;IACF;IACA,OAAOD;AACT,EAAE;AAEF,OAAO,MAAMQ,eAAe,CAC1BL,MACAhB,SACsB,AAACgB,CAAAA,QAAQ,EAAE,AAAD,EAAGM,GAAG,CAACjB,CAAAA,MAAOL,MAAM,CAACK,IAAI,EAAE"}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Event definitions for Snowplow
|
|
3
|
-
* @type {EventDefinition[]}
|
|
4
|
-
* @property {string} name - The name of the event, to use when triggering
|
|
5
|
-
* @property {string} type - The type of the event (structured | unstructured)
|
|
6
|
-
* @property {makePayload} makePayload
|
|
7
|
-
* - Function that creates the payload for the event;
|
|
8
|
-
* - Allows optional params object to be passed in
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* Parent
|
|
12
|
-
* import { getSnowplowConfig, SnowplowProvider } from "@simplybusiness/services";
|
|
13
|
-
* const snowplowProps = getSnowplowConfig(pageData);
|
|
14
|
-
* <SnowplowProvider scripts={snowplowProps!}>{children}</SnowplowProvider>
|
|
15
|
-
*
|
|
16
|
-
* Child
|
|
17
|
-
* import { useSnowplowContext } from "@simplybusiness/services";
|
|
18
|
-
* const { snowplow } = useSnowplowContext();
|
|
19
|
-
* const handlerFunction = () => snowplow?.trigger("eventNameHere");
|
|
20
|
-
*/ // Base page events
|
|
21
|
-
export const baseEventDefinitions = [
|
|
22
|
-
// Mobile link in header
|
|
23
|
-
{
|
|
24
|
-
name: "mobileLinkClick",
|
|
25
|
-
type: "structured",
|
|
26
|
-
makePayload: ()=>({
|
|
27
|
-
category: "marketing",
|
|
28
|
-
action: "link-click",
|
|
29
|
-
label: "mobile_call_button",
|
|
30
|
-
property: window.location.href
|
|
31
|
-
})
|
|
32
|
-
},
|
|
33
|
-
// Operating hours link in footer
|
|
34
|
-
{
|
|
35
|
-
name: "operatingHoursClick",
|
|
36
|
-
type: "unstructured",
|
|
37
|
-
makePayload: ()=>({
|
|
38
|
-
schema: "iglu:com.snowplowanalytics.snowplow/unstruct_event/jsonschema/1-0-0",
|
|
39
|
-
data: {
|
|
40
|
-
schema: "iglu:com.simplybusiness/operating_hours_clicked/jsonschema/1-0-2",
|
|
41
|
-
data: {}
|
|
42
|
-
}
|
|
43
|
-
})
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
name: "progressbarClicked",
|
|
47
|
-
type: "unstructured",
|
|
48
|
-
makePayload: (params)=>{
|
|
49
|
-
const { section, context, fromStepIndex, fromStepName, stepIndex, stepName } = params;
|
|
50
|
-
return {
|
|
51
|
-
schema: "iglu:com.simplybusiness/progressbar_clicked/jsonschema/1-1-0",
|
|
52
|
-
data: {
|
|
53
|
-
source_page_index: fromStepIndex,
|
|
54
|
-
source_page_name: fromStepName,
|
|
55
|
-
page_index: stepIndex,
|
|
56
|
-
page_name: stepName,
|
|
57
|
-
site: context.site,
|
|
58
|
-
section_name: section,
|
|
59
|
-
vertical: context.vertical
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
];
|
|
65
|
-
|
|
66
|
-
//# sourceMappingURL=base.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/snowplow/event-definitions/base.ts"],"sourcesContent":["import { 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];\n"],"names":["baseEventDefinitions","name","type","makePayload","category","action","label","property","window","location","href","schema","data","params","section","context","fromStepIndex","fromStepName","stepIndex","stepName","source_page_index","source_page_name","page_index","page_name","site","section_name","vertical"],"mappings":"AACA;;;;;;;;;;;;;;;;;;;CAmBC,GAED,mBAAmB;AACnB,OAAO,MAAMA,uBAA0C;IACrD,wBAAwB;IACxB;QACEC,MAAM;QACNC,MAAM;QACNC,aAAa,IAAO,CAAA;gBAClBC,UAAU;gBACVC,QAAQ;gBACRC,OAAO;gBACPC,UAAUC,OAAOC,QAAQ,CAACC,IAAI;YAChC,CAAA;IACF;IACA,iCAAiC;IACjC;QACET,MAAM;QACNC,MAAM;QACNC,aAAa,IAAO,CAAA;gBAClBQ,QACE;gBACFC,MAAM;oBACJD,QACE;oBACFC,MAAM,CAAC;gBACT;YACF,CAAA;IACF;IACA;QACEX,MAAM;QACNC,MAAM;QACNC,aAAaU,CAAAA;YACX,MAAM,EACJC,OAAO,EACPC,OAAO,EACPC,aAAa,EACbC,YAAY,EACZC,SAAS,EACTC,QAAQ,EACT,GAAGN;YAEJ,OAAO;gBACLF,QAAQ;gBACRC,MAAM;oBACJQ,mBAAmBJ;oBACnBK,kBAAkBJ;oBAClBK,YAAYJ;oBACZK,WAAWJ;oBACXK,MAAMT,QAAQS,IAAI;oBAClBC,cAAcX;oBACdY,UAAUX,QAAQW,QAAQ;gBAC5B;YACF;QACF;IACF;CACD,CAAC"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { baseEventDefinitions } from "./base";
|
|
2
|
-
import { qcpEventDefinitions } from "./qcp";
|
|
3
|
-
import { referralEventDefinitions } from "./referral";
|
|
4
|
-
import { interventionEventDefinitions } from "./intervention";
|
|
5
|
-
import { questionnaireEventDefinitions } from "./questionnaire";
|
|
6
|
-
import { personalisedCoverEventDefinitions } from "./personalised_cover";
|
|
7
|
-
// All events (keep up to date with new files)
|
|
8
|
-
export const eventDefinitions = [
|
|
9
|
-
...baseEventDefinitions,
|
|
10
|
-
...qcpEventDefinitions,
|
|
11
|
-
...referralEventDefinitions,
|
|
12
|
-
...interventionEventDefinitions,
|
|
13
|
-
...questionnaireEventDefinitions,
|
|
14
|
-
...personalisedCoverEventDefinitions
|
|
15
|
-
];
|
|
16
|
-
export const qcpPageEvents = [
|
|
17
|
-
...baseEventDefinitions,
|
|
18
|
-
...qcpEventDefinitions
|
|
19
|
-
];
|
|
20
|
-
export const referralPageEvents = [
|
|
21
|
-
...baseEventDefinitions,
|
|
22
|
-
...referralEventDefinitions
|
|
23
|
-
];
|
|
24
|
-
export const personalisedCoverPageEvents = [
|
|
25
|
-
...baseEventDefinitions,
|
|
26
|
-
...personalisedCoverEventDefinitions
|
|
27
|
-
];
|
|
28
|
-
export const interventionPageEvents = [
|
|
29
|
-
...interventionEventDefinitions
|
|
30
|
-
];
|
|
31
|
-
export const questionnairePageEvents = [
|
|
32
|
-
...questionnaireEventDefinitions
|
|
33
|
-
]; // Create a new export for each kind of page below
|
|
34
|
-
// containing just the subset needed for that page
|
|
35
|
-
|
|
36
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/snowplow/event-definitions/index.ts"],"sourcesContent":["import { baseEventDefinitions } from \"./base\";\nimport { qcpEventDefinitions } from \"./qcp\";\nimport { referralEventDefinitions } from \"./referral\";\nimport { interventionEventDefinitions } from \"./intervention\";\nimport { questionnaireEventDefinitions } from \"./questionnaire\";\nimport { personalisedCoverEventDefinitions } from \"./personalised_cover\";\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];\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\n// Create a new export for each kind of page below\n// containing just the subset needed for that page\n"],"names":["baseEventDefinitions","qcpEventDefinitions","referralEventDefinitions","interventionEventDefinitions","questionnaireEventDefinitions","personalisedCoverEventDefinitions","eventDefinitions","qcpPageEvents","referralPageEvents","personalisedCoverPageEvents","interventionPageEvents","questionnairePageEvents"],"mappings":"AAAA,SAASA,oBAAoB,QAAQ,SAAS;AAC9C,SAASC,mBAAmB,QAAQ,QAAQ;AAC5C,SAASC,wBAAwB,QAAQ,aAAa;AACtD,SAASC,4BAA4B,QAAQ,iBAAiB;AAC9D,SAASC,6BAA6B,QAAQ,kBAAkB;AAChE,SAASC,iCAAiC,QAAQ,uBAAuB;AAEzE,8CAA8C;AAC9C,OAAO,MAAMC,mBAAmB;OAC3BN;OACAC;OACAC;OACAC;OACAC;OACAC;CACJ,CAAC;AAEF,OAAO,MAAME,gBAAgB;OAAIP;OAAyBC;CAAoB,CAAC;AAE/E,OAAO,MAAMO,qBAAqB;OAC7BR;OACAE;CACJ,CAAC;AAEF,OAAO,MAAMO,8BAA8B;OACtCT;OACAK;CACJ,CAAC;AAEF,OAAO,MAAMK,yBAAyB;OAAIP;CAA6B,CAAC;AAIxE,OAAO,MAAMQ,0BAA0B;OAAIP;CAA8B,CAAC,CAE1E,kDAAkD;CAClD,kDAAkD"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export const interventionEventDefinitions = [
|
|
2
|
-
{
|
|
3
|
-
name: "interventionInteraction",
|
|
4
|
-
type: "unstructured",
|
|
5
|
-
makePayload: (params)=>{
|
|
6
|
-
const { interventionId, interventionName, category, userUniqueIdentifier, userUniqueIdentifierType, action, site } = params;
|
|
7
|
-
return {
|
|
8
|
-
schema: "iglu:com.simplybusiness/intervention_interaction/jsonschema/2-1-0",
|
|
9
|
-
data: {
|
|
10
|
-
intervention_id: interventionId,
|
|
11
|
-
intervention_name: interventionName,
|
|
12
|
-
category,
|
|
13
|
-
user_unique_identifier: userUniqueIdentifier,
|
|
14
|
-
user_unique_identifier_type: userUniqueIdentifierType,
|
|
15
|
-
action,
|
|
16
|
-
site
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
];
|
|
22
|
-
|
|
23
|
-
//# sourceMappingURL=intervention.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/snowplow/event-definitions/intervention.ts"],"sourcesContent":["import { EventDefinition } from \"../types\";\n\ntype InterventionIdTypes = \"duid\"; // Add more values as needed\n\nexport type InterventionPayload = {\n interventionId: string;\n interventionName: string;\n category: string;\n userUniqueIdentifier: string;\n userUniqueIdentifierType: InterventionIdTypes;\n action: string;\n site?: string;\n};\n\nexport const interventionEventDefinitions: EventDefinition[] = [\n {\n name: \"interventionInteraction\",\n type: \"unstructured\",\n makePayload: params => {\n const {\n interventionId,\n interventionName,\n category,\n userUniqueIdentifier,\n userUniqueIdentifierType,\n action,\n site,\n } = params as InterventionPayload;\n\n return {\n schema:\n \"iglu:com.simplybusiness/intervention_interaction/jsonschema/2-1-0\",\n data: {\n intervention_id: interventionId,\n intervention_name: interventionName,\n category,\n user_unique_identifier: userUniqueIdentifier,\n user_unique_identifier_type: userUniqueIdentifierType,\n action,\n site,\n },\n };\n },\n },\n];\n"],"names":["interventionEventDefinitions","name","type","makePayload","params","interventionId","interventionName","category","userUniqueIdentifier","userUniqueIdentifierType","action","site","schema","data","intervention_id","intervention_name","user_unique_identifier","user_unique_identifier_type"],"mappings":"AAcA,OAAO,MAAMA,+BAAkD;IAC7D;QACEC,MAAM;QACNC,MAAM;QACNC,aAAaC,CAAAA;YACX,MAAM,EACJC,cAAc,EACdC,gBAAgB,EAChBC,QAAQ,EACRC,oBAAoB,EACpBC,wBAAwB,EACxBC,MAAM,EACNC,IAAI,EACL,GAAGP;YAEJ,OAAO;gBACLQ,QACE;gBACFC,MAAM;oBACJC,iBAAiBT;oBACjBU,mBAAmBT;oBACnBC;oBACAS,wBAAwBR;oBACxBS,6BAA6BR;oBAC7BC;oBACAC;gBACF;YACF;QACF;IACF;CACD,CAAC"}
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
import { redact } from "./redaction";
|
|
2
|
-
import { DELIMITER } from "../constants";
|
|
3
|
-
import { snakeCase } from "../../utils";
|
|
4
|
-
/**
|
|
5
|
-
* Event definitions for Snowplow
|
|
6
|
-
* @type {EventDefinition[]}
|
|
7
|
-
* @property {string} name - The name of the event, to use when triggering
|
|
8
|
-
* @property {string} type - The type of the event (structured | unstructured)
|
|
9
|
-
* @property {makePayload} makePayload
|
|
10
|
-
* - Function that creates the payload for the event;
|
|
11
|
-
* - Allows optional params object to be passed in
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* Parent
|
|
15
|
-
* import { getSnowplowConfig, SnowplowProvider } from "@simplybusiness/services";
|
|
16
|
-
* const snowplowProps = getSnowplowConfig(pageData);
|
|
17
|
-
* <SnowplowProvider scripts={snowplowProps!}>{children}</SnowplowProvider>
|
|
18
|
-
*
|
|
19
|
-
* Child
|
|
20
|
-
* import { useSnowplowContext } from "@simplybusiness/services";
|
|
21
|
-
* const { snowplow } = useSnowplowContext();
|
|
22
|
-
* const handlerFunction = () => snowplow?.trigger("eventNameHere");
|
|
23
|
-
*/ export const personalisedCoverEventDefinitions = [
|
|
24
|
-
{
|
|
25
|
-
name: "seeMoreClicked",
|
|
26
|
-
type: "structured",
|
|
27
|
-
makePayload: (_)=>({
|
|
28
|
-
category: "personalised_cover",
|
|
29
|
-
action: "see_more_clicked",
|
|
30
|
-
label: "page",
|
|
31
|
-
property: "personalised_cover"
|
|
32
|
-
})
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
name: "selectPackageClicked",
|
|
36
|
-
type: "structured",
|
|
37
|
-
makePayload: (_)=>({
|
|
38
|
-
category: "personalised_cover",
|
|
39
|
-
action: "select_package_clicked",
|
|
40
|
-
label: "page",
|
|
41
|
-
property: "personalised_cover"
|
|
42
|
-
})
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
name: "validationShown",
|
|
46
|
-
type: "structured",
|
|
47
|
-
makePayload: (params)=>{
|
|
48
|
-
const { cover, question } = params;
|
|
49
|
-
return {
|
|
50
|
-
category: "personalised_cover",
|
|
51
|
-
action: "validation_shown",
|
|
52
|
-
label: "cover_question",
|
|
53
|
-
property: `${snakeCase(cover)}_${snakeCase(question)}`
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
name: "coverQuestionAnswered",
|
|
59
|
-
type: "unstructured",
|
|
60
|
-
makePayload: (params)=>{
|
|
61
|
-
const { context } = params;
|
|
62
|
-
const { question, answer } = redact(params);
|
|
63
|
-
// Flatten the answer to a delimited string
|
|
64
|
-
const flatAnswer = Array.isArray(answer) ? answer.join(DELIMITER) : answer;
|
|
65
|
-
return {
|
|
66
|
-
schema: "iglu:com.simplybusiness/form_question_answered/jsonschema/1-0-1",
|
|
67
|
-
data: {
|
|
68
|
-
site: context.site,
|
|
69
|
-
page_name: "personalised_cover",
|
|
70
|
-
section_name: "Personalised Cover Questions",
|
|
71
|
-
question,
|
|
72
|
-
answer: flatAnswer
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
name: "limitLinkClicked",
|
|
79
|
-
type: "structured",
|
|
80
|
-
makePayload: (params)=>{
|
|
81
|
-
const { label } = params;
|
|
82
|
-
return {
|
|
83
|
-
category: "personalised_cover",
|
|
84
|
-
action: "limit_link_clicked",
|
|
85
|
-
label,
|
|
86
|
-
property: "link_clicked"
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
name: "limitChanged",
|
|
92
|
-
type: "structured",
|
|
93
|
-
makePayload: (params)=>{
|
|
94
|
-
const { label, limit } = params;
|
|
95
|
-
return {
|
|
96
|
-
category: "personalised_cover",
|
|
97
|
-
action: "limit_changed",
|
|
98
|
-
label,
|
|
99
|
-
property: limit
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
},
|
|
103
|
-
{
|
|
104
|
-
name: "coverPresented",
|
|
105
|
-
type: "structured",
|
|
106
|
-
makePayload: (params)=>{
|
|
107
|
-
const { property } = params;
|
|
108
|
-
return {
|
|
109
|
-
category: "personalised_cover",
|
|
110
|
-
action: "cover_presented",
|
|
111
|
-
label: "cover_name",
|
|
112
|
-
property
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
name: "moreInfoClicked",
|
|
118
|
-
type: "structured",
|
|
119
|
-
makePayload: (params)=>{
|
|
120
|
-
const { property } = params;
|
|
121
|
-
return {
|
|
122
|
-
category: "personalised_cover",
|
|
123
|
-
action: "more_info_clicked",
|
|
124
|
-
label: "cover_name",
|
|
125
|
-
property
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
];
|
|
130
|
-
|
|
131
|
-
//# sourceMappingURL=personalised_cover.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/snowplow/event-definitions/personalised_cover.ts"],"sourcesContent":["import { EventDefinition, ParamsType } from \"../types\";\nimport { redact } from \"./redaction\";\nimport { DELIMITER } from \"../constants\";\nimport { snakeCase } from \"../../utils\";\n\n/**\n * Event definitions for Snowplow\n * @type {EventDefinition[]}\n * @property {string} name - The name of the event, to use when triggering\n * @property {string} type - The type of the event (structured | unstructured)\n * @property {makePayload} makePayload\n * - Function that creates the payload for the event;\n * - Allows optional params object to be passed in\n *\n * @example\n * Parent\n * import { getSnowplowConfig, SnowplowProvider } from \"@simplybusiness/services\";\n * const snowplowProps = getSnowplowConfig(pageData);\n * <SnowplowProvider scripts={snowplowProps!}>{children}</SnowplowProvider>\n *\n * Child\n * import { useSnowplowContext } from \"@simplybusiness/services\";\n * const { snowplow } = useSnowplowContext();\n * const handlerFunction = () => snowplow?.trigger(\"eventNameHere\");\n */\n\nexport const personalisedCoverEventDefinitions: EventDefinition[] = [\n {\n name: \"seeMoreClicked\",\n type: \"structured\",\n makePayload: _ => ({\n category: \"personalised_cover\",\n action: \"see_more_clicked\",\n label: \"page\",\n property: \"personalised_cover\",\n }),\n },\n {\n name: \"selectPackageClicked\",\n type: \"structured\",\n makePayload: _ => ({\n category: \"personalised_cover\",\n action: \"select_package_clicked\",\n label: \"page\",\n property: \"personalised_cover\",\n }),\n },\n {\n name: \"validationShown\",\n type: \"structured\",\n makePayload: params => {\n const { cover, question } = params as ParamsType;\n\n return {\n category: \"personalised_cover\",\n action: \"validation_shown\",\n label: \"cover_question\",\n property: `${snakeCase(cover)}_${snakeCase(question)}`,\n };\n },\n },\n {\n name: \"coverQuestionAnswered\",\n type: \"unstructured\",\n makePayload: params => {\n const { context } = params as ParamsType;\n const { question, answer } = redact(params as ParamsType);\n // Flatten the answer to a delimited string\n const flatAnswer = Array.isArray(answer)\n ? answer.join(DELIMITER)\n : answer;\n\n return {\n schema:\n \"iglu:com.simplybusiness/form_question_answered/jsonschema/1-0-1\",\n data: {\n site: context.site,\n page_name: \"personalised_cover\",\n section_name: \"Personalised Cover Questions\",\n question,\n answer: flatAnswer,\n },\n };\n },\n },\n {\n name: \"limitLinkClicked\",\n type: \"structured\",\n makePayload: params => {\n const { label } = params as ParamsType;\n\n return {\n category: \"personalised_cover\",\n action: \"limit_link_clicked\",\n label,\n property: \"link_clicked\",\n };\n },\n },\n {\n name: \"limitChanged\",\n type: \"structured\",\n makePayload: params => {\n const { label, limit } = params as ParamsType;\n\n return {\n category: \"personalised_cover\",\n action: \"limit_changed\",\n label,\n property: limit,\n };\n },\n },\n {\n name: \"coverPresented\",\n type: \"structured\",\n makePayload: params => {\n const { property } = params as ParamsType;\n\n return {\n category: \"personalised_cover\",\n action: \"cover_presented\",\n label: \"cover_name\",\n property,\n };\n },\n },\n {\n name: \"moreInfoClicked\",\n type: \"structured\",\n makePayload: params => {\n const { property } = params as ParamsType;\n\n return {\n category: \"personalised_cover\",\n action: \"more_info_clicked\",\n label: \"cover_name\",\n property,\n };\n },\n },\n];\n"],"names":["redact","DELIMITER","snakeCase","personalisedCoverEventDefinitions","name","type","makePayload","_","category","action","label","property","params","cover","question","context","answer","flatAnswer","Array","isArray","join","schema","data","site","page_name","section_name","limit"],"mappings":"AACA,SAASA,MAAM,QAAQ,cAAc;AACrC,SAASC,SAAS,QAAQ,eAAe;AACzC,SAASC,SAAS,QAAQ,cAAc;AAExC;;;;;;;;;;;;;;;;;;;CAmBC,GAED,OAAO,MAAMC,oCAAuD;IAClE;QACEC,MAAM;QACNC,MAAM;QACNC,aAAaC,CAAAA,IAAM,CAAA;gBACjBC,UAAU;gBACVC,QAAQ;gBACRC,OAAO;gBACPC,UAAU;YACZ,CAAA;IACF;IACA;QACEP,MAAM;QACNC,MAAM;QACNC,aAAaC,CAAAA,IAAM,CAAA;gBACjBC,UAAU;gBACVC,QAAQ;gBACRC,OAAO;gBACPC,UAAU;YACZ,CAAA;IACF;IACA;QACEP,MAAM;QACNC,MAAM;QACNC,aAAaM,CAAAA;YACX,MAAM,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GAAGF;YAE5B,OAAO;gBACLJ,UAAU;gBACVC,QAAQ;gBACRC,OAAO;gBACPC,UAAU,GAAGT,UAAUW,OAAO,CAAC,EAAEX,UAAUY,WAAW;YACxD;QACF;IACF;IACA;QACEV,MAAM;QACNC,MAAM;QACNC,aAAaM,CAAAA;YACX,MAAM,EAAEG,OAAO,EAAE,GAAGH;YACpB,MAAM,EAAEE,QAAQ,EAAEE,MAAM,EAAE,GAAGhB,OAAOY;YACpC,2CAA2C;YAC3C,MAAMK,aAAaC,MAAMC,OAAO,CAACH,UAC7BA,OAAOI,IAAI,CAACnB,aACZe;YAEJ,OAAO;gBACLK,QACE;gBACFC,MAAM;oBACJC,MAAMR,QAAQQ,IAAI;oBAClBC,WAAW;oBACXC,cAAc;oBACdX;oBACAE,QAAQC;gBACV;YACF;QACF;IACF;IACA;QACEb,MAAM;QACNC,MAAM;QACNC,aAAaM,CAAAA;YACX,MAAM,EAAEF,KAAK,EAAE,GAAGE;YAElB,OAAO;gBACLJ,UAAU;gBACVC,QAAQ;gBACRC;gBACAC,UAAU;YACZ;QACF;IACF;IACA;QACEP,MAAM;QACNC,MAAM;QACNC,aAAaM,CAAAA;YACX,MAAM,EAAEF,KAAK,EAAEgB,KAAK,EAAE,GAAGd;YAEzB,OAAO;gBACLJ,UAAU;gBACVC,QAAQ;gBACRC;gBACAC,UAAUe;YACZ;QACF;IACF;IACA;QACEtB,MAAM;QACNC,MAAM;QACNC,aAAaM,CAAAA;YACX,MAAM,EAAED,QAAQ,EAAE,GAAGC;YAErB,OAAO;gBACLJ,UAAU;gBACVC,QAAQ;gBACRC,OAAO;gBACPC;YACF;QACF;IACF;IACA;QACEP,MAAM;QACNC,MAAM;QACNC,aAAaM,CAAAA;YACX,MAAM,EAAED,QAAQ,EAAE,GAAGC;YAErB,OAAO;gBACLJ,UAAU;gBACVC,QAAQ;gBACRC,OAAO;gBACPC;YACF;QACF;IACF;CACD,CAAC"}
|