Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | 1x 1x 1x 1x 1x 1x 1x 15x 78x 78x 3x 3x 1x 3x 3x 3x 3x 3x 3x 3x 3x | import pathOr from 'ramda/src/pathOr';
import { version } from '../../../package.json';
const playbackAssetDataMap = {
articleId: ['id'],
awayContestantId: ['contestants', 1, 'id'],
awayContestantName: ['contestants', 1, 'title'],
competitionId: ['competition', 'id'],
competitionName: ['competition', 'title'],
contentId: ['id'],
contentName: ['title'],
contentType: ['type', 'name'],
fixtureId: ['eventId'],
homeContestantId: ['contestants', 0, 'id'],
homeContestantName: ['contestants', 0, 'title'],
publicationDate: ['pubDate'],
sportId: ['sport', 'id'],
sportName: ['sport', 'title'],
stageId: ['stage', 'id'],
stageName: ['stage', 'title'],
venueId: ['venue', 'id'],
venueName: ['venue', 'title'],
};
const playbackMediaDataMap = {
videoType: ['videoType'],
};
const assetDataMap = {
expireDate: ['expirationDate'],
};
const configDataMap = {
commentatoryLanguage: ['environment', 'language'],
interfaceLanguage: ['environment', 'language'],
};
const windowDataMap = {
applicationType: ['dazn', 'platform'],
daznUserAgent: ['navigator', 'userAgent'],
countryCode: ['dazn', 'userProfile', 'UserCountryCode'],
site: ['location', 'hostname'],
};
const extractMetadataWithDataMap = (source, dataMap) =>
Object.keys(dataMap).reduce((acc, key) => {
acc[key] = pathOr(null, dataMap[key], source) || `Unknown ${key}`;
return acc;
}, {});
const getAccountType = authToken => JSON.parse(atob(authToken.split('.')[1])).userstatus;
const getProductionValue = categories => categories.map(e => e.name).join(', ');
const deriveConvivaCustomMetadata = (latestPlayback, latestConfig, latestAsset, window) => {
const playbackAssetMetadata = extractMetadataWithDataMap(latestPlayback.asset, playbackAssetDataMap);
const playbackMediaMetadata = extractMetadataWithDataMap(latestPlayback.media, playbackMediaDataMap);
const assetMetadata = extractMetadataWithDataMap(latestAsset, assetDataMap);
const configMetadata = extractMetadataWithDataMap(latestConfig, configDataMap);
const windowMetadata = extractMetadataWithDataMap(window, windowDataMap);
const metadata = {
applicationVersion: version,
autoPlay: 'true', // NB: Conviva requires that all custom meta tags be strings
accountType: getAccountType(latestConfig.environment.authToken),
productionValue: getProductionValue(latestPlayback.asset.categories),
};
const unknownValues = {
deviceCarrier: 'Unknown deviceCarrier',
deviceConnectionType: 'Unknown deviceConnectionType',
};
return Object.assign(
playbackAssetMetadata,
playbackMediaMetadata,
assetMetadata,
configMetadata,
windowMetadata,
metadata,
unknownValues,
);
};
export {
deriveConvivaCustomMetadata as default,
extractMetadataWithDataMap,
getAccountType,
getProductionValue,
};
|