@phantomstudios/ft-lib 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/.babelrc +6 -0
  2. package/.eslintrc +58 -0
  3. package/.github/CODEOWNERS +1 -0
  4. package/.github/workflows/pr.yml +31 -0
  5. package/.github/workflows/release.yml +44 -0
  6. package/.nvmrc +1 -0
  7. package/.prettierignore +5 -0
  8. package/CODE_OF_CONDUCT.md +76 -0
  9. package/CONTRIBUTING.md +48 -0
  10. package/LICENSE +21 -0
  11. package/README.md +158 -0
  12. package/SUPPORT.md +4 -0
  13. package/jest.config.js +24 -0
  14. package/lib/FTTracking/index.d.ts +24 -0
  15. package/lib/FTTracking/index.d.ts.map +1 -0
  16. package/lib/FTTracking/index.js +69 -0
  17. package/lib/FTTracking/index.js.map +1 -0
  18. package/lib/consentMonitor/index.d.ts +19 -0
  19. package/lib/consentMonitor/index.d.ts.map +1 -0
  20. package/lib/consentMonitor/index.js +117 -0
  21. package/lib/consentMonitor/index.js.map +1 -0
  22. package/lib/gaTracker/index.d.ts +13 -0
  23. package/lib/gaTracker/index.d.ts.map +1 -0
  24. package/lib/gaTracker/index.js +120 -0
  25. package/lib/gaTracker/index.js.map +1 -0
  26. package/lib/index.d.ts +9 -0
  27. package/lib/index.d.ts.map +1 -0
  28. package/lib/index.js +18 -0
  29. package/lib/index.js.map +1 -0
  30. package/lib/oTracker/index.d.ts +14 -0
  31. package/lib/oTracker/index.d.ts.map +1 -0
  32. package/lib/oTracker/index.js +114 -0
  33. package/lib/oTracker/index.js.map +1 -0
  34. package/lib/permutiveVideoUtils/index.d.ts +12 -0
  35. package/lib/permutiveVideoUtils/index.d.ts.map +1 -0
  36. package/lib/permutiveVideoUtils/index.js +59 -0
  37. package/lib/permutiveVideoUtils/index.js.map +1 -0
  38. package/lib/reactPlayerTracking/index.d.ts +30 -0
  39. package/lib/reactPlayerTracking/index.d.ts.map +1 -0
  40. package/lib/reactPlayerTracking/index.js +85 -0
  41. package/lib/reactPlayerTracking/index.js.map +1 -0
  42. package/lib/utils/attention.d.ts +20 -0
  43. package/lib/utils/attention.d.ts.map +1 -0
  44. package/lib/utils/attention.js +142 -0
  45. package/lib/utils/attention.js.map +1 -0
  46. package/lib/utils/cookies.d.ts +2 -0
  47. package/lib/utils/cookies.d.ts.map +1 -0
  48. package/lib/utils/cookies.js +14 -0
  49. package/lib/utils/cookies.js.map +1 -0
  50. package/lib/utils/getTrace.d.ts +6 -0
  51. package/lib/utils/getTrace.d.ts.map +1 -0
  52. package/lib/utils/getTrace.js +109 -0
  53. package/lib/utils/getTrace.js.map +1 -0
  54. package/lib/utils/intersectionObserverPolyfill.d.ts +1 -0
  55. package/lib/utils/intersectionObserverPolyfill.d.ts.map +1 -0
  56. package/lib/utils/intersectionObserverPolyfill.js +421 -0
  57. package/lib/utils/intersectionObserverPolyfill.js.map +1 -0
  58. package/lib/utils/scroll.d.ts +18 -0
  59. package/lib/utils/scroll.d.ts.map +1 -0
  60. package/lib/utils/scroll.js +75 -0
  61. package/lib/utils/scroll.js.map +1 -0
  62. package/lib/utils/yupValidator.d.ts +87 -0
  63. package/lib/utils/yupValidator.d.ts.map +1 -0
  64. package/lib/utils/yupValidator.js +189 -0
  65. package/lib/utils/yupValidator.js.map +1 -0
  66. package/lib/ytIframeTracking/index.d.ts +27 -0
  67. package/lib/ytIframeTracking/index.d.ts.map +1 -0
  68. package/lib/ytIframeTracking/index.js +165 -0
  69. package/lib/ytIframeTracking/index.js.map +1 -0
  70. package/package.json +75 -0
  71. package/src/FTTracking/index.ts +74 -0
  72. package/src/consentMonitor/index.ts +120 -0
  73. package/src/gaTracker/index.ts +136 -0
  74. package/src/index.ts +12 -0
  75. package/src/oTracker/index.ts +122 -0
  76. package/src/permutiveVideoUtils/index.ts +53 -0
  77. package/src/reactPlayerTracking/index.ts +105 -0
  78. package/src/types.d.ts +33 -0
  79. package/src/utils/attention.js +138 -0
  80. package/src/utils/cookies.js +9 -0
  81. package/src/utils/getTrace.js +122 -0
  82. package/src/utils/intersectionObserverPolyfill.js +470 -0
  83. package/src/utils/scroll.ts +94 -0
  84. package/src/utils/yupValidator.ts +205 -0
  85. package/src/ytIframeTracking/index.ts +210 -0
  86. package/test/index.test.tsx +63 -0
  87. package/tsconfig.json +26 -0
  88. package/tsconfig.test.json +6 -0
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.consentMonitor = void 0;
7
+ var debug_1 = __importDefault(require("debug"));
8
+ var debug = (0, debug_1.default)("@phntms/ft-lib");
9
+ var DEFAULT_DEV_HOSTS = ["localhost", "phq", ".app", "preview"];
10
+ var consentMonitor = /** @class */ (function () {
11
+ function consentMonitor(hostname, devHosts) {
12
+ var _this = this;
13
+ this._consent = false;
14
+ this._isDevEnvironment = false;
15
+ this._isInitialized = false;
16
+ this.getCookieValue = function (name) { var _a; return ((_a = document.cookie.match("(^|;)\\s*" + name + "\\s*=\\s*([^;]+)")) === null || _a === void 0 ? void 0 : _a.pop()) || ""; };
17
+ this.init = function () {
18
+ _this.cookieConsentTest();
19
+ setInterval(_this.cookieConsentTest, 3000);
20
+ //Simulate cookie consent behaviour in non-prod environments
21
+ _this._devHosts.map(function (devHost) {
22
+ return _this._hostname.includes(devHost) && _this.setDevCookieHandler();
23
+ });
24
+ };
25
+ this.cookieConsentTest = function () {
26
+ if (window.permutive) {
27
+ if (!_this._isInitialized) {
28
+ if (_this.getCookieValue("FTConsent").includes("behaviouraladsOnsite%3Aon")) {
29
+ _this.permutiveConsentOn();
30
+ }
31
+ else {
32
+ _this.permutiveConsentOff();
33
+ }
34
+ _this._isInitialized = true;
35
+ }
36
+ else if (_this.getCookieValue("FTConsent").includes("behaviouraladsOnsite%3Aon") &&
37
+ !_this.consent) {
38
+ debug("setting permutive tracking consent: on");
39
+ _this.permutiveConsentOn();
40
+ }
41
+ else if (!_this.getCookieValue("FTConsent").includes("behaviouraladsOnsite%3Aon") &&
42
+ _this.consent) {
43
+ debug("setting permutive tracking consent: off");
44
+ _this.permutiveConsentOff();
45
+ }
46
+ }
47
+ };
48
+ this.setDevCookieHandler = function () {
49
+ _this._isDevEnvironment = true;
50
+ debug("setting development environment from host match");
51
+ var oCookieMessage = document.getElementsByClassName("o-cookie-message")[0];
52
+ if (oCookieMessage) {
53
+ var onCookieMessageAct_1 = function () {
54
+ debug("setting development FT consent cookies");
55
+ document.cookie = "FTConsent=behaviouraladsOnsite%3Aon";
56
+ document.cookie = "FTCookieConsentGDPR=true";
57
+ oCookieMessage.removeEventListener("oCookieMessage.act", onCookieMessageAct_1, false);
58
+ };
59
+ oCookieMessage.addEventListener("oCookieMessage.act", onCookieMessageAct_1);
60
+ }
61
+ };
62
+ this.permutiveConsentOn = function () {
63
+ window.permutive.consent({
64
+ opt_in: true,
65
+ token: "behaviouraladsOnsite:on",
66
+ });
67
+ _this._consent = true;
68
+ };
69
+ this.permutiveConsentOff = function () {
70
+ window.permutive.consent({ opt_in: false });
71
+ _this._consent = false;
72
+ };
73
+ if (Array.isArray(devHosts)) {
74
+ this._devHosts = devHosts.concat(DEFAULT_DEV_HOSTS);
75
+ }
76
+ else if (devHosts === undefined) {
77
+ this._devHosts = DEFAULT_DEV_HOSTS;
78
+ }
79
+ else {
80
+ this._devHosts = DEFAULT_DEV_HOSTS;
81
+ this._devHosts.push(devHosts);
82
+ }
83
+ this._hostname = hostname || window.location.hostname;
84
+ this.init();
85
+ }
86
+ Object.defineProperty(consentMonitor.prototype, "consent", {
87
+ get: function () {
88
+ return this._consent;
89
+ },
90
+ enumerable: false,
91
+ configurable: true
92
+ });
93
+ Object.defineProperty(consentMonitor.prototype, "devHosts", {
94
+ get: function () {
95
+ return this._devHosts;
96
+ },
97
+ enumerable: false,
98
+ configurable: true
99
+ });
100
+ Object.defineProperty(consentMonitor.prototype, "isDevEnvironment", {
101
+ get: function () {
102
+ return this._isDevEnvironment;
103
+ },
104
+ enumerable: false,
105
+ configurable: true
106
+ });
107
+ Object.defineProperty(consentMonitor.prototype, "isInitialized", {
108
+ get: function () {
109
+ return this._isInitialized;
110
+ },
111
+ enumerable: false,
112
+ configurable: true
113
+ });
114
+ return consentMonitor;
115
+ }());
116
+ exports.consentMonitor = consentMonitor;
117
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/consentMonitor/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { TrackingOptions } from "../FTTracking";
2
+ export declare class gaTracker {
3
+ options: TrackingOptions;
4
+ constructor(options: TrackingOptions);
5
+ GTMEventDispatcher(category: string, action: string, label: string): void;
6
+ GTMVirtualPageView(pageUrl: string, pageTitle: string): void;
7
+ GtagEventDispatcher(category: string, action: string, label: string): void;
8
+ addDataAttributesListener(): void;
9
+ setUpFTNavigationLinksTracking(): void;
10
+ setUpFTNavigationSearchTracking(category: string, action: string): void;
11
+ setupFooterLinksTracking(): void;
12
+ }
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/gaTracker/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAKhD,qBAAa,SAAS;IACpB,OAAO,kBAAC;gBACI,OAAO,EAAE,eAAe;IAQ7B,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAclE,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAQrD,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAQ1E,yBAAyB;IA4BzB,8BAA8B;IAc9B,+BAA+B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAmChE,wBAAwB;CAazB"}
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.gaTracker = void 0;
4
+ var yupValidator_1 = require("../utils/yupValidator");
5
+ var HEADER_CATEGORY = "Header";
6
+ var HEADER_SEARCH_ACTION = "Engagement - Search";
7
+ var gaTracker = /** @class */ (function () {
8
+ function gaTracker(options) {
9
+ this.options = options;
10
+ this.setUpFTNavigationLinksTracking();
11
+ this.addDataAttributesListener();
12
+ this.setUpFTNavigationSearchTracking(HEADER_CATEGORY, HEADER_SEARCH_ACTION);
13
+ this.setupFooterLinksTracking();
14
+ }
15
+ gaTracker.prototype.GTMEventDispatcher = function (category, action, label) {
16
+ (0, yupValidator_1.validateGTMCustomEvent)({ category: category, action: action, label: label });
17
+ //from channels - sets event categories on window on certain pages..replace?
18
+ if (category === "<category>" && window.gtmCategory) {
19
+ category = window.gtmCategory;
20
+ }
21
+ window.dataLayer.push({
22
+ event: "customEvent",
23
+ category: category,
24
+ action: action,
25
+ label: label,
26
+ });
27
+ };
28
+ gaTracker.prototype.GTMVirtualPageView = function (pageUrl, pageTitle) {
29
+ window.dataLayer.push({
30
+ event: "virtualPageView",
31
+ pageUrl: pageUrl,
32
+ pageTitle: pageTitle,
33
+ });
34
+ };
35
+ gaTracker.prototype.GtagEventDispatcher = function (category, action, label) {
36
+ (0, yupValidator_1.validateGTMCustomEvent)({ category: category, action: action, label: label });
37
+ window.gtag("event", action, {
38
+ event_category: category,
39
+ event_label: label,
40
+ });
41
+ };
42
+ gaTracker.prototype.addDataAttributesListener = function () {
43
+ var _this = this;
44
+ document.body.addEventListener("click", function (evt) {
45
+ //get nearest element with data-gadl attribute
46
+ var elm = evt.target.closest("[data-gadl]");
47
+ var gaEventString = elm === null || elm === void 0 ? void 0 : elm.getAttribute("data-gadl");
48
+ if (!gaEventString)
49
+ return;
50
+ var _a = gaEventString.split("|"), category = _a[0], action = _a[1], label = _a[2];
51
+ //TODO validate event fields
52
+ if (typeof window !== "undefined") {
53
+ //TBC - GTM customEvent tag vs standard UA event push?
54
+ if (_this.options.isCustomGTMEvent) {
55
+ _this.GTMEventDispatcher(category, action, label || window.location.pathname //use pathname if label section has not been defined
56
+ );
57
+ }
58
+ else {
59
+ _this.GtagEventDispatcher(category, action, label || window.location.pathname);
60
+ }
61
+ }
62
+ });
63
+ };
64
+ gaTracker.prototype.setUpFTNavigationLinksTracking = function () {
65
+ var FTNavigationLinks = Array.from(document.querySelectorAll(".o-header__drawer-menu-link"));
66
+ if (FTNavigationLinks) {
67
+ FTNavigationLinks.map(function (navLink) {
68
+ var trackingValue = "Header|Engagement - Hamburger|".concat(document.URL, " - ").concat(navLink.href);
69
+ navLink.setAttribute("data-gadl", trackingValue);
70
+ });
71
+ }
72
+ };
73
+ gaTracker.prototype.setUpFTNavigationSearchTracking = function (category, action) {
74
+ var _this = this;
75
+ var searchForm = document.querySelector(".o-header__search-form");
76
+ if (searchForm) {
77
+ searchForm.addEventListener("submit", function (event) {
78
+ var _a;
79
+ event.preventDefault();
80
+ var searchBarContent = (_a = document.querySelector(".o-header__search-term")) === null || _a === void 0 ? void 0 : _a.value;
81
+ if (typeof window !== "undefined") {
82
+ if (_this.options.isCustomGTMEvent) {
83
+ window.dataLayer.push({
84
+ event: "customEvent",
85
+ category: category,
86
+ action: "".concat(action, ": ").concat(searchBarContent),
87
+ label: window.location.pathname,
88
+ eventCallback: function () {
89
+ searchForm.submit();
90
+ },
91
+ eventTimeout: 2000,
92
+ });
93
+ }
94
+ else {
95
+ window.gtag("event", action, {
96
+ event_category: category,
97
+ event_label: searchBarContent,
98
+ event_callback: function () {
99
+ searchForm.submit();
100
+ },
101
+ event_timeout: 2000,
102
+ });
103
+ }
104
+ }
105
+ });
106
+ }
107
+ };
108
+ gaTracker.prototype.setupFooterLinksTracking = function () {
109
+ var FTFooterLinks = Array.from(document.querySelectorAll(".o-footer__legal-links li a"));
110
+ if (FTFooterLinks) {
111
+ FTFooterLinks.forEach(function (footerLink) {
112
+ var trackingValue = "Footer|Click - Footer Nav - ".concat(footerLink.href, "|").concat(document.URL);
113
+ footerLink.setAttribute("data-gadl", trackingValue);
114
+ });
115
+ }
116
+ };
117
+ return gaTracker;
118
+ }());
119
+ exports.gaTracker = gaTracker;
120
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gaTracker/index.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ export { consentMonitor } from "./consentMonitor";
2
+ export { permutiveVideoUtils } from "./permutiveVideoUtils";
3
+ export { reactPlayerTracking } from "./reactPlayerTracking";
4
+ export { gaTracker } from "./gaTracker";
5
+ export { oTracker } from "./oTracker";
6
+ export { ytIframeTracking } from "./ytIframeTracking";
7
+ export { FTTracking, TrackingOptions } from "./FTTracking";
8
+ export { ConfigType, OrigamiEventType, GTMCustomEventType, } from "./utils/yupValidator";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC"}
package/lib/index.js ADDED
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FTTracking = exports.ytIframeTracking = exports.oTracker = exports.gaTracker = exports.reactPlayerTracking = exports.permutiveVideoUtils = exports.consentMonitor = void 0;
4
+ var consentMonitor_1 = require("./consentMonitor");
5
+ Object.defineProperty(exports, "consentMonitor", { enumerable: true, get: function () { return consentMonitor_1.consentMonitor; } });
6
+ var permutiveVideoUtils_1 = require("./permutiveVideoUtils");
7
+ Object.defineProperty(exports, "permutiveVideoUtils", { enumerable: true, get: function () { return permutiveVideoUtils_1.permutiveVideoUtils; } });
8
+ var reactPlayerTracking_1 = require("./reactPlayerTracking");
9
+ Object.defineProperty(exports, "reactPlayerTracking", { enumerable: true, get: function () { return reactPlayerTracking_1.reactPlayerTracking; } });
10
+ var gaTracker_1 = require("./gaTracker");
11
+ Object.defineProperty(exports, "gaTracker", { enumerable: true, get: function () { return gaTracker_1.gaTracker; } });
12
+ var oTracker_1 = require("./oTracker");
13
+ Object.defineProperty(exports, "oTracker", { enumerable: true, get: function () { return oTracker_1.oTracker; } });
14
+ var ytIframeTracking_1 = require("./ytIframeTracking");
15
+ Object.defineProperty(exports, "ytIframeTracking", { enumerable: true, get: function () { return ytIframeTracking_1.ytIframeTracking; } });
16
+ var FTTracking_1 = require("./FTTracking");
17
+ Object.defineProperty(exports, "FTTracking", { enumerable: true, get: function () { return FTTracking_1.FTTracking; } });
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA;AAC5B,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA;AAC5B,yCAAwC;AAA/B,sGAAA,SAAS,OAAA;AAClB,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AACzB,2CAA2D;AAAlD,wGAAA,UAAU,OAAA"}
@@ -0,0 +1,14 @@
1
+ import { TrackingOptions } from "../FTTracking";
2
+ import { ConfigType, OrigamiEventType } from "../utils/yupValidator";
3
+ export declare class oTracker {
4
+ private _config;
5
+ options: TrackingOptions;
6
+ constructor(config: ConfigType, options: TrackingOptions);
7
+ set config(c: ConfigType);
8
+ get config(): ConfigType;
9
+ eventDispatcher(detail: OrigamiEventType): void;
10
+ broadcastPageView(): void;
11
+ broadcastBrandedContent(): void;
12
+ OTrackingHandler(): void;
13
+ }
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/oTracker/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD,OAAO,EAIL,UAAU,EACV,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAK/B,qBAAa,QAAQ;IACnB,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,EAAE,eAAe,CAAC;gBAEb,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe;IA4BxD,IAAI,MAAM,CAAC,CAAC,EAAE,UAAU,EAEvB;IACD,IAAI,MAAM,IAHI,UAAU,CAKvB;IAEM,eAAe,CAAC,MAAM,EAAE,gBAAgB;IAaxC,iBAAiB;IAQjB,uBAAuB;IAa9B,gBAAgB;CAgCjB"}
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.oTracker = void 0;
18
+ var o_tracking_1 = __importDefault(require("@financial-times/o-tracking"));
19
+ var cookies_1 = require("../utils/cookies");
20
+ var getTrace_1 = __importDefault(require("../utils/getTrace"));
21
+ var yupValidator_1 = require("../utils/yupValidator");
22
+ /* oTracking setup for server-rendered (i.e. Wagtail) sites
23
+ The config object is read from the server-rendered o-tracking-data element
24
+ */
25
+ var oTracker = /** @class */ (function () {
26
+ function oTracker(config, options) {
27
+ this._config = (0, yupValidator_1.parseConfig)(config);
28
+ (0, yupValidator_1.validateConfig)(this._config);
29
+ this._config.source_id = o_tracking_1.default.getRootID();
30
+ this.options = options;
31
+ //init config data
32
+ var configData = {
33
+ server: "https://spoor-api.ft.com/px.gif",
34
+ context: __assign({}, this._config),
35
+ user: {
36
+ ft_session: (0, cookies_1.getValueFromCookie)(/FTSession=([^;]+)/),
37
+ },
38
+ };
39
+ o_tracking_1.default.init(configData);
40
+ //setup listeners
41
+ this.OTrackingHandler();
42
+ //send Origami DomLoaded event
43
+ //document.dispatchEvent(new CustomEvent("o.DOMContentLoaded")); //TODO this isnt needed on next and breaks the cookie-message eventhandlers - is it needed for the server sites?
44
+ //send page hits
45
+ this.broadcastPageView();
46
+ this.broadcastBrandedContent();
47
+ }
48
+ Object.defineProperty(oTracker.prototype, "config", {
49
+ get: function () {
50
+ return this._config;
51
+ },
52
+ set: function (c) {
53
+ this._config = c;
54
+ },
55
+ enumerable: false,
56
+ configurable: true
57
+ });
58
+ oTracker.prototype.eventDispatcher = function (detail) {
59
+ if (typeof detail === "object" && detail.category && detail.action) {
60
+ (0, yupValidator_1.validateOrigamiEvent)(detail);
61
+ detail.app = this.config.app;
62
+ detail.product = this.config.product;
63
+ document.body.dispatchEvent(new CustomEvent("oTracking.event", { detail: detail, bubbles: true }));
64
+ }
65
+ else {
66
+ throw "Invalid event type";
67
+ }
68
+ };
69
+ oTracker.prototype.broadcastPageView = function () {
70
+ o_tracking_1.default.page({
71
+ app: this.config.app,
72
+ product: this.config.product,
73
+ title: document.title,
74
+ });
75
+ };
76
+ oTracker.prototype.broadcastBrandedContent = function () {
77
+ document.body.dispatchEvent(new CustomEvent("oTracking.event", {
78
+ detail: __assign(__assign({}, this.config), { action: "view", category: "brandedContent" }),
79
+ bubbles: true,
80
+ }));
81
+ };
82
+ oTracker.prototype.OTrackingHandler = function () {
83
+ var _this = this;
84
+ document.body.addEventListener("click", function (event) {
85
+ var trackableElement = event
86
+ .composedPath()
87
+ .find(function (elm) {
88
+ return elm instanceof HTMLElement &&
89
+ elm.hasAttribute &&
90
+ elm.hasAttribute("data-o-event");
91
+ });
92
+ if (trackableElement && trackableElement instanceof HTMLElement) {
93
+ var data = trackableElement.getAttribute("data-o-event");
94
+ var detail_1 = {};
95
+ var trace = (0, getTrace_1.default)(trackableElement).trace;
96
+ if (data) {
97
+ data.split("|").forEach(function (item) {
98
+ var kv = item.split(":");
99
+ //TODO
100
+ // @ts-ignore
101
+ detail_1[kv[0]] = kv[1];
102
+ });
103
+ //TODO
104
+ // @ts-ignore
105
+ detail_1.domPathTokens = trace;
106
+ }
107
+ _this.eventDispatcher(detail_1);
108
+ }
109
+ });
110
+ };
111
+ return oTracker;
112
+ }());
113
+ exports.oTracker = oTracker;
114
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/oTracker/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export declare class permutiveVideoUtils {
2
+ protected progressPermutiveMilestones: number[];
3
+ protected _campaign: string;
4
+ protected _title: string;
5
+ protected _videoId: string;
6
+ constructor(campaign: string, title: string, videoId?: string);
7
+ set videoId(vid: string);
8
+ get videoId(): string;
9
+ get remainingProgress(): number[];
10
+ emitPermutiveProgressEvent: (duration: number, currentTime: number, interval?: any) => void;
11
+ }
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/permutiveVideoUtils/index.ts"],"names":[],"mappings":"AAEA,qBAAa,mBAAmB;IAC9B,SAAS,CAAC,2BAA2B,EAAE,MAAM,EAAE,CAA2B;IAC1E,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,QAAQ,SAAC;gBAEP,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,SAAK;IAMzD,IAAI,OAAO,CAAC,GAAG,EAAE,MAAM,EAEtB;IACD,IAAI,OAAO,IAHM,MAAM,CAKtB;IAED,IAAI,iBAAiB,IAAI,MAAM,EAAE,CAEhC;IAED,0BAA0B,aACd,MAAM,eACH,MAAM,aACT,GAAG,UAuBb;CACH"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.permutiveVideoUtils = void 0;
7
+ var debug_1 = __importDefault(require("debug"));
8
+ var debug = (0, debug_1.default)("@phntms/ft-lib");
9
+ var permutiveVideoUtils = /** @class */ (function () {
10
+ function permutiveVideoUtils(campaign, title, videoId) {
11
+ if (videoId === void 0) { videoId = ""; }
12
+ var _this = this;
13
+ this.progressPermutiveMilestones = [0, 0.25, 0.5, 0.75, 1];
14
+ this.emitPermutiveProgressEvent = function (duration, currentTime, interval) {
15
+ if (interval === void 0) { interval = undefined; }
16
+ var progress = currentTime / (Math.floor(duration) - 1);
17
+ while (progress >= _this.progressPermutiveMilestones[0] &&
18
+ currentTime > 0 &&
19
+ window.permutive) {
20
+ debug("Emit videoEngagement permutive event");
21
+ window.permutive.track("VideoEngagement", {
22
+ campaign: _this._campaign,
23
+ createdAt: new Date().toISOString(),
24
+ duration: Math.floor(duration),
25
+ title: _this._title,
26
+ videoId: _this._videoId,
27
+ progress: _this.progressPermutiveMilestones[0],
28
+ });
29
+ _this.progressPermutiveMilestones.shift();
30
+ if (_this.progressPermutiveMilestones.length === 0 && interval) {
31
+ window.clearInterval(interval);
32
+ }
33
+ }
34
+ };
35
+ this._campaign = campaign;
36
+ this._title = title;
37
+ this._videoId = videoId;
38
+ }
39
+ Object.defineProperty(permutiveVideoUtils.prototype, "videoId", {
40
+ get: function () {
41
+ return this._videoId;
42
+ },
43
+ set: function (vid) {
44
+ this._videoId = vid;
45
+ },
46
+ enumerable: false,
47
+ configurable: true
48
+ });
49
+ Object.defineProperty(permutiveVideoUtils.prototype, "remainingProgress", {
50
+ get: function () {
51
+ return this.progressPermutiveMilestones;
52
+ },
53
+ enumerable: false,
54
+ configurable: true
55
+ });
56
+ return permutiveVideoUtils;
57
+ }());
58
+ exports.permutiveVideoUtils = permutiveVideoUtils;
59
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/permutiveVideoUtils/index.ts"],"names":[],"mappings":";;;;;;AAAA,gDAA0B;AAC1B,IAAM,KAAK,GAAG,IAAA,eAAK,EAAC,gBAAgB,CAAC,CAAC;AACtC;IAME,6BAAY,QAAgB,EAAE,KAAa,EAAE,OAAY;QAAZ,wBAAA,EAAA,YAAY;QAAzD,iBAIC;QATS,gCAA2B,GAAa,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAsB1E,+BAA0B,GAAG,UAC3B,QAAgB,EAChB,WAAmB,EACnB,QAAyB;YAAzB,yBAAA,EAAA,oBAAyB;YAEzB,IAAM,QAAQ,GAAG,WAAW,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YAE1D,OACE,QAAQ,IAAI,KAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;gBAC/C,WAAW,GAAG,CAAC;gBACf,MAAM,CAAC,SAAS,EAChB;gBACA,KAAK,CAAC,sCAAsC,CAAC,CAAC;gBAC9C,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,iBAAiB,EAAE;oBACxC,QAAQ,EAAE,KAAI,CAAC,SAAS;oBACxB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;oBAC9B,KAAK,EAAE,KAAI,CAAC,MAAM;oBAClB,OAAO,EAAE,KAAI,CAAC,QAAQ;oBACtB,QAAQ,EAAE,KAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;iBAC9C,CAAC,CAAC;gBACH,KAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,CAAC;gBACzC,IAAI,KAAI,CAAC,2BAA2B,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,EAAE;oBAC7D,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;iBAChC;aACF;QACH,CAAC,CAAC;QA1CA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,sBAAI,wCAAO;aAGX;YACE,OAAO,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC;aALD,UAAY,GAAW;YACrB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QACtB,CAAC;;;OAAA;IAKD,sBAAI,kDAAiB;aAArB;YACE,OAAO,IAAI,CAAC,2BAA2B,CAAC;QAC1C,CAAC;;;OAAA;IA6BH,0BAAC;AAAD,CAAC,AAlDD,IAkDC;AAlDY,kDAAmB"}
@@ -0,0 +1,30 @@
1
+ import { FTTracking } from "../FTTracking";
2
+ import { permutiveVideoUtils } from "../permutiveVideoUtils";
3
+ interface PlayerProgressEvent {
4
+ played: number;
5
+ loaded: number;
6
+ playedSeconds: number;
7
+ loadedSeconds: number;
8
+ }
9
+ export declare class reactPlayerTracking {
10
+ duration: number;
11
+ playedSeconds: number;
12
+ playedPercent: number;
13
+ videoTitle: string;
14
+ videoUrl: string;
15
+ /** 100% is fired with ended event */
16
+ GA_milestones: number[];
17
+ oTracking_milestones: number[];
18
+ FTTracker: FTTracking;
19
+ permutiveTracker: permutiveVideoUtils | undefined;
20
+ constructor(FTTracker: FTTracking, videoTitle: string, videoUrl: string);
21
+ setDuration: (duration: number) => void;
22
+ sendGAEvent: (action: string) => void;
23
+ sendoTrackingEvent: (action: string, progress?: number) => void;
24
+ trackPlay: () => void;
25
+ trackPause: () => void;
26
+ trackEnded: () => void;
27
+ trackProgress: (reactPlayerProgress: PlayerProgressEvent) => void;
28
+ }
29
+ export {};
30
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reactPlayerTracking/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,UAAU,mBAAmB;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB;AACD,qBAAa,mBAAmB;IAC9B,QAAQ,SAAK;IACb,aAAa,SAAK;IAClB,aAAa,SAAK;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IAEjB,qCAAqC;IACrC,aAAa,EAAE,MAAM,EAAE,CAAmB;IAC1C,oBAAoB,EAAE,MAAM,EAAE,CAAgB;IAC9C,SAAS,EAAE,UAAU,CAAC;IACtB,gBAAgB,EAAE,mBAAmB,GAAG,SAAS,CAAC;gBAEtC,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAYvE,WAAW,aAAc,MAAM,UAE7B;IAEF,WAAW,WAAY,MAAM,UAG3B;IAEF,kBAAkB,WAAY,MAAM,aAAa,MAAM,UAUrD;IAEF,SAAS,aAGP;IAEF,UAAU,aAGR;IAEF,UAAU,aAOR;IAEF,aAAa,wBAAyB,mBAAmB,UA0BvD;CACH"}