@sitecore-content-sdk/events 2.0.0-canary.12
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/LICENSE.MD +202 -0
- package/README.md +91 -0
- package/browser.d.ts +2 -0
- package/dist/cjs/package.json +80 -0
- package/dist/cjs/src/browser.js +9 -0
- package/dist/cjs/src/consts.js +21 -0
- package/dist/cjs/src/debug.js +12 -0
- package/dist/cjs/src/eventStorage/addToEventQueue.js +25 -0
- package/dist/cjs/src/eventStorage/clearEventQueue.js +15 -0
- package/dist/cjs/src/eventStorage/eventStorage.js +67 -0
- package/dist/cjs/src/eventStorage/processEventQueue.js +16 -0
- package/dist/cjs/src/events/base-event.js +35 -0
- package/dist/cjs/src/events/common-interfaces.js +2 -0
- package/dist/cjs/src/events/consts.js +5 -0
- package/dist/cjs/src/events/custom-event/custom-event.js +62 -0
- package/dist/cjs/src/events/custom-event/event.js +27 -0
- package/dist/cjs/src/events/custom-event/form.js +38 -0
- package/dist/cjs/src/events/identity/identity-event.js +93 -0
- package/dist/cjs/src/events/identity/identity.js +27 -0
- package/dist/cjs/src/events/index.js +11 -0
- package/dist/cjs/src/events/page-view/page-view-event.js +131 -0
- package/dist/cjs/src/events/page-view/page-view.js +30 -0
- package/dist/cjs/src/events/send-event/sendEvent.js +36 -0
- package/dist/cjs/src/index.js +13 -0
- package/dist/cjs/src/initialization/const.js +8 -0
- package/dist/cjs/src/initialization/plugin.js +56 -0
- package/dist/cjs/src/initialization/types.js +2 -0
- package/dist/cjs/src/internal.js +8 -0
- package/dist/esm/package.json +80 -0
- package/dist/esm/src/browser.js +3 -0
- package/dist/esm/src/consts.js +15 -0
- package/dist/esm/src/debug.js +9 -0
- package/dist/esm/src/eventStorage/addToEventQueue.js +22 -0
- package/dist/esm/src/eventStorage/clearEventQueue.js +12 -0
- package/dist/esm/src/eventStorage/eventStorage.js +64 -0
- package/dist/esm/src/eventStorage/processEventQueue.js +13 -0
- package/dist/esm/src/events/base-event.js +31 -0
- package/dist/esm/src/events/common-interfaces.js +1 -0
- package/dist/esm/src/events/consts.js +2 -0
- package/dist/esm/src/events/custom-event/custom-event.js +58 -0
- package/dist/esm/src/events/custom-event/event.js +24 -0
- package/dist/esm/src/events/custom-event/form.js +35 -0
- package/dist/esm/src/events/identity/identity-event.js +89 -0
- package/dist/esm/src/events/identity/identity.js +24 -0
- package/dist/esm/src/events/index.js +4 -0
- package/dist/esm/src/events/page-view/page-view-event.js +127 -0
- package/dist/esm/src/events/page-view/page-view.js +27 -0
- package/dist/esm/src/events/send-event/sendEvent.js +33 -0
- package/dist/esm/src/index.js +5 -0
- package/dist/esm/src/initialization/const.js +5 -0
- package/dist/esm/src/initialization/plugin.js +52 -0
- package/dist/esm/src/initialization/types.js +1 -0
- package/dist/esm/src/internal.js +2 -0
- package/internal.d.ts +2 -0
- package/package.json +80 -0
- package/types/src/browser.d.ts +4 -0
- package/types/src/browser.d.ts.map +1 -0
- package/types/src/consts.d.ts +15 -0
- package/types/src/consts.d.ts.map +1 -0
- package/types/src/debug.d.ts +9 -0
- package/types/src/debug.d.ts.map +1 -0
- package/types/src/eventStorage/addToEventQueue.d.ts +8 -0
- package/types/src/eventStorage/addToEventQueue.d.ts.map +1 -0
- package/types/src/eventStorage/clearEventQueue.d.ts +6 -0
- package/types/src/eventStorage/clearEventQueue.d.ts.map +1 -0
- package/types/src/eventStorage/eventStorage.d.ts +31 -0
- package/types/src/eventStorage/eventStorage.d.ts.map +1 -0
- package/types/src/eventStorage/processEventQueue.d.ts +7 -0
- package/types/src/eventStorage/processEventQueue.d.ts.map +1 -0
- package/types/src/events/base-event.d.ts +35 -0
- package/types/src/events/base-event.d.ts.map +1 -0
- package/types/src/events/common-interfaces.d.ts +53 -0
- package/types/src/events/common-interfaces.d.ts.map +1 -0
- package/types/src/events/consts.d.ts +3 -0
- package/types/src/events/consts.d.ts.map +1 -0
- package/types/src/events/custom-event/custom-event.d.ts +79 -0
- package/types/src/events/custom-event/custom-event.d.ts.map +1 -0
- package/types/src/events/custom-event/event.d.ts +10 -0
- package/types/src/events/custom-event/event.d.ts.map +1 -0
- package/types/src/events/custom-event/form.d.ts +11 -0
- package/types/src/events/custom-event/form.d.ts.map +1 -0
- package/types/src/events/identity/identity-event.d.ts +184 -0
- package/types/src/events/identity/identity-event.d.ts.map +1 -0
- package/types/src/events/identity/identity.d.ts +10 -0
- package/types/src/events/identity/identity.d.ts.map +1 -0
- package/types/src/events/index.d.ts +10 -0
- package/types/src/events/index.d.ts.map +1 -0
- package/types/src/events/page-view/page-view-event.d.ts +125 -0
- package/types/src/events/page-view/page-view-event.d.ts.map +1 -0
- package/types/src/events/page-view/page-view.d.ts +11 -0
- package/types/src/events/page-view/page-view.d.ts.map +1 -0
- package/types/src/events/send-event/sendEvent.d.ts +22 -0
- package/types/src/events/send-event/sendEvent.d.ts.map +1 -0
- package/types/src/index.d.ts +10 -0
- package/types/src/index.d.ts.map +1 -0
- package/types/src/initialization/const.d.ts +6 -0
- package/types/src/initialization/const.d.ts.map +1 -0
- package/types/src/initialization/plugin.d.ts +35 -0
- package/types/src/initialization/plugin.d.ts.map +1 -0
- package/types/src/initialization/types.d.ts +22 -0
- package/types/src/initialization/types.d.ts.map +1 -0
- package/types/src/internal.d.ts +3 -0
- package/types/src/internal.d.ts.map +1 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.event = event;
|
|
4
|
+
const internal_1 = require("@sitecore-content-sdk/analytics-core/internal");
|
|
5
|
+
const sendEvent_1 = require("../send-event/sendEvent");
|
|
6
|
+
const custom_event_1 = require("./custom-event");
|
|
7
|
+
const core_1 = require("@sitecore-content-sdk/core");
|
|
8
|
+
const plugin_1 = require("../../initialization/plugin");
|
|
9
|
+
/**
|
|
10
|
+
* A function that sends an event to the SitecoreCloud API with the specified type
|
|
11
|
+
* @param {EventData} eventData - The required/optional attributes to be sent to the SitecoreCloud API
|
|
12
|
+
* @returns The response object that Sitecore Edge Proxy returns
|
|
13
|
+
* @public
|
|
14
|
+
*/
|
|
15
|
+
async function event(eventData) {
|
|
16
|
+
const coreContext = (0, core_1.getCoreContext)();
|
|
17
|
+
await coreContext.readyPromise;
|
|
18
|
+
(0, plugin_1.getEventsPlugin)();
|
|
19
|
+
const { options, adapter } = (0, internal_1.getAnalyticsPlugin)();
|
|
20
|
+
const id = adapter.getClientId() || '';
|
|
21
|
+
return new custom_event_1.CustomEvent({
|
|
22
|
+
eventData,
|
|
23
|
+
id,
|
|
24
|
+
sendEvent: sendEvent_1.sendEvent,
|
|
25
|
+
config: Object.assign(Object.assign({}, coreContext.config), options),
|
|
26
|
+
}).send();
|
|
27
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.form = form;
|
|
4
|
+
const internal_1 = require("@sitecore-content-sdk/analytics-core/internal");
|
|
5
|
+
const sendEvent_1 = require("../send-event/sendEvent");
|
|
6
|
+
const custom_event_1 = require("./custom-event");
|
|
7
|
+
const core_1 = require("@sitecore-content-sdk/core");
|
|
8
|
+
const plugin_1 = require("../../initialization/plugin");
|
|
9
|
+
/**
|
|
10
|
+
* A function that sends a form event to the SitecoreCloud API
|
|
11
|
+
* @param {string} formId - The required form ID string
|
|
12
|
+
* @param {'VIEWED' | 'SUBMITTED'} interactionType - The required interaction type string. Possible values: `VIEWED`, `SUBMITTED`
|
|
13
|
+
* @param {string} componentInstanceId - The required component instance ID string
|
|
14
|
+
* @returns The response object that Sitecore Edge Proxy returns or null
|
|
15
|
+
* @public
|
|
16
|
+
*/
|
|
17
|
+
async function form(formId, interactionType, componentInstanceId) {
|
|
18
|
+
const coreContext = (0, core_1.getCoreContext)();
|
|
19
|
+
await coreContext.readyPromise;
|
|
20
|
+
(0, plugin_1.getEventsPlugin)();
|
|
21
|
+
const { options, adapter } = (0, internal_1.getAnalyticsPlugin)();
|
|
22
|
+
const id = adapter.getClientId() || '';
|
|
23
|
+
const formEvent = new custom_event_1.CustomEvent({
|
|
24
|
+
eventData: {
|
|
25
|
+
extensionData: {
|
|
26
|
+
componentInstanceId,
|
|
27
|
+
formId,
|
|
28
|
+
interactionType: interactionType.toUpperCase(),
|
|
29
|
+
},
|
|
30
|
+
type: 'FORM',
|
|
31
|
+
},
|
|
32
|
+
id,
|
|
33
|
+
sendEvent: sendEvent_1.sendEvent,
|
|
34
|
+
config: Object.assign(Object.assign({}, coreContext.config), options),
|
|
35
|
+
});
|
|
36
|
+
formEvent.page = undefined;
|
|
37
|
+
return formEvent.send();
|
|
38
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IdentityEvent = void 0;
|
|
4
|
+
const utils_1 = require("@sitecore-content-sdk/analytics-core/utils");
|
|
5
|
+
const base_event_1 = require("../base-event");
|
|
6
|
+
const consts_1 = require("../consts");
|
|
7
|
+
const core_1 = require("@sitecore-content-sdk/core");
|
|
8
|
+
const { ERROR_MESSAGES } = core_1.constants;
|
|
9
|
+
/**
|
|
10
|
+
* A class that extends from {@link BaseEvent} and has all the required functionality to send an IDENTITY event
|
|
11
|
+
*/
|
|
12
|
+
class IdentityEvent extends base_event_1.BaseEvent {
|
|
13
|
+
/**
|
|
14
|
+
* A class that extends from {@link BaseEvent} and has all the required functionality to send an IDENTITY event
|
|
15
|
+
* @param {IdentityEventArguments} args - Unified object containing the required properties
|
|
16
|
+
*/
|
|
17
|
+
constructor(args) {
|
|
18
|
+
const { channel, currency, language, page, extensionData } = args.identityData;
|
|
19
|
+
super({ channel, currency, language, page }, args.id);
|
|
20
|
+
this.extensionData = {};
|
|
21
|
+
this.numberOfExtensionDataProperties = 0;
|
|
22
|
+
this.validateAttributes(args.identityData);
|
|
23
|
+
this.identityData = args.identityData;
|
|
24
|
+
this.sendEvent = args.sendEvent;
|
|
25
|
+
this.config = args.config;
|
|
26
|
+
if (extensionData)
|
|
27
|
+
this.extensionData = (0, utils_1.flattenObject)({ object: extensionData });
|
|
28
|
+
this.numberOfExtensionDataProperties = Object.entries(this.extensionData).length;
|
|
29
|
+
if (this.numberOfExtensionDataProperties > consts_1.MAX_EXT_ATTRIBUTES)
|
|
30
|
+
throw new Error(ERROR_MESSAGES.IV_006(consts_1.MAX_EXT_ATTRIBUTES));
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Sends the event to Sitecore Edge Proxy
|
|
34
|
+
* @returns - A promise that resolves with either the Sitecore Edge Proxy response object or null
|
|
35
|
+
*/
|
|
36
|
+
async send() {
|
|
37
|
+
const baseAttr = this.mapBaseEventPayload();
|
|
38
|
+
const eventAttrs = this.mapAttributes();
|
|
39
|
+
const fetchBody = Object.assign({}, eventAttrs, baseAttr);
|
|
40
|
+
return await this.sendEvent(fetchBody, this.config);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Function that validates the identifiers object, email, and date attributes for CDN users
|
|
44
|
+
* @param {IdentityData} identityData - The data to be validated
|
|
45
|
+
*/
|
|
46
|
+
validateAttributes(identityData) {
|
|
47
|
+
if (identityData.identifiers.length === 0)
|
|
48
|
+
throw new Error(ERROR_MESSAGES.MV_003);
|
|
49
|
+
if (identityData.dob !== undefined && !(0, utils_1.isShortISODateString)(identityData.dob))
|
|
50
|
+
throw new Error(ERROR_MESSAGES.IV_003);
|
|
51
|
+
identityData.identifiers.forEach((identifier) => {
|
|
52
|
+
if (identifier.expiryDate && !(0, utils_1.isShortISODateString)(identifier.expiryDate))
|
|
53
|
+
throw new Error(ERROR_MESSAGES.IV_005);
|
|
54
|
+
});
|
|
55
|
+
if (identityData.email && !(0, utils_1.isValidEmail)(identityData.email))
|
|
56
|
+
throw new Error(ERROR_MESSAGES.IV_004);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* A function that maps the identity event input data with the payload sent to the API
|
|
60
|
+
* @returns - The payload object
|
|
61
|
+
*/
|
|
62
|
+
mapAttributes() {
|
|
63
|
+
const identityPayload = {
|
|
64
|
+
city: this.identityData.city,
|
|
65
|
+
country: this.identityData.country,
|
|
66
|
+
dob: this.identityData.dob,
|
|
67
|
+
email: this.identityData.email,
|
|
68
|
+
firstname: this.identityData.firstName,
|
|
69
|
+
gender: this.identityData.gender,
|
|
70
|
+
identifiers: this.identityData.identifiers.map((value) => {
|
|
71
|
+
return {
|
|
72
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
73
|
+
expiry_date: value.expiryDate,
|
|
74
|
+
id: value.id,
|
|
75
|
+
provider: value.provider,
|
|
76
|
+
};
|
|
77
|
+
}),
|
|
78
|
+
lastname: this.identityData.lastName,
|
|
79
|
+
mobile: this.identityData.mobile,
|
|
80
|
+
phone: this.identityData.phone,
|
|
81
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
82
|
+
postal_code: this.identityData.postalCode,
|
|
83
|
+
state: this.identityData.state,
|
|
84
|
+
street: this.identityData.street,
|
|
85
|
+
title: this.identityData.title,
|
|
86
|
+
type: 'IDENTITY',
|
|
87
|
+
};
|
|
88
|
+
if (this.numberOfExtensionDataProperties > 0)
|
|
89
|
+
identityPayload.ext = this.extensionData;
|
|
90
|
+
return identityPayload;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
exports.IdentityEvent = IdentityEvent;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.identity = identity;
|
|
4
|
+
const internal_1 = require("@sitecore-content-sdk/analytics-core/internal");
|
|
5
|
+
const sendEvent_1 = require("../send-event/sendEvent");
|
|
6
|
+
const identity_event_1 = require("./identity-event");
|
|
7
|
+
const core_1 = require("@sitecore-content-sdk/core");
|
|
8
|
+
const plugin_1 = require("../../initialization/plugin");
|
|
9
|
+
/**
|
|
10
|
+
* A function that sends an IDENTITY event to the SitecoreCloud API
|
|
11
|
+
* @param {IdentityData} identityData - The required/optional attributes to be sent to the SitecoreCloud API
|
|
12
|
+
* @returns The response object that Sitecore Edge Proxy returns
|
|
13
|
+
* @public
|
|
14
|
+
*/
|
|
15
|
+
async function identity(identityData) {
|
|
16
|
+
const coreContext = (0, core_1.getCoreContext)();
|
|
17
|
+
await coreContext.readyPromise;
|
|
18
|
+
(0, plugin_1.getEventsPlugin)();
|
|
19
|
+
const { options, adapter } = (0, internal_1.getAnalyticsPlugin)();
|
|
20
|
+
const id = adapter.getClientId() || '';
|
|
21
|
+
return new identity_event_1.IdentityEvent({
|
|
22
|
+
id,
|
|
23
|
+
identityData,
|
|
24
|
+
sendEvent: sendEvent_1.sendEvent,
|
|
25
|
+
config: Object.assign(Object.assign({}, coreContext.config), options),
|
|
26
|
+
}).send();
|
|
27
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IdentityEvent = exports.CustomEvent = exports.PageViewEvent = exports.BaseEvent = void 0;
|
|
4
|
+
var base_event_1 = require("./base-event");
|
|
5
|
+
Object.defineProperty(exports, "BaseEvent", { enumerable: true, get: function () { return base_event_1.BaseEvent; } });
|
|
6
|
+
var page_view_event_1 = require("./page-view/page-view-event");
|
|
7
|
+
Object.defineProperty(exports, "PageViewEvent", { enumerable: true, get: function () { return page_view_event_1.PageViewEvent; } });
|
|
8
|
+
var custom_event_1 = require("./custom-event/custom-event");
|
|
9
|
+
Object.defineProperty(exports, "CustomEvent", { enumerable: true, get: function () { return custom_event_1.CustomEvent; } });
|
|
10
|
+
var identity_event_1 = require("./identity/identity-event");
|
|
11
|
+
Object.defineProperty(exports, "IdentityEvent", { enumerable: true, get: function () { return identity_event_1.IdentityEvent; } });
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PageViewEvent = void 0;
|
|
4
|
+
const consts_1 = require("../consts");
|
|
5
|
+
const base_event_1 = require("../base-event");
|
|
6
|
+
const utils_1 = require("@sitecore-content-sdk/analytics-core/utils");
|
|
7
|
+
const core_1 = require("@sitecore-content-sdk/core");
|
|
8
|
+
const { ERROR_MESSAGES } = core_1.constants;
|
|
9
|
+
/**
|
|
10
|
+
* A class that extends from {@link BaseEvent} and has all the required functionality to send a VIEW event
|
|
11
|
+
*/
|
|
12
|
+
class PageViewEvent extends base_event_1.BaseEvent {
|
|
13
|
+
/**
|
|
14
|
+
* A class that extends from {@link BaseEvent} and has all the required functionality to send a VIEW event
|
|
15
|
+
* @param {PageViewEventArguments} args - Unified object containing the required properties
|
|
16
|
+
*/
|
|
17
|
+
constructor(args) {
|
|
18
|
+
var _a;
|
|
19
|
+
const { channel, currency, language, page, extensionData } = Object.assign({}, args.pageViewData);
|
|
20
|
+
super({
|
|
21
|
+
channel,
|
|
22
|
+
currency,
|
|
23
|
+
language,
|
|
24
|
+
page,
|
|
25
|
+
}, args.id);
|
|
26
|
+
this.extensionData = {};
|
|
27
|
+
this.pageViewData = args.pageViewData;
|
|
28
|
+
this.sendEvent = args.sendEvent;
|
|
29
|
+
this.config = args.config;
|
|
30
|
+
this.urlSearchParams = new URLSearchParams(decodeURI(args.searchParams));
|
|
31
|
+
if (extensionData)
|
|
32
|
+
this.extensionData = (0, utils_1.flattenObject)({ object: extensionData });
|
|
33
|
+
const numberOfExtensionDataProperties = Object.entries(this.extensionData).length;
|
|
34
|
+
if (numberOfExtensionDataProperties > consts_1.MAX_EXT_ATTRIBUTES)
|
|
35
|
+
throw new Error(ERROR_MESSAGES.IV_006(consts_1.MAX_EXT_ATTRIBUTES));
|
|
36
|
+
this.includeUTMParameters =
|
|
37
|
+
(_a = (args.pageViewData && args.pageViewData.includeUTMParameters)) !== null && _a !== void 0 ? _a : true;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Sends the event to Sitecore Edge Proxy
|
|
41
|
+
* @returns - A promise that resolves with either the Sitecore Edge Proxy response object or null
|
|
42
|
+
*/
|
|
43
|
+
async send() {
|
|
44
|
+
const baseAttr = this.mapBaseEventPayload();
|
|
45
|
+
const eventAttrs = this.mapAttributes();
|
|
46
|
+
PageViewEvent.isFirstPageView = false;
|
|
47
|
+
return await this.sendEvent(Object.assign(Object.assign({}, baseAttr), eventAttrs), this.config);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Gets the variant ID from the url if not passed by the developer
|
|
51
|
+
* Gets the variant ID from the extension data if not found from the url
|
|
52
|
+
* @param {string} [pageVariantIdFromPageViewData] - The variant ID from the page view data
|
|
53
|
+
* @param {string} [pageVariantIdFromExt] - The variant ID from extension data
|
|
54
|
+
* @returns - variant ID or null
|
|
55
|
+
*/
|
|
56
|
+
getPageVariantId(pageVariantIdFromPageViewData, pageVariantIdFromExt) {
|
|
57
|
+
if (pageVariantIdFromPageViewData)
|
|
58
|
+
return pageVariantIdFromPageViewData;
|
|
59
|
+
const pageVariantIdFromURL = this.urlSearchParams.get('variantid');
|
|
60
|
+
if (pageVariantIdFromURL)
|
|
61
|
+
return pageVariantIdFromURL;
|
|
62
|
+
if (pageVariantIdFromExt)
|
|
63
|
+
return pageVariantIdFromExt;
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Returns the referrer if exists on page view event else null if on server and no referrer is on event, else
|
|
68
|
+
* returns the href if on client side and the document referrer is different from the window location hostname
|
|
69
|
+
* @returns - the referrer
|
|
70
|
+
*/
|
|
71
|
+
getReferrer() {
|
|
72
|
+
var _a;
|
|
73
|
+
if ((_a = this.pageViewData) === null || _a === void 0 ? void 0 : _a.referrer)
|
|
74
|
+
return this.pageViewData.referrer;
|
|
75
|
+
if (typeof window === 'undefined')
|
|
76
|
+
return null;
|
|
77
|
+
if (!PageViewEvent.isFirstPageView || !document.referrer)
|
|
78
|
+
return null;
|
|
79
|
+
const { hostname, href } = new URL(document.referrer);
|
|
80
|
+
return window.location.hostname !== hostname ? href : null;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Maps parameters given as input to corresponding attributes send to the API
|
|
84
|
+
* @returns the mapped object to be sent as payload
|
|
85
|
+
*/
|
|
86
|
+
mapAttributes() {
|
|
87
|
+
var _a;
|
|
88
|
+
let pageViewPayload = {
|
|
89
|
+
type: 'VIEW',
|
|
90
|
+
};
|
|
91
|
+
const pageVariantId = this.pageViewData &&
|
|
92
|
+
this.getPageVariantId(this.pageViewData.pageVariantId, this.extensionData.pageVariantId);
|
|
93
|
+
if (pageVariantId !== null)
|
|
94
|
+
pageViewPayload.ext = Object.assign(Object.assign({}, pageViewPayload.ext), { pageVariantId });
|
|
95
|
+
if (Object.keys(this.extensionData).length > 0) {
|
|
96
|
+
delete this.extensionData.pageVariantId;
|
|
97
|
+
pageViewPayload.ext = Object.assign(Object.assign({}, pageViewPayload.ext), this.extensionData);
|
|
98
|
+
}
|
|
99
|
+
if (this.includeUTMParameters) {
|
|
100
|
+
const utmParameters = this.getUTMParameters();
|
|
101
|
+
pageViewPayload = Object.assign(Object.assign({}, pageViewPayload), utmParameters);
|
|
102
|
+
}
|
|
103
|
+
const referrer = this.getReferrer();
|
|
104
|
+
if (referrer !== null)
|
|
105
|
+
pageViewPayload = Object.assign(Object.assign({}, pageViewPayload), { referrer });
|
|
106
|
+
if ((_a = this.pageViewData) === null || _a === void 0 ? void 0 : _a.searchData)
|
|
107
|
+
pageViewPayload.sc_search = {
|
|
108
|
+
data: this.pageViewData.searchData,
|
|
109
|
+
metadata: {
|
|
110
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
111
|
+
ut_api_version: '1.0',
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
return pageViewPayload;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Retrieves UTM parameters from the url query string
|
|
118
|
+
* @returns - an object containing the UTM parameters if they exist
|
|
119
|
+
*/
|
|
120
|
+
getUTMParameters() {
|
|
121
|
+
const utmParameters = {};
|
|
122
|
+
this.urlSearchParams.forEach((value, key) => {
|
|
123
|
+
const param = key.toLowerCase();
|
|
124
|
+
if (param.indexOf(consts_1.UTM_PREFIX) === 0)
|
|
125
|
+
utmParameters[param] = value;
|
|
126
|
+
});
|
|
127
|
+
return utmParameters;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
exports.PageViewEvent = PageViewEvent;
|
|
131
|
+
PageViewEvent.isFirstPageView = true;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.pageView = pageView;
|
|
4
|
+
const internal_1 = require("@sitecore-content-sdk/analytics-core/internal");
|
|
5
|
+
const sendEvent_1 = require("../send-event/sendEvent");
|
|
6
|
+
const page_view_event_1 = require("./page-view-event");
|
|
7
|
+
const core_1 = require("@sitecore-content-sdk/core");
|
|
8
|
+
const plugin_1 = require("../../initialization/plugin");
|
|
9
|
+
/**
|
|
10
|
+
* A function that sends a VIEW event to the SitecoreCloud API
|
|
11
|
+
* @param {PageViewData} [pageViewData] - The optional attributes to be sent to the SitecoreCloud API
|
|
12
|
+
* This object will be flattened and sent in the ext object of the payload
|
|
13
|
+
* @returns The response object that Sitecore Edge Proxy returns
|
|
14
|
+
* @public
|
|
15
|
+
*/
|
|
16
|
+
async function pageView(pageViewData) {
|
|
17
|
+
const coreContext = (0, core_1.getCoreContext)();
|
|
18
|
+
await coreContext.readyPromise;
|
|
19
|
+
(0, plugin_1.getEventsPlugin)();
|
|
20
|
+
const { options, adapter } = (0, internal_1.getAnalyticsPlugin)();
|
|
21
|
+
const id = adapter.getClientId() || '';
|
|
22
|
+
const searchParams = adapter.location.getSearchParams();
|
|
23
|
+
return new page_view_event_1.PageViewEvent({
|
|
24
|
+
id,
|
|
25
|
+
pageViewData,
|
|
26
|
+
searchParams,
|
|
27
|
+
sendEvent: sendEvent_1.sendEvent,
|
|
28
|
+
config: Object.assign(Object.assign({}, coreContext.config), options),
|
|
29
|
+
}).send();
|
|
30
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sendEvent = sendEvent;
|
|
4
|
+
const internal_1 = require("@sitecore-content-sdk/analytics-core/internal");
|
|
5
|
+
const consts_1 = require("../../consts");
|
|
6
|
+
const core_1 = require("@sitecore-content-sdk/core");
|
|
7
|
+
const debug_1 = require("../../debug");
|
|
8
|
+
/**
|
|
9
|
+
* This function sends an event to Sitecore Edge Proxy
|
|
10
|
+
* @param {EPFetchBody & BasePayload} body - The event data to send
|
|
11
|
+
* @param {CoreContext['config']} config - The global configuration
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
async function sendEvent(body, config) {
|
|
15
|
+
// eslint-disable-next-line max-len
|
|
16
|
+
const eventUrl = `${config.edgeUrl}/v1/events/${internal_1.API_VERSION}/events?siteId=${config.siteName}`;
|
|
17
|
+
const fetchOptions = {
|
|
18
|
+
body: JSON.stringify(body),
|
|
19
|
+
headers: {
|
|
20
|
+
'Content-Type': 'application/json',
|
|
21
|
+
'X-Client-Software-ID': consts_1.X_CLIENT_SOFTWARE_ID,
|
|
22
|
+
'X-Library-Version': consts_1.PACKAGE_VERSION,
|
|
23
|
+
'x-sitecore-contextid': config.contextId,
|
|
24
|
+
},
|
|
25
|
+
method: 'POST',
|
|
26
|
+
};
|
|
27
|
+
const fetcher = new core_1.NativeDataFetcher({ debugger: debug_1.debug.events });
|
|
28
|
+
return await fetcher
|
|
29
|
+
.fetch(eventUrl, fetchOptions)
|
|
30
|
+
.then(async (response) => {
|
|
31
|
+
return response.data;
|
|
32
|
+
})
|
|
33
|
+
.catch(() => {
|
|
34
|
+
return null;
|
|
35
|
+
});
|
|
36
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.eventsPlugin = exports.pageView = exports.identity = exports.event = exports.form = void 0;
|
|
4
|
+
var form_1 = require("./events/custom-event/form");
|
|
5
|
+
Object.defineProperty(exports, "form", { enumerable: true, get: function () { return form_1.form; } });
|
|
6
|
+
var event_1 = require("./events/custom-event/event");
|
|
7
|
+
Object.defineProperty(exports, "event", { enumerable: true, get: function () { return event_1.event; } });
|
|
8
|
+
var identity_1 = require("./events/identity/identity");
|
|
9
|
+
Object.defineProperty(exports, "identity", { enumerable: true, get: function () { return identity_1.identity; } });
|
|
10
|
+
var page_view_1 = require("./events/page-view/page-view");
|
|
11
|
+
Object.defineProperty(exports, "pageView", { enumerable: true, get: function () { return page_view_1.pageView; } });
|
|
12
|
+
var plugin_1 = require("./initialization/plugin");
|
|
13
|
+
Object.defineProperty(exports, "eventsPlugin", { enumerable: true, get: function () { return plugin_1.eventsPlugin; } });
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.eventsPlugin = eventsPlugin;
|
|
4
|
+
exports.getEventsPlugin = getEventsPlugin;
|
|
5
|
+
const core_1 = require("@sitecore-content-sdk/core");
|
|
6
|
+
const const_1 = require("./const");
|
|
7
|
+
const consts_1 = require("../consts");
|
|
8
|
+
const event_1 = require("../events/custom-event/event");
|
|
9
|
+
const form_1 = require("../events/custom-event/form");
|
|
10
|
+
const identity_1 = require("../events/identity/identity");
|
|
11
|
+
const page_view_1 = require("../events/page-view/page-view");
|
|
12
|
+
const addToEventQueue_1 = require("../eventStorage/addToEventQueue");
|
|
13
|
+
const clearEventQueue_1 = require("../eventStorage/clearEventQueue");
|
|
14
|
+
const processEventQueue_1 = require("../eventStorage/processEventQueue");
|
|
15
|
+
const internal_1 = require("@sitecore-content-sdk/analytics-core/internal");
|
|
16
|
+
const { ERROR_MESSAGES } = core_1.constants;
|
|
17
|
+
/**
|
|
18
|
+
* Initializes the events plugin with the provided options.
|
|
19
|
+
* @internal
|
|
20
|
+
*/
|
|
21
|
+
async function init() {
|
|
22
|
+
if (typeof window !== 'undefined')
|
|
23
|
+
window.scContentSDK = Object.assign(Object.assign({}, window.scContentSDK), { events: {
|
|
24
|
+
addToEventQueue: addToEventQueue_1.addToEventQueue,
|
|
25
|
+
clearEventQueue: clearEventQueue_1.clearEventQueue,
|
|
26
|
+
event: event_1.event,
|
|
27
|
+
form: form_1.form,
|
|
28
|
+
identity: identity_1.identity,
|
|
29
|
+
pageView: page_view_1.pageView,
|
|
30
|
+
processEventQueue: processEventQueue_1.processEventQueue,
|
|
31
|
+
version: consts_1.PACKAGE_VERSION,
|
|
32
|
+
} });
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Creates an events plugin with the provided options.
|
|
36
|
+
* @returns {EventsPlugin} The events plugin instance.
|
|
37
|
+
* @public
|
|
38
|
+
*/
|
|
39
|
+
function eventsPlugin() {
|
|
40
|
+
return {
|
|
41
|
+
name: const_1.EVENTS_PLUGIN_NAME,
|
|
42
|
+
init,
|
|
43
|
+
dependencies: [internal_1.ANALYTICS_PLUGIN_NAME],
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Retrieves the events plugin instance from the core context.
|
|
48
|
+
* @returns {EventsPlugin} The events plugin instance.
|
|
49
|
+
* @internal
|
|
50
|
+
*/
|
|
51
|
+
function getEventsPlugin() {
|
|
52
|
+
const plugin = (0, core_1.getCoreContext)().plugins.get(const_1.EVENTS_PLUGIN_NAME);
|
|
53
|
+
if (!plugin)
|
|
54
|
+
throw new Error(ERROR_MESSAGES.IE_004(const_1.EVENTS_PLUGIN_NAME));
|
|
55
|
+
return plugin;
|
|
56
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PACKAGE_NAME = exports.PACKAGE_VERSION = exports.EVENTS_PLUGIN_NAME = void 0;
|
|
4
|
+
var const_1 = require("./initialization/const");
|
|
5
|
+
Object.defineProperty(exports, "EVENTS_PLUGIN_NAME", { enumerable: true, get: function () { return const_1.EVENTS_PLUGIN_NAME; } });
|
|
6
|
+
var consts_1 = require("./consts");
|
|
7
|
+
Object.defineProperty(exports, "PACKAGE_VERSION", { enumerable: true, get: function () { return consts_1.PACKAGE_VERSION; } });
|
|
8
|
+
Object.defineProperty(exports, "PACKAGE_NAME", { enumerable: true, get: function () { return consts_1.PACKAGE_NAME; } });
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{
|
|
2
|
+
"author": {
|
|
3
|
+
"name": "Sitecore Corporation",
|
|
4
|
+
"url": "https://doc.sitecore.com/xmc/en/developers/content-sdk/index.html"
|
|
5
|
+
},
|
|
6
|
+
"bugs": {
|
|
7
|
+
"url": "https://github.com/Sitecore/content-sdk/issues"
|
|
8
|
+
},
|
|
9
|
+
"dependencies": {
|
|
10
|
+
"@sitecore-content-sdk/analytics-core": "2.0.0-canary.12",
|
|
11
|
+
"@sitecore-content-sdk/core": "2.0.0-canary.12",
|
|
12
|
+
"debug": "^4.4.3"
|
|
13
|
+
},
|
|
14
|
+
"description": "Enables real-time, unified tracking to send events to Sitecore.",
|
|
15
|
+
"devDependencies": {
|
|
16
|
+
"@jest/globals": "^30.2.0",
|
|
17
|
+
"@jest/types": "^29.6.3",
|
|
18
|
+
"@stylistic/eslint-plugin": "^5.2.2",
|
|
19
|
+
"@types/debug": "^4.1.12",
|
|
20
|
+
"@types/jest": "^29.5.12",
|
|
21
|
+
"@typescript-eslint/eslint-plugin": "8.39.0",
|
|
22
|
+
"@typescript-eslint/parser": "8.39.0",
|
|
23
|
+
"del-cli": "^6.0.0",
|
|
24
|
+
"eslint": "^9.32.0",
|
|
25
|
+
"eslint-config-prettier": "^10.1.8",
|
|
26
|
+
"eslint-plugin-import": "2.32.0",
|
|
27
|
+
"eslint-plugin-jsdoc": "52.0.3",
|
|
28
|
+
"eslint-plugin-prettier": "^4.0.0",
|
|
29
|
+
"jest": "^29.7.0",
|
|
30
|
+
"jest-environment-jsdom": "^29.7.0",
|
|
31
|
+
"jest-environment-node": "^29.7.0",
|
|
32
|
+
"ts-jest": "^29.4.6",
|
|
33
|
+
"ts-node": "^10.9.2"
|
|
34
|
+
},
|
|
35
|
+
"main": "dist/cjs/index.js",
|
|
36
|
+
"module": "dist/esm/index.js",
|
|
37
|
+
"types": "types/src/index.d.ts",
|
|
38
|
+
"exports": {
|
|
39
|
+
".": {
|
|
40
|
+
"import": "./dist/esm/src/index.js",
|
|
41
|
+
"require": "./dist/cjs/src/index.js",
|
|
42
|
+
"types": "./types/src/index.d.ts"
|
|
43
|
+
},
|
|
44
|
+
"./browser": {
|
|
45
|
+
"import": "./dist/esm/src/browser.js",
|
|
46
|
+
"require": "./dist/cjs/src/browser.js",
|
|
47
|
+
"types": "./types/src/browser.d.ts"
|
|
48
|
+
},
|
|
49
|
+
"./internal": {
|
|
50
|
+
"import": "./dist/esm/src/internal.js",
|
|
51
|
+
"require": "./dist/cjs/src/internal.js",
|
|
52
|
+
"types": "./types/src/internal.d.ts"
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"files": [
|
|
56
|
+
"dist",
|
|
57
|
+
"types",
|
|
58
|
+
"/*.d.ts"
|
|
59
|
+
],
|
|
60
|
+
"homepage": "https://doc.sitecore.com/xmc/en/developers/content-sdk/index.html",
|
|
61
|
+
"license": "Apache-2.0",
|
|
62
|
+
"name": "@sitecore-content-sdk/events",
|
|
63
|
+
"publishConfig": {
|
|
64
|
+
"access": "public",
|
|
65
|
+
"registry": "https://registry.npmjs.org/"
|
|
66
|
+
},
|
|
67
|
+
"scripts": {
|
|
68
|
+
"build": "npm run clean && tsc -p tsconfig.json && tsc -p tsconfig-esm.json",
|
|
69
|
+
"clean": "del-cli dist types",
|
|
70
|
+
"coverage": "jest --config jest.config.ts --coverage",
|
|
71
|
+
"generate-docs": "npx typedoc --plugin typedoc-plugin-markdown --outputFileStrategy Members --parametersFormat table --readme none --out ../../ref-docs/events --entryPoints src/browser.ts --entryPoints src/internal.ts --entryPoints src/index.ts --githubPages false",
|
|
72
|
+
"lint": "eslint \"./src/**/*.ts\"",
|
|
73
|
+
"prepublishOnly": "npm run build",
|
|
74
|
+
"test": "jest --config jest.config.ts",
|
|
75
|
+
"api-extractor": "npm run build && api-extractor run --local --verbose",
|
|
76
|
+
"api-extractor:verify": "api-extractor run"
|
|
77
|
+
},
|
|
78
|
+
"version": "2.0.0-canary.12",
|
|
79
|
+
"gitHead": "4a26005860f4931f25d8c63d765a030e04a5b1f4"
|
|
80
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import packageJson from '../package.json';
|
|
2
|
+
/**
|
|
3
|
+
* The package version.
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export const PACKAGE_VERSION = packageJson.version;
|
|
7
|
+
/**
|
|
8
|
+
* The package version.
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
export const PACKAGE_NAME = packageJson.name;
|
|
12
|
+
/**
|
|
13
|
+
* Returns the name & version of the library in a String.
|
|
14
|
+
*/
|
|
15
|
+
export const X_CLIENT_SOFTWARE_ID = `${PACKAGE_NAME} ${PACKAGE_VERSION}`;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { debugNamespace, debugModule } from '@sitecore-content-sdk/core';
|
|
2
|
+
export const EVENTS_NAMESPACE = 'events';
|
|
3
|
+
/**
|
|
4
|
+
* Debug module for events package
|
|
5
|
+
* @public
|
|
6
|
+
*/
|
|
7
|
+
export const debug = {
|
|
8
|
+
events: debugModule(`${debugNamespace}:${EVENTS_NAMESPACE}`),
|
|
9
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { getAnalyticsPlugin } from '@sitecore-content-sdk/analytics-core/internal';
|
|
2
|
+
import { eventQueue } from './eventStorage';
|
|
3
|
+
import { getCoreContext } from '@sitecore-content-sdk/core';
|
|
4
|
+
import { getEventsPlugin } from '../initialization/plugin';
|
|
5
|
+
/**
|
|
6
|
+
* A function that adds an event to the queue
|
|
7
|
+
* @param {EventData} eventData - The required/optional attributes in order to be sent to SitecoreCloud API
|
|
8
|
+
* @public
|
|
9
|
+
*/
|
|
10
|
+
export async function addToEventQueue(eventData) {
|
|
11
|
+
const coreContext = getCoreContext();
|
|
12
|
+
await coreContext.readyPromise;
|
|
13
|
+
getEventsPlugin();
|
|
14
|
+
const { options, adapter } = getAnalyticsPlugin();
|
|
15
|
+
const id = adapter.getClientId() || '';
|
|
16
|
+
const queueEventPayload = {
|
|
17
|
+
eventData,
|
|
18
|
+
id,
|
|
19
|
+
config: Object.assign(Object.assign({}, coreContext.config), options),
|
|
20
|
+
};
|
|
21
|
+
eventQueue.enqueueEvent(queueEventPayload);
|
|
22
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { getCoreContext } from '@sitecore-content-sdk/core';
|
|
2
|
+
import { eventQueue } from './eventStorage';
|
|
3
|
+
import { getEventsPlugin } from '../initialization/plugin';
|
|
4
|
+
/**
|
|
5
|
+
* Deletes the queue from session.
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
export async function clearEventQueue() {
|
|
9
|
+
await getCoreContext().readyPromise;
|
|
10
|
+
getEventsPlugin();
|
|
11
|
+
eventQueue.clearQueue();
|
|
12
|
+
}
|