@adobe/alloy 2.20.0-alpha.0 → 2.20.0-alpha.1
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/libEs5/components/LegacyMediaAnalytics/createMediaAnalyticsTracker.js +42 -42
- package/libEs5/components/LegacyMediaAnalytics/createMediaHelper.js +163 -157
- package/libEs5/components/LegacyMediaAnalytics/media/constants.js +20 -20
- package/libEs5/components/MediaCollection/{createMediaRequestPayload.js → constants/eventTypes.js} +9 -13
- package/libEs5/components/MediaCollection/createHeartbeatEngine.js +12 -4
- package/libEs5/components/MediaCollection/createMediaEventManager.js +21 -31
- package/libEs5/components/MediaCollection/createMediaSessionCacheManager.js +10 -10
- package/libEs5/components/MediaCollection/createUpdateMediaSessionState.js +3 -7
- package/libEs5/components/MediaCollection/index.js +12 -6
- package/libEs5/constants/libraryVersion.js +1 -1
- package/libEs5/utils/validation/index.js +6 -1
- package/{libEs6/components/MediaCollection/createMediaRequestPayload.js → libEs5/utils/validation/matchesRegexpValidator.js} +10 -14
- package/libEs6/components/LegacyMediaAnalytics/createMediaAnalyticsTracker.js +22 -22
- package/libEs6/components/LegacyMediaAnalytics/createMediaHelper.js +163 -150
- package/libEs6/components/LegacyMediaAnalytics/media/constants.js +10 -10
- package/libEs6/components/MediaCollection/constants/eventTypes.js +21 -0
- package/libEs6/components/MediaCollection/createHeartbeatEngine.js +11 -4
- package/libEs6/components/MediaCollection/createMediaEventManager.js +23 -30
- package/libEs6/components/MediaCollection/createMediaSessionCacheManager.js +10 -10
- package/libEs6/components/MediaCollection/createUpdateMediaSessionState.js +2 -8
- package/libEs6/components/MediaCollection/index.js +12 -6
- package/libEs6/constants/libraryVersion.js +1 -1
- package/libEs6/utils/validation/index.js +6 -1
- package/libEs6/utils/validation/matchesRegexpValidator.js +17 -0
- package/package.json +2 -2
- package/libEs5/components/MediaCollection/mediaConstants/mediaEvents.js +0 -13
- package/libEs6/components/MediaCollection/mediaConstants/mediaEvents.js +0 -9
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
exports.default = void 0;
|
|
4
4
|
var _toInteger = require("../../utils/toInteger");
|
|
5
|
+
var _eventTypes = require("./constants/eventTypes");
|
|
5
6
|
/*
|
|
6
7
|
Copyright 2023 Adobe. All rights reserved.
|
|
7
8
|
This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
@@ -13,6 +14,12 @@ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTA
|
|
|
13
14
|
OF ANY KIND, either express or implied. See the License for the specific language
|
|
14
15
|
governing permissions and limitations under the License.
|
|
15
16
|
*/
|
|
17
|
+
|
|
18
|
+
var ACTION = "ping";
|
|
19
|
+
var getCurrentInterval = function getCurrentInterval(playerSession) {
|
|
20
|
+
var currentTime = Date.now();
|
|
21
|
+
return Math.abs(currentTime - playerSession.latestTriggeredEvent) / 1000;
|
|
22
|
+
};
|
|
16
23
|
var _default = function _default(_ref) {
|
|
17
24
|
var config = _ref.config,
|
|
18
25
|
mediaEventManager = _ref.mediaEventManager,
|
|
@@ -21,15 +28,15 @@ var _default = function _default(_ref) {
|
|
|
21
28
|
var playerId = _ref2.playerId,
|
|
22
29
|
sessionId = _ref2.sessionId,
|
|
23
30
|
onBeforeMediaEvent = _ref2.onBeforeMediaEvent;
|
|
24
|
-
var currentTime = Date.now();
|
|
25
31
|
var mainPingInterval = config.mediaCollection.mainPingInterval;
|
|
26
32
|
var playerSession = mediaSessionCacheManager.getSession(playerId);
|
|
27
|
-
|
|
33
|
+
var currentInterval = getCurrentInterval(playerSession);
|
|
34
|
+
if (currentInterval > mainPingInterval) {
|
|
28
35
|
var _onBeforeMediaEvent = onBeforeMediaEvent(playerId),
|
|
29
36
|
playhead = _onBeforeMediaEvent.playhead,
|
|
30
37
|
qoeDataDetails = _onBeforeMediaEvent.qoeDataDetails;
|
|
31
38
|
var xdm = {
|
|
32
|
-
eventType:
|
|
39
|
+
eventType: _eventTypes.default.PING,
|
|
33
40
|
mediaCollection: {
|
|
34
41
|
playhead: (0, _toInteger.default)(playhead),
|
|
35
42
|
sessionID: sessionId,
|
|
@@ -42,7 +49,8 @@ var _default = function _default(_ref) {
|
|
|
42
49
|
}
|
|
43
50
|
});
|
|
44
51
|
return mediaEventManager.trackMediaEvent({
|
|
45
|
-
event: event
|
|
52
|
+
event: event,
|
|
53
|
+
action: ACTION
|
|
46
54
|
}).then(function () {
|
|
47
55
|
mediaSessionCacheManager.updateLastTriggeredEventTS({
|
|
48
56
|
playerId: playerId
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
exports.default = void 0;
|
|
4
|
-
var
|
|
5
|
-
var _createMediaRequestPayload = require("./createMediaRequestPayload");
|
|
4
|
+
var _eventTypes = require("./constants/eventTypes");
|
|
6
5
|
var _createMediaRequest = require("./createMediaRequest");
|
|
7
6
|
var _injectTimestamp = require("../Context/injectTimestamp");
|
|
8
7
|
var _utils = require("../../utils");
|
|
8
|
+
var _request = require("../../utils/request");
|
|
9
9
|
/*
|
|
10
10
|
Copyright 2023 Adobe. All rights reserved.
|
|
11
11
|
This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
@@ -26,15 +26,13 @@ var _default = function _default(_ref) {
|
|
|
26
26
|
return {
|
|
27
27
|
createMediaEvent: function createMediaEvent(_ref2) {
|
|
28
28
|
var options = _ref2.options;
|
|
29
|
-
var
|
|
30
|
-
|
|
31
|
-
var event = {
|
|
32
|
-
xdm: xdm
|
|
33
|
-
};
|
|
29
|
+
var event = eventManager.createEvent();
|
|
30
|
+
var xdm = options.xdm;
|
|
34
31
|
var timestamp = (0, _injectTimestamp.default)(function () {
|
|
35
32
|
return new Date();
|
|
36
33
|
});
|
|
37
|
-
timestamp(
|
|
34
|
+
timestamp(xdm);
|
|
35
|
+
event.setUserXdm(xdm);
|
|
38
36
|
return event;
|
|
39
37
|
},
|
|
40
38
|
createMediaSession: function createMediaSession(options) {
|
|
@@ -43,14 +41,15 @@ var _default = function _default(_ref) {
|
|
|
43
41
|
channel = _config$mediaCollecti.channel,
|
|
44
42
|
version = _config$mediaCollecti.version;
|
|
45
43
|
var event = eventManager.createEvent();
|
|
44
|
+
var sessionDetails = options.xdm.mediaCollection.sessionDetails;
|
|
46
45
|
event.setUserXdm(options.xdm);
|
|
47
46
|
event.mergeXdm({
|
|
48
|
-
eventType:
|
|
47
|
+
eventType: _eventTypes.default.SESSION_START,
|
|
49
48
|
mediaCollection: {
|
|
50
49
|
sessionDetails: {
|
|
51
|
-
playerName:
|
|
52
|
-
channel:
|
|
53
|
-
appVersion:
|
|
50
|
+
playerName: sessionDetails.playerName || playerName,
|
|
51
|
+
channel: sessionDetails.channel || channel,
|
|
52
|
+
appVersion: sessionDetails.appVersion || version
|
|
54
53
|
}
|
|
55
54
|
}
|
|
56
55
|
});
|
|
@@ -69,24 +68,14 @@ var _default = function _default(_ref) {
|
|
|
69
68
|
}),
|
|
70
69
|
playhead = _onBeforeMediaEvent.playhead,
|
|
71
70
|
qoeDataDetails = _onBeforeMediaEvent.qoeDataDetails;
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
return event;
|
|
80
|
-
}
|
|
81
|
-
return (0, _utils.deepAssign)(event, {
|
|
82
|
-
xdm: {
|
|
83
|
-
mediaCollection: {
|
|
84
|
-
playhead: (0, _utils.toInteger)(playhead),
|
|
85
|
-
qoeDataDetails: qoeDataDetails,
|
|
86
|
-
sessionID: sessionID
|
|
87
|
-
}
|
|
71
|
+
event.mergeXdm({
|
|
72
|
+
mediaCollection: {
|
|
73
|
+
playhead: (0, _utils.toInteger)(playhead),
|
|
74
|
+
qoeDataDetails: qoeDataDetails,
|
|
75
|
+
sessionID: sessionID
|
|
88
76
|
}
|
|
89
77
|
});
|
|
78
|
+
return event;
|
|
90
79
|
},
|
|
91
80
|
trackMediaSession: function trackMediaSession(_ref4) {
|
|
92
81
|
var event = _ref4.event,
|
|
@@ -98,14 +87,15 @@ var _default = function _default(_ref) {
|
|
|
98
87
|
});
|
|
99
88
|
},
|
|
100
89
|
trackMediaEvent: function trackMediaEvent(_ref5) {
|
|
101
|
-
var event = _ref5.event
|
|
102
|
-
|
|
103
|
-
var mediaRequestPayload = (0,
|
|
90
|
+
var event = _ref5.event,
|
|
91
|
+
action = _ref5.action;
|
|
92
|
+
var mediaRequestPayload = (0, _request.createDataCollectionRequestPayload)();
|
|
104
93
|
var request = (0, _createMediaRequest.default)({
|
|
105
94
|
mediaRequestPayload: mediaRequestPayload,
|
|
106
95
|
action: action
|
|
107
96
|
});
|
|
108
97
|
mediaRequestPayload.addEvent(event);
|
|
98
|
+
event.finalize();
|
|
109
99
|
return consent.awaitConsent().then(function () {
|
|
110
100
|
return sendEdgeNetworkRequest({
|
|
111
101
|
request: request
|
|
@@ -20,28 +20,28 @@ var _default = function _default() {
|
|
|
20
20
|
var saveHeartbeat = function saveHeartbeat(_ref) {
|
|
21
21
|
var playerId = _ref.playerId,
|
|
22
22
|
heartbeatId = _ref.heartbeatId;
|
|
23
|
-
var
|
|
24
|
-
if (!
|
|
23
|
+
var sessionDetails = mediaSessionCache[playerId];
|
|
24
|
+
if (!sessionDetails) {
|
|
25
25
|
return;
|
|
26
26
|
}
|
|
27
|
-
|
|
27
|
+
sessionDetails.heartbeatId = heartbeatId;
|
|
28
28
|
};
|
|
29
29
|
var stopHeartbeat = function stopHeartbeat(_ref2) {
|
|
30
30
|
var playerId = _ref2.playerId;
|
|
31
|
-
var
|
|
32
|
-
if (!
|
|
31
|
+
var sessionDetails = mediaSessionCache[playerId];
|
|
32
|
+
if (!sessionDetails) {
|
|
33
33
|
return;
|
|
34
34
|
}
|
|
35
|
-
clearInterval(
|
|
36
|
-
|
|
35
|
+
clearInterval(sessionDetails.heartbeatId);
|
|
36
|
+
sessionDetails.heartbeatId = null;
|
|
37
37
|
};
|
|
38
38
|
var updateLastTriggeredEventTS = function updateLastTriggeredEventTS(_ref3) {
|
|
39
39
|
var playerId = _ref3.playerId;
|
|
40
|
-
var
|
|
41
|
-
if (!
|
|
40
|
+
var sessionDetails = mediaSessionCache[playerId];
|
|
41
|
+
if (!sessionDetails) {
|
|
42
42
|
return;
|
|
43
43
|
}
|
|
44
|
-
|
|
44
|
+
sessionDetails.latestTriggeredEvent = Date.now();
|
|
45
45
|
};
|
|
46
46
|
var storeSession = function storeSession(_ref4) {
|
|
47
47
|
var playerId = _ref4.playerId,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
exports.default = void 0;
|
|
4
|
-
var
|
|
4
|
+
var _eventTypes = require("./constants/eventTypes");
|
|
5
5
|
/*
|
|
6
6
|
Copyright 2023 Adobe. All rights reserved.
|
|
7
7
|
This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
@@ -17,12 +17,8 @@ var _default = function _default(_ref) {
|
|
|
17
17
|
var mediaSessionCacheManager = _ref.mediaSessionCacheManager;
|
|
18
18
|
return function (_ref2) {
|
|
19
19
|
var playerId = _ref2.playerId,
|
|
20
|
-
|
|
21
|
-
if (
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
var eventType = xdm.eventType;
|
|
25
|
-
if (eventType === _mediaEvents.default.SESSION_COMPLETE || eventType === _mediaEvents.default.SESSION_END) {
|
|
20
|
+
eventType = _ref2.eventType;
|
|
21
|
+
if (eventType === _eventTypes.default.SESSION_COMPLETE || eventType === _eventTypes.default.SESSION_END) {
|
|
26
22
|
mediaSessionCacheManager.stopHeartbeat({
|
|
27
23
|
playerId: playerId
|
|
28
24
|
});
|
|
@@ -120,24 +120,30 @@ var createMediaCollection = function createMediaCollection(_ref) {
|
|
|
120
120
|
var event = mediaEventManager.createMediaEvent({
|
|
121
121
|
options: options
|
|
122
122
|
});
|
|
123
|
-
var playerId = options.playerId
|
|
123
|
+
var playerId = options.playerId,
|
|
124
|
+
xdm = options.xdm;
|
|
125
|
+
var eventType = xdm.eventType;
|
|
126
|
+
var action = eventType.split(".")[1];
|
|
124
127
|
var _mediaSessionCacheMan = mediaSessionCacheManager.getSession(playerId),
|
|
125
128
|
onBeforeMediaEvent = _mediaSessionCacheMan.onBeforeMediaEvent,
|
|
126
129
|
sessionPromise = _mediaSessionCacheMan.sessionPromise;
|
|
127
130
|
sessionPromise.then(function (result) {
|
|
128
|
-
|
|
131
|
+
mediaEventManager.augmentMediaEvent({
|
|
129
132
|
event: event,
|
|
130
133
|
playerId: playerId,
|
|
131
134
|
onBeforeMediaEvent: onBeforeMediaEvent,
|
|
132
135
|
sessionID: result.sessionId
|
|
133
136
|
});
|
|
134
137
|
return mediaEventManager.trackMediaEvent({
|
|
135
|
-
event:
|
|
138
|
+
event: event,
|
|
139
|
+
action: action
|
|
136
140
|
}).then(function () {
|
|
137
141
|
updateMediaSessionState({
|
|
138
142
|
playerId: playerId,
|
|
139
|
-
|
|
143
|
+
eventType: eventType
|
|
140
144
|
});
|
|
145
|
+
}).catch(function (error) {
|
|
146
|
+
logger.warn("The Media Event of type " + action + " failed.", error);
|
|
141
147
|
});
|
|
142
148
|
});
|
|
143
149
|
}
|
|
@@ -151,8 +157,8 @@ createMediaCollection.configValidators = (0, _validation.objectOf)({
|
|
|
151
157
|
channel: (0, _validation.string)().nonEmpty().required(),
|
|
152
158
|
playerName: (0, _validation.string)().nonEmpty().required(),
|
|
153
159
|
version: (0, _validation.string)(),
|
|
154
|
-
mainPingInterval: (0, _validation.number)().minimum(10).maximum(
|
|
155
|
-
adPingInterval: (0, _validation.number)().minimum(10).maximum(
|
|
160
|
+
mainPingInterval: (0, _validation.number)().minimum(10).maximum(50).default(10),
|
|
161
|
+
adPingInterval: (0, _validation.number)().minimum(10).maximum(50).default(10)
|
|
156
162
|
}).noUnknownFields()
|
|
157
163
|
});
|
|
158
164
|
var _default = createMediaCollection;
|
|
@@ -14,5 +14,5 @@ governing permissions and limitations under the License.
|
|
|
14
14
|
*/
|
|
15
15
|
// The __VERSION__ keyword will be replace at alloy build time with the package.json version.
|
|
16
16
|
// see babel-plugin-version
|
|
17
|
-
var _default = "2.20.0-alpha.
|
|
17
|
+
var _default = "2.20.0-alpha.1";
|
|
18
18
|
exports.default = _default;
|
|
@@ -23,6 +23,7 @@ var _numberValidator = require("./numberValidator");
|
|
|
23
23
|
var _regexpValidator = require("./regexpValidator");
|
|
24
24
|
var _requiredValidator = require("./requiredValidator");
|
|
25
25
|
var _stringValidator = require("./stringValidator");
|
|
26
|
+
var _matchesRegexpValidator = require("./matchesRegexpValidator");
|
|
26
27
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
27
28
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
28
29
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } /*
|
|
@@ -137,6 +138,9 @@ var nonEmptyObject = function nonEmptyObject() {
|
|
|
137
138
|
var regexp = function regexp() {
|
|
138
139
|
return (0, _utils.nullSafeChain)(this, _regexpValidator.default);
|
|
139
140
|
};
|
|
141
|
+
var matches = function matches(regexpPattern) {
|
|
142
|
+
return (0, _utils.nullSafeChain)(this, (0, _matchesRegexpValidator.default)(regexpPattern));
|
|
143
|
+
};
|
|
140
144
|
var unique = function createUnique() {
|
|
141
145
|
return (0, _utils.nullSafeChain)(this, (0, _createUniqueValidator.default)());
|
|
142
146
|
};
|
|
@@ -208,7 +212,8 @@ var string = function string() {
|
|
|
208
212
|
regexp: regexp,
|
|
209
213
|
domain: domain,
|
|
210
214
|
nonEmpty: nonEmptyString,
|
|
211
|
-
unique: unique
|
|
215
|
+
unique: unique,
|
|
216
|
+
matches: matches
|
|
212
217
|
});
|
|
213
218
|
};
|
|
214
219
|
var boundAnyOf = anyOf.bind(base);
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.default = void 0;
|
|
4
|
+
var _utils = require("./utils");
|
|
1
5
|
/*
|
|
2
6
|
Copyright 2023 Adobe. All rights reserved.
|
|
3
7
|
This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
@@ -9,18 +13,10 @@ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTA
|
|
|
9
13
|
OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
14
|
governing permissions and limitations under the License.
|
|
11
15
|
*/
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const payload = createRequestPayload({
|
|
17
|
-
content,
|
|
18
|
-
addIdentity: createAddIdentity(content),
|
|
19
|
-
hasIdentity: createHasIdentity(content)
|
|
20
|
-
});
|
|
21
|
-
payload.addEvent = event => {
|
|
22
|
-
content.events = content.events || [];
|
|
23
|
-
content.events.push(event);
|
|
16
|
+
var _default = function _default(regexp) {
|
|
17
|
+
return function (value, path) {
|
|
18
|
+
(0, _utils.assertValid)(regexp.test(value), value, path, "does not match the " + regexp.toString());
|
|
19
|
+
return value;
|
|
24
20
|
};
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
};
|
|
22
|
+
exports.default = _default;
|
|
@@ -11,10 +11,10 @@ governing permissions and limitations under the License.
|
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
import defer from "../../utils/defer";
|
|
14
|
-
import { AdMetadataKeys, AudioMetadataKeys,
|
|
14
|
+
import { AD_METADATA_KEYS as AdMetadataKeys, AUDIO_METADATA_KEYS as AudioMetadataKeys, EVENT as Event, PLAYER_STATE as PlayerState, STREAM_TYPE as StreamType, MEDIA_OBJECT_KEYS as MediaObjectKey, VIDEO_METADATA_KEYS as VideoMetadataKeys, MEDIA_TYPE as MediaType, MEDIA_EVENTS } from "./media/constants";
|
|
15
15
|
import { deepAssign, isEmptyObject, isNumber } from "../../utils";
|
|
16
16
|
import { adsToXdmKeys, mediaToXdmKeys } from "./media/mediaKeysToXdmConverter";
|
|
17
|
-
import
|
|
17
|
+
import createMediaHelper from "./createMediaHelper";
|
|
18
18
|
const convertSessionDetailsMetadataToXDM = contextData => {
|
|
19
19
|
const customMetadata = [];
|
|
20
20
|
const sessionDetails = {};
|
|
@@ -41,7 +41,7 @@ const createMediaDetailsObject = ({
|
|
|
41
41
|
const mediaDetails = info;
|
|
42
42
|
const customMetadata = [];
|
|
43
43
|
if (context && !isEmptyObject(context)) {
|
|
44
|
-
if (eventType ===
|
|
44
|
+
if (eventType === MEDIA_EVENTS.AdStart) {
|
|
45
45
|
Object.keys(context).forEach(key => {
|
|
46
46
|
if (adsToXdmKeys[key]) {
|
|
47
47
|
mediaDetails.advertisingDetails[mediaToXdmKeys[key]] = context[key];
|
|
@@ -100,20 +100,21 @@ const createGetInstance = ({
|
|
|
100
100
|
const getEventType = ({
|
|
101
101
|
eventType
|
|
102
102
|
}) => {
|
|
103
|
-
if (eventType ===
|
|
104
|
-
return
|
|
103
|
+
if (eventType === MEDIA_EVENTS.BufferComplete) {
|
|
104
|
+
return MEDIA_EVENTS.Play;
|
|
105
105
|
}
|
|
106
|
-
return
|
|
106
|
+
return eventType;
|
|
107
107
|
};
|
|
108
108
|
const trackEvent = ({
|
|
109
109
|
eventType,
|
|
110
110
|
mediaDetails
|
|
111
111
|
}) => {
|
|
112
112
|
return deferSession.promise.then(sessionID => {
|
|
113
|
+
const action = getEventType({
|
|
114
|
+
eventType
|
|
115
|
+
});
|
|
113
116
|
const xdm = {
|
|
114
|
-
eventType:
|
|
115
|
-
eventType
|
|
116
|
-
}),
|
|
117
|
+
eventType: `media.${action}`,
|
|
117
118
|
mediaCollection: {
|
|
118
119
|
sessionID,
|
|
119
120
|
playhead: trackerState.lastPlayhead
|
|
@@ -126,12 +127,13 @@ const createGetInstance = ({
|
|
|
126
127
|
}
|
|
127
128
|
});
|
|
128
129
|
return mediaEventManager.trackMediaEvent({
|
|
129
|
-
event
|
|
130
|
+
event,
|
|
131
|
+
action
|
|
130
132
|
}).then(() => {
|
|
131
133
|
updateLastTimeEventTriggered();
|
|
132
134
|
});
|
|
133
135
|
}).catch(error => {
|
|
134
|
-
logger.
|
|
136
|
+
logger.warn(`An error occurred while sending ${eventType} Media Event.`, error);
|
|
135
137
|
});
|
|
136
138
|
};
|
|
137
139
|
const heartbeatEngine = createHeartbeat({
|
|
@@ -175,18 +177,18 @@ const createGetInstance = ({
|
|
|
175
177
|
},
|
|
176
178
|
trackPlay: () => {
|
|
177
179
|
return trackEvent({
|
|
178
|
-
eventType:
|
|
180
|
+
eventType: MEDIA_EVENTS.Play
|
|
179
181
|
});
|
|
180
182
|
},
|
|
181
183
|
trackPause: () => {
|
|
182
184
|
return trackEvent({
|
|
183
|
-
eventType:
|
|
185
|
+
eventType: MEDIA_EVENTS.Pause
|
|
184
186
|
});
|
|
185
187
|
},
|
|
186
188
|
trackSessionEnd: () => {
|
|
187
189
|
clearInterval(ticker);
|
|
188
190
|
return trackEvent({
|
|
189
|
-
eventType:
|
|
191
|
+
eventType: MEDIA_EVENTS.SessionEnd
|
|
190
192
|
}).then(() => {
|
|
191
193
|
deferSession = null;
|
|
192
194
|
});
|
|
@@ -194,7 +196,7 @@ const createGetInstance = ({
|
|
|
194
196
|
trackComplete: () => {
|
|
195
197
|
clearInterval(ticker);
|
|
196
198
|
return trackEvent({
|
|
197
|
-
eventType:
|
|
199
|
+
eventType: MEDIA_EVENTS.SessionComplete
|
|
198
200
|
});
|
|
199
201
|
},
|
|
200
202
|
trackError: errorId => {
|
|
@@ -207,7 +209,7 @@ const createGetInstance = ({
|
|
|
207
209
|
errorDetails
|
|
208
210
|
};
|
|
209
211
|
return trackEvent({
|
|
210
|
-
eventType:
|
|
212
|
+
eventType: MEDIA_EVENTS.SessionEnd,
|
|
211
213
|
mediaDetails
|
|
212
214
|
});
|
|
213
215
|
},
|
|
@@ -250,6 +252,9 @@ export const createMediaAnalyticsTracker = ({
|
|
|
250
252
|
mediaEventManager
|
|
251
253
|
}) => {
|
|
252
254
|
logger.info("Media Analytics Component was configured");
|
|
255
|
+
const mediaAnalyticsHelper = createMediaHelper({
|
|
256
|
+
logger
|
|
257
|
+
});
|
|
253
258
|
return {
|
|
254
259
|
getInstance: () => {
|
|
255
260
|
return createGetInstance({
|
|
@@ -266,11 +271,6 @@ export const createMediaAnalyticsTracker = ({
|
|
|
266
271
|
VideoMetadataKeys,
|
|
267
272
|
AudioMetadataKeys,
|
|
268
273
|
AdMetadataKeys,
|
|
269
|
-
|
|
270
|
-
createAdBreakObject,
|
|
271
|
-
createAdObject,
|
|
272
|
-
createChapterObject,
|
|
273
|
-
createStateObject,
|
|
274
|
-
createQoEObject
|
|
274
|
+
...mediaAnalyticsHelper
|
|
275
275
|
};
|
|
276
276
|
};
|