swetrix 1.1.0 → 1.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.
- package/dist/esnext/Lib.d.ts +5 -3
- package/dist/esnext/Lib.js +26 -23
- package/dist/esnext/Lib.js.map +1 -1
- package/dist/swetrix.cjs.js +27 -23
- package/dist/swetrix.es5.js +27 -23
- package/dist/swetrix.js +1 -1
- package/package.json +6 -6
- package/rollup.config.js +4 -4
- package/src/Lib.ts +42 -30
package/dist/esnext/Lib.d.ts
CHANGED
|
@@ -14,6 +14,8 @@ export interface PageData {
|
|
|
14
14
|
export interface PageViewsOptions {
|
|
15
15
|
unique?: boolean;
|
|
16
16
|
ignore?: Array<any>;
|
|
17
|
+
noHeartbeat?: boolean;
|
|
18
|
+
heartbeatOnBackground?: boolean;
|
|
17
19
|
}
|
|
18
20
|
export declare class Lib {
|
|
19
21
|
private projectID;
|
|
@@ -22,12 +24,12 @@ export declare class Lib {
|
|
|
22
24
|
private pageViewsOptions;
|
|
23
25
|
constructor(projectID: string, options?: LibOptions | undefined);
|
|
24
26
|
track(event: TrackEventOptions): void;
|
|
25
|
-
trackPageViews(options?: PageViewsOptions):
|
|
27
|
+
trackPageViews(options?: PageViewsOptions): void | object;
|
|
28
|
+
private heartbeat;
|
|
26
29
|
private checkIgnore;
|
|
27
30
|
private trackPathChange;
|
|
28
31
|
private trackPage;
|
|
29
32
|
private debug;
|
|
30
33
|
private canTrack;
|
|
31
|
-
private
|
|
32
|
-
private submitCustom;
|
|
34
|
+
private sendRequest;
|
|
33
35
|
}
|
package/dist/esnext/Lib.js
CHANGED
|
@@ -7,6 +7,7 @@ export class Lib {
|
|
|
7
7
|
this.pageData = null;
|
|
8
8
|
this.pageViewsOptions = null;
|
|
9
9
|
this.trackPathChange = this.trackPathChange.bind(this);
|
|
10
|
+
this.heartbeat = this.heartbeat.bind(this);
|
|
10
11
|
}
|
|
11
12
|
track(event) {
|
|
12
13
|
if (!this.canTrack()) {
|
|
@@ -16,7 +17,7 @@ export class Lib {
|
|
|
16
17
|
pid: this.projectID,
|
|
17
18
|
...event,
|
|
18
19
|
};
|
|
19
|
-
this.
|
|
20
|
+
this.sendRequest('custom', data);
|
|
20
21
|
}
|
|
21
22
|
trackPageViews(options) {
|
|
22
23
|
if (!this.canTrack()) {
|
|
@@ -26,20 +27,36 @@ export class Lib {
|
|
|
26
27
|
return this.pageData.actions;
|
|
27
28
|
}
|
|
28
29
|
this.pageViewsOptions = options;
|
|
29
|
-
let interval;
|
|
30
|
+
let hbInterval, interval;
|
|
30
31
|
if (!options?.unique) {
|
|
31
32
|
interval = setInterval(this.trackPathChange, 2000);
|
|
32
33
|
}
|
|
34
|
+
if (!options?.noHeartbeat) {
|
|
35
|
+
setTimeout(this.heartbeat, 3000);
|
|
36
|
+
hbInterval = setInterval(this.heartbeat, 28000);
|
|
37
|
+
}
|
|
33
38
|
const path = getPath();
|
|
34
39
|
this.pageData = {
|
|
35
40
|
path,
|
|
36
41
|
actions: {
|
|
37
|
-
stop:
|
|
42
|
+
stop: () => {
|
|
43
|
+
clearInterval(interval);
|
|
44
|
+
clearInterval(hbInterval);
|
|
45
|
+
},
|
|
38
46
|
},
|
|
39
47
|
};
|
|
40
48
|
this.trackPage(path, options?.unique);
|
|
41
49
|
return this.pageData.actions;
|
|
42
50
|
}
|
|
51
|
+
heartbeat() {
|
|
52
|
+
if (!this.pageViewsOptions?.heartbeatOnBackground && document.visibilityState === 'hidden') {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const data = {
|
|
56
|
+
pid: this.projectID,
|
|
57
|
+
};
|
|
58
|
+
this.sendRequest('hb', data);
|
|
59
|
+
}
|
|
43
60
|
checkIgnore(path) {
|
|
44
61
|
const ignore = this.pageViewsOptions?.ignore;
|
|
45
62
|
if (Array.isArray(ignore)) {
|
|
@@ -79,7 +96,7 @@ export class Lib {
|
|
|
79
96
|
unique,
|
|
80
97
|
pg,
|
|
81
98
|
};
|
|
82
|
-
this.
|
|
99
|
+
this.sendRequest('', data);
|
|
83
100
|
}
|
|
84
101
|
debug(message) {
|
|
85
102
|
if (this.options?.debug) {
|
|
@@ -104,25 +121,11 @@ export class Lib {
|
|
|
104
121
|
}
|
|
105
122
|
return true;
|
|
106
123
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
'Content-Type': 'application/json',
|
|
113
|
-
},
|
|
114
|
-
body: JSON.stringify(body),
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
submitCustom(body) {
|
|
118
|
-
return fetch(`${host}/custom`, {
|
|
119
|
-
method: 'post',
|
|
120
|
-
headers: {
|
|
121
|
-
'Accept': 'application/json',
|
|
122
|
-
'Content-Type': 'application/json',
|
|
123
|
-
},
|
|
124
|
-
body: JSON.stringify(body),
|
|
125
|
-
});
|
|
124
|
+
sendRequest(path, body) {
|
|
125
|
+
const req = new XMLHttpRequest();
|
|
126
|
+
req.open('POST', `${host}/${path}`, true);
|
|
127
|
+
req.setRequestHeader('Content-Type', 'application/json');
|
|
128
|
+
req.send(JSON.stringify(body));
|
|
126
129
|
}
|
|
127
130
|
}
|
|
128
131
|
//# sourceMappingURL=Lib.js.map
|
package/dist/esnext/Lib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Lib.js","sourceRoot":"","sources":["../../src/Lib.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAC1E,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,GACpD,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"Lib.js","sourceRoot":"","sources":["../../src/Lib.ts"],"names":[],"mappings":"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"}
|
package/dist/swetrix.cjs.js
CHANGED
|
@@ -74,13 +74,14 @@ var Lib = /** @class */ (function () {
|
|
|
74
74
|
this.pageData = null;
|
|
75
75
|
this.pageViewsOptions = null;
|
|
76
76
|
this.trackPathChange = this.trackPathChange.bind(this);
|
|
77
|
+
this.heartbeat = this.heartbeat.bind(this);
|
|
77
78
|
}
|
|
78
79
|
Lib.prototype.track = function (event) {
|
|
79
80
|
if (!this.canTrack()) {
|
|
80
81
|
return;
|
|
81
82
|
}
|
|
82
83
|
var data = __assign({ pid: this.projectID }, event);
|
|
83
|
-
this.
|
|
84
|
+
this.sendRequest('custom', data);
|
|
84
85
|
};
|
|
85
86
|
Lib.prototype.trackPageViews = function (options) {
|
|
86
87
|
if (!this.canTrack()) {
|
|
@@ -90,20 +91,37 @@ var Lib = /** @class */ (function () {
|
|
|
90
91
|
return this.pageData.actions;
|
|
91
92
|
}
|
|
92
93
|
this.pageViewsOptions = options;
|
|
93
|
-
var interval;
|
|
94
|
+
var hbInterval, interval;
|
|
94
95
|
if (!(options === null || options === void 0 ? void 0 : options.unique)) {
|
|
95
96
|
interval = setInterval(this.trackPathChange, 2000);
|
|
96
97
|
}
|
|
98
|
+
if (!(options === null || options === void 0 ? void 0 : options.noHeartbeat)) {
|
|
99
|
+
setTimeout(this.heartbeat, 3000);
|
|
100
|
+
hbInterval = setInterval(this.heartbeat, 28000);
|
|
101
|
+
}
|
|
97
102
|
var path = getPath();
|
|
98
103
|
this.pageData = {
|
|
99
104
|
path: path,
|
|
100
105
|
actions: {
|
|
101
|
-
stop:
|
|
106
|
+
stop: function () {
|
|
107
|
+
clearInterval(interval);
|
|
108
|
+
clearInterval(hbInterval);
|
|
109
|
+
},
|
|
102
110
|
},
|
|
103
111
|
};
|
|
104
112
|
this.trackPage(path, options === null || options === void 0 ? void 0 : options.unique);
|
|
105
113
|
return this.pageData.actions;
|
|
106
114
|
};
|
|
115
|
+
Lib.prototype.heartbeat = function () {
|
|
116
|
+
var _a;
|
|
117
|
+
if (!((_a = this.pageViewsOptions) === null || _a === void 0 ? void 0 : _a.heartbeatOnBackground) && document.visibilityState === 'hidden') {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
var data = {
|
|
121
|
+
pid: this.projectID,
|
|
122
|
+
};
|
|
123
|
+
this.sendRequest('hb', data);
|
|
124
|
+
};
|
|
107
125
|
Lib.prototype.checkIgnore = function (path) {
|
|
108
126
|
var _a;
|
|
109
127
|
var ignore = (_a = this.pageViewsOptions) === null || _a === void 0 ? void 0 : _a.ignore;
|
|
@@ -145,7 +163,7 @@ var Lib = /** @class */ (function () {
|
|
|
145
163
|
unique: unique,
|
|
146
164
|
pg: pg,
|
|
147
165
|
};
|
|
148
|
-
this.
|
|
166
|
+
this.sendRequest('', data);
|
|
149
167
|
};
|
|
150
168
|
Lib.prototype.debug = function (message) {
|
|
151
169
|
var _a;
|
|
@@ -172,25 +190,11 @@ var Lib = /** @class */ (function () {
|
|
|
172
190
|
}
|
|
173
191
|
return true;
|
|
174
192
|
};
|
|
175
|
-
Lib.prototype.
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
'Content-Type': 'application/json',
|
|
181
|
-
},
|
|
182
|
-
body: JSON.stringify(body),
|
|
183
|
-
});
|
|
184
|
-
};
|
|
185
|
-
Lib.prototype.submitCustom = function (body) {
|
|
186
|
-
return fetch(host + "/custom", {
|
|
187
|
-
method: 'post',
|
|
188
|
-
headers: {
|
|
189
|
-
'Accept': 'application/json',
|
|
190
|
-
'Content-Type': 'application/json',
|
|
191
|
-
},
|
|
192
|
-
body: JSON.stringify(body),
|
|
193
|
-
});
|
|
193
|
+
Lib.prototype.sendRequest = function (path, body) {
|
|
194
|
+
var req = new XMLHttpRequest();
|
|
195
|
+
req.open('POST', "".concat(host, "/").concat(path), true);
|
|
196
|
+
req.setRequestHeader('Content-Type', 'application/json');
|
|
197
|
+
req.send(JSON.stringify(body));
|
|
194
198
|
};
|
|
195
199
|
return Lib;
|
|
196
200
|
}());
|
package/dist/swetrix.es5.js
CHANGED
|
@@ -70,13 +70,14 @@ var Lib = /** @class */ (function () {
|
|
|
70
70
|
this.pageData = null;
|
|
71
71
|
this.pageViewsOptions = null;
|
|
72
72
|
this.trackPathChange = this.trackPathChange.bind(this);
|
|
73
|
+
this.heartbeat = this.heartbeat.bind(this);
|
|
73
74
|
}
|
|
74
75
|
Lib.prototype.track = function (event) {
|
|
75
76
|
if (!this.canTrack()) {
|
|
76
77
|
return;
|
|
77
78
|
}
|
|
78
79
|
var data = __assign({ pid: this.projectID }, event);
|
|
79
|
-
this.
|
|
80
|
+
this.sendRequest('custom', data);
|
|
80
81
|
};
|
|
81
82
|
Lib.prototype.trackPageViews = function (options) {
|
|
82
83
|
if (!this.canTrack()) {
|
|
@@ -86,20 +87,37 @@ var Lib = /** @class */ (function () {
|
|
|
86
87
|
return this.pageData.actions;
|
|
87
88
|
}
|
|
88
89
|
this.pageViewsOptions = options;
|
|
89
|
-
var interval;
|
|
90
|
+
var hbInterval, interval;
|
|
90
91
|
if (!(options === null || options === void 0 ? void 0 : options.unique)) {
|
|
91
92
|
interval = setInterval(this.trackPathChange, 2000);
|
|
92
93
|
}
|
|
94
|
+
if (!(options === null || options === void 0 ? void 0 : options.noHeartbeat)) {
|
|
95
|
+
setTimeout(this.heartbeat, 3000);
|
|
96
|
+
hbInterval = setInterval(this.heartbeat, 28000);
|
|
97
|
+
}
|
|
93
98
|
var path = getPath();
|
|
94
99
|
this.pageData = {
|
|
95
100
|
path: path,
|
|
96
101
|
actions: {
|
|
97
|
-
stop:
|
|
102
|
+
stop: function () {
|
|
103
|
+
clearInterval(interval);
|
|
104
|
+
clearInterval(hbInterval);
|
|
105
|
+
},
|
|
98
106
|
},
|
|
99
107
|
};
|
|
100
108
|
this.trackPage(path, options === null || options === void 0 ? void 0 : options.unique);
|
|
101
109
|
return this.pageData.actions;
|
|
102
110
|
};
|
|
111
|
+
Lib.prototype.heartbeat = function () {
|
|
112
|
+
var _a;
|
|
113
|
+
if (!((_a = this.pageViewsOptions) === null || _a === void 0 ? void 0 : _a.heartbeatOnBackground) && document.visibilityState === 'hidden') {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
var data = {
|
|
117
|
+
pid: this.projectID,
|
|
118
|
+
};
|
|
119
|
+
this.sendRequest('hb', data);
|
|
120
|
+
};
|
|
103
121
|
Lib.prototype.checkIgnore = function (path) {
|
|
104
122
|
var _a;
|
|
105
123
|
var ignore = (_a = this.pageViewsOptions) === null || _a === void 0 ? void 0 : _a.ignore;
|
|
@@ -141,7 +159,7 @@ var Lib = /** @class */ (function () {
|
|
|
141
159
|
unique: unique,
|
|
142
160
|
pg: pg,
|
|
143
161
|
};
|
|
144
|
-
this.
|
|
162
|
+
this.sendRequest('', data);
|
|
145
163
|
};
|
|
146
164
|
Lib.prototype.debug = function (message) {
|
|
147
165
|
var _a;
|
|
@@ -168,25 +186,11 @@ var Lib = /** @class */ (function () {
|
|
|
168
186
|
}
|
|
169
187
|
return true;
|
|
170
188
|
};
|
|
171
|
-
Lib.prototype.
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
'Content-Type': 'application/json',
|
|
177
|
-
},
|
|
178
|
-
body: JSON.stringify(body),
|
|
179
|
-
});
|
|
180
|
-
};
|
|
181
|
-
Lib.prototype.submitCustom = function (body) {
|
|
182
|
-
return fetch(host + "/custom", {
|
|
183
|
-
method: 'post',
|
|
184
|
-
headers: {
|
|
185
|
-
'Accept': 'application/json',
|
|
186
|
-
'Content-Type': 'application/json',
|
|
187
|
-
},
|
|
188
|
-
body: JSON.stringify(body),
|
|
189
|
-
});
|
|
189
|
+
Lib.prototype.sendRequest = function (path, body) {
|
|
190
|
+
var req = new XMLHttpRequest();
|
|
191
|
+
req.open('POST', "".concat(host, "/").concat(path), true);
|
|
192
|
+
req.setRequestHeader('Content-Type', 'application/json');
|
|
193
|
+
req.send(JSON.stringify(body));
|
|
190
194
|
};
|
|
191
195
|
return Lib;
|
|
192
196
|
}());
|
package/dist/swetrix.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(t,
|
|
1
|
+
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).swetrix={})}(this,function(i){"use strict";function n(t){return(t=location.search.match(t))&&t[2]||void 0}function a(){return location.pathname||""}var e=function(){return(e=Object.assign||function(t){for(var e,i=1,n=arguments.length;i<n;i++)for(var a in e=arguments[i])Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t}).apply(this,arguments)},o=/[?&](ref|source|utm_source)=([^?&]+)/,r=/[?&](utm_campaign)=([^?&]+)/,s=/[?&](utm_medium)=([^?&]+)/,c=(t.prototype.track=function(t){this.canTrack()&&(t=e({pid:this.projectID},t),this.sendRequest("custom",t))},t.prototype.trackPageViews=function(t){if(this.canTrack()){if(this.pageData)return this.pageData.actions;var e,i;null!=(this.pageViewsOptions=t)&&t.unique||(i=setInterval(this.trackPathChange,2e3)),null!=t&&t.noHeartbeat||(setTimeout(this.heartbeat,3e3),e=setInterval(this.heartbeat,28e3));var n=a();return this.pageData={path:n,actions:{stop:function(){clearInterval(i),clearInterval(e)}}},this.trackPage(n,null==t?void 0:t.unique),this.pageData.actions}},t.prototype.heartbeat=function(){var t;(null!==(t=this.pageViewsOptions)&&void 0!==t&&t.heartbeatOnBackground||"hidden"!==document.visibilityState)&&(t={pid:this.projectID},this.sendRequest("hb",t))},t.prototype.checkIgnore=function(t){var e,i=null===(e=this.pageViewsOptions)||void 0===e?void 0:e.ignore;if(Array.isArray(i))for(var n=0;n<i.length;++n){if(i[n]===t)return!0;if(i[n]instanceof RegExp&&i[n].test(t))return!0}return!1},t.prototype.trackPathChange=function(){var t;this.pageData&&(t=a(),this.pageData.path!==t&&this.trackPage(t,!1))},t.prototype.trackPage=function(t,e){void 0===e&&(e=!1),this.pageData&&(this.pageData.path=t,this.checkIgnore(t)||(t={pid:this.projectID,lc:void 0!==navigator.languages?navigator.languages[0]:navigator.language,tz:function(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch(t){return}}(),ref:document.referrer||void 0,so:n(o),me:n(s),ca:n(r),unique:e,pg:t},this.sendRequest("",t)))},t.prototype.debug=function(t){var e;null!==(e=this.options)&&void 0!==e&&e.debug&&console.log("[Swetrix]",t)},t.prototype.canTrack=function(){var t,e;return"undefined"==typeof window?(this.debug("Tracking disabled: script does not run in browser environment."),!1):null!==(t=this.options)&&void 0!==t&&t.respectDNT&&"1"===(null===(e=window.navigator)||void 0===e?void 0:e.doNotTrack)?(this.debug("Tracking disabled: respecting user's 'Do Not Track' preference."),!1):!!(null!==(e=this.options)&&void 0!==e&&e.debug||"localhost"!==(null===location||void 0===location?void 0:location.hostname)&&"127.0.0.1"!==(null===location||void 0===location?void 0:location.hostname)&&""!==(null===location||void 0===location?void 0:location.hostname))&&(null===navigator||void 0===navigator||!navigator.webdriver||(this.debug("Tracking disabled: navigation is automated by WebDriver."),!1))},t.prototype.sendRequest=function(t,e){var i=new XMLHttpRequest;i.open("POST","".concat("https://api.swetrix.com/log","/").concat(t),!0),i.setRequestHeader("Content-Type","application/json"),i.send(JSON.stringify(e))},t);function t(t,e){this.projectID=t,this.options=e,this.pageData=null,this.pageViewsOptions=null,this.trackPathChange=this.trackPathChange.bind(this),this.heartbeat=this.heartbeat.bind(this)}i.LIB_INSTANCE=null,i.init=function(t,e){return i.LIB_INSTANCE||(i.LIB_INSTANCE=new c(t,e)),i.LIB_INSTANCE},i.track=function(t){i.LIB_INSTANCE&&i.LIB_INSTANCE.track(t)},i.trackViews=function(t){i.LIB_INSTANCE&&i.LIB_INSTANCE.trackPageViews(t)},Object.defineProperty(i,"__esModule",{value:!0})});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "swetrix",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "The JavaScript analytics client for Swetrix Analytics",
|
|
5
5
|
"main": "dist/swetrix.cjs.js",
|
|
6
6
|
"module": "dist/swetrix.es5.js",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"type": "git",
|
|
19
19
|
"url": "git+https://github.com/Swetrix/swetrix-js.git"
|
|
20
20
|
},
|
|
21
|
-
"author": "
|
|
21
|
+
"author": "Andrii R. <contact@swetrix.com>",
|
|
22
22
|
"license": "Apache-2.0",
|
|
23
23
|
"bugs": {
|
|
24
24
|
"url": "https://github.com/Swetrix/swetrix-js/issues"
|
|
@@ -28,14 +28,14 @@
|
|
|
28
28
|
"@types/node": "^14.14.41"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
|
+
"@rollup/plugin-commonjs": "^21.0.1",
|
|
32
|
+
"@rollup/plugin-node-resolve": "^13.0.6",
|
|
31
33
|
"rimraf": "^3.0.2",
|
|
32
|
-
"rollup": "^2.
|
|
33
|
-
"rollup-plugin-commonjs": "^10.1.0",
|
|
34
|
-
"rollup-plugin-json": "^4.0.0",
|
|
34
|
+
"rollup": "^2.60.1",
|
|
35
35
|
"rollup-plugin-node-resolve": "^5.2.0",
|
|
36
36
|
"rollup-plugin-sourcemaps": "^0.6.3",
|
|
37
37
|
"rollup-plugin-typescript2": "^0.30.0",
|
|
38
38
|
"rollup-plugin-uglify": "^6.0.4",
|
|
39
|
-
"typescript": "^4.
|
|
39
|
+
"typescript": "^4.5.2"
|
|
40
40
|
}
|
|
41
41
|
}
|
package/rollup.config.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import commonjs from 'rollup
|
|
1
|
+
import { nodeResolve } from '@rollup/plugin-node-resolve'
|
|
2
|
+
import commonjs from '@rollup/plugin-commonjs'
|
|
3
3
|
import sourceMaps from 'rollup-plugin-sourcemaps'
|
|
4
4
|
import typescript from 'rollup-plugin-typescript2'
|
|
5
5
|
import { uglify } from 'rollup-plugin-uglify'
|
|
@@ -13,7 +13,7 @@ export default [
|
|
|
13
13
|
{ file: pkg.module, format: 'es' },
|
|
14
14
|
],
|
|
15
15
|
plugins: [
|
|
16
|
-
typescript(),
|
|
16
|
+
typescript(), nodeResolve(), commonjs(), sourceMaps(),
|
|
17
17
|
]
|
|
18
18
|
},
|
|
19
19
|
{
|
|
@@ -22,7 +22,7 @@ export default [
|
|
|
22
22
|
{ file: pkg.browser, format: 'umd', name: 'swetrix' },
|
|
23
23
|
],
|
|
24
24
|
plugins: [
|
|
25
|
-
typescript(),
|
|
25
|
+
typescript(), nodeResolve(), commonjs(), uglify(),
|
|
26
26
|
]
|
|
27
27
|
}
|
|
28
28
|
]
|
package/src/Lib.ts
CHANGED
|
@@ -40,6 +40,12 @@ export interface PageViewsOptions {
|
|
|
40
40
|
|
|
41
41
|
// A list of Regular Expressions or string pathes to ignore
|
|
42
42
|
ignore?: Array<any>
|
|
43
|
+
|
|
44
|
+
// Do not send Heartbeat requests to the server
|
|
45
|
+
noHeartbeat?: boolean
|
|
46
|
+
|
|
47
|
+
// Send Heartbeat requests when the website tab is not active in the browser
|
|
48
|
+
heartbeatOnBackground?: boolean
|
|
43
49
|
}
|
|
44
50
|
|
|
45
51
|
const host = 'https://api.swetrix.com/log'
|
|
@@ -50,9 +56,10 @@ export class Lib {
|
|
|
50
56
|
|
|
51
57
|
constructor(private projectID: string, private options?: LibOptions) {
|
|
52
58
|
this.trackPathChange = this.trackPathChange.bind(this)
|
|
59
|
+
this.heartbeat = this.heartbeat.bind(this)
|
|
53
60
|
}
|
|
54
61
|
|
|
55
|
-
track(event: TrackEventOptions) {
|
|
62
|
+
track(event: TrackEventOptions): void {
|
|
56
63
|
if (!this.canTrack()) {
|
|
57
64
|
return
|
|
58
65
|
}
|
|
@@ -61,10 +68,10 @@ export class Lib {
|
|
|
61
68
|
pid: this.projectID,
|
|
62
69
|
...event,
|
|
63
70
|
}
|
|
64
|
-
this.
|
|
71
|
+
this.sendRequest('custom', data)
|
|
65
72
|
}
|
|
66
73
|
|
|
67
|
-
trackPageViews(options?: PageViewsOptions) {
|
|
74
|
+
trackPageViews(options?: PageViewsOptions): void | object {
|
|
68
75
|
if (!this.canTrack()) {
|
|
69
76
|
return
|
|
70
77
|
}
|
|
@@ -74,17 +81,25 @@ export class Lib {
|
|
|
74
81
|
}
|
|
75
82
|
|
|
76
83
|
this.pageViewsOptions = options
|
|
77
|
-
let interval: NodeJS.Timeout
|
|
84
|
+
let hbInterval: NodeJS.Timeout, interval: NodeJS.Timeout
|
|
78
85
|
if (!options?.unique) {
|
|
79
86
|
interval = setInterval(this.trackPathChange, 2000)
|
|
80
87
|
}
|
|
81
88
|
|
|
89
|
+
if (!options?.noHeartbeat) {
|
|
90
|
+
setTimeout(this.heartbeat, 3000)
|
|
91
|
+
hbInterval = setInterval(this.heartbeat, 28000)
|
|
92
|
+
}
|
|
93
|
+
|
|
82
94
|
const path = getPath()
|
|
83
95
|
|
|
84
96
|
this.pageData = {
|
|
85
97
|
path,
|
|
86
98
|
actions: {
|
|
87
|
-
stop:
|
|
99
|
+
stop: () => {
|
|
100
|
+
clearInterval(interval)
|
|
101
|
+
clearInterval(hbInterval)
|
|
102
|
+
},
|
|
88
103
|
},
|
|
89
104
|
}
|
|
90
105
|
|
|
@@ -92,6 +107,18 @@ export class Lib {
|
|
|
92
107
|
return this.pageData.actions
|
|
93
108
|
}
|
|
94
109
|
|
|
110
|
+
private heartbeat(): void {
|
|
111
|
+
if (!this.pageViewsOptions?.heartbeatOnBackground && document.visibilityState === 'hidden') {
|
|
112
|
+
return
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const data = {
|
|
116
|
+
pid: this.projectID,
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
this.sendRequest('hb', data)
|
|
120
|
+
}
|
|
121
|
+
|
|
95
122
|
private checkIgnore(path: string): boolean {
|
|
96
123
|
const ignore = this.pageViewsOptions?.ignore
|
|
97
124
|
|
|
@@ -105,7 +132,7 @@ export class Lib {
|
|
|
105
132
|
}
|
|
106
133
|
|
|
107
134
|
// Tracking path changes. If path changes -> calling this.trackPage method
|
|
108
|
-
private trackPathChange() {
|
|
135
|
+
private trackPathChange(): void {
|
|
109
136
|
if (!this.pageData) return
|
|
110
137
|
const newPath = getPath()
|
|
111
138
|
const { path } = this.pageData
|
|
@@ -115,7 +142,7 @@ export class Lib {
|
|
|
115
142
|
}
|
|
116
143
|
}
|
|
117
144
|
|
|
118
|
-
private trackPage(pg: string, unique: boolean = false) {
|
|
145
|
+
private trackPage(pg: string, unique: boolean = false): void {
|
|
119
146
|
if (!this.pageData) return
|
|
120
147
|
this.pageData.path = pg
|
|
121
148
|
|
|
@@ -133,16 +160,16 @@ export class Lib {
|
|
|
133
160
|
pg,
|
|
134
161
|
}
|
|
135
162
|
|
|
136
|
-
this.
|
|
163
|
+
this.sendRequest('', data)
|
|
137
164
|
}
|
|
138
165
|
|
|
139
|
-
private debug(message: string) {
|
|
166
|
+
private debug(message: string): void {
|
|
140
167
|
if (this.options?.debug) {
|
|
141
168
|
console.log('[Swetrix]', message)
|
|
142
169
|
}
|
|
143
170
|
}
|
|
144
171
|
|
|
145
|
-
private canTrack() {
|
|
172
|
+
private canTrack(): boolean {
|
|
146
173
|
if (!isInBrowser()) {
|
|
147
174
|
this.debug('Tracking disabled: script does not run in browser environment.')
|
|
148
175
|
return false
|
|
@@ -165,25 +192,10 @@ export class Lib {
|
|
|
165
192
|
return true
|
|
166
193
|
}
|
|
167
194
|
|
|
168
|
-
private
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
'Content-Type': 'application/json',
|
|
174
|
-
},
|
|
175
|
-
body: JSON.stringify(body),
|
|
176
|
-
})
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
private submitCustom(body: object) {
|
|
180
|
-
return fetch(`${host}/custom`, {
|
|
181
|
-
method: 'post',
|
|
182
|
-
headers: {
|
|
183
|
-
'Accept': 'application/json',
|
|
184
|
-
'Content-Type': 'application/json',
|
|
185
|
-
},
|
|
186
|
-
body: JSON.stringify(body),
|
|
187
|
-
})
|
|
195
|
+
private sendRequest(path: string, body: object): void {
|
|
196
|
+
const req = new XMLHttpRequest()
|
|
197
|
+
req.open('POST', `${host}/${path}`, true)
|
|
198
|
+
req.setRequestHeader('Content-Type', 'application/json')
|
|
199
|
+
req.send(JSON.stringify(body))
|
|
188
200
|
}
|
|
189
201
|
}
|