@openreplay/tracker 16.0.2-beta.0 → 16.0.2
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/cjs/common/interaction.d.ts +2 -2
- package/dist/cjs/common/messages.gen.d.ts +1 -44
- package/dist/cjs/entry.js +9814 -0
- package/dist/cjs/entry.js.map +1 -0
- package/dist/cjs/index.js +59 -95
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/main/app/index.d.ts +0 -2
- package/dist/cjs/main/app/messages.gen.d.ts +0 -5
- package/dist/cjs/main/app/observer/observer.d.ts +5 -1
- package/dist/cjs/main/app/observer/top_observer.d.ts +1 -0
- package/dist/cjs/main/entry.d.ts +5 -0
- package/dist/cjs/main/index.d.ts +3 -3
- package/dist/cjs/main/modules/attributeSender.d.ts +2 -2
- package/dist/cjs/main/singleton.d.ts +108 -0
- package/dist/lib/common/interaction.d.ts +2 -2
- package/dist/lib/common/messages.gen.d.ts +1 -44
- package/dist/lib/entry.js +9807 -0
- package/dist/lib/entry.js.map +1 -0
- package/dist/lib/index.js +59 -95
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/main/app/index.d.ts +0 -2
- package/dist/lib/main/app/messages.gen.d.ts +0 -5
- package/dist/lib/main/app/observer/observer.d.ts +5 -1
- package/dist/lib/main/app/observer/top_observer.d.ts +1 -0
- package/dist/lib/main/entry.d.ts +5 -0
- package/dist/lib/main/index.d.ts +3 -3
- package/dist/lib/main/modules/attributeSender.d.ts +2 -2
- package/dist/lib/main/singleton.d.ts +108 -0
- package/dist/types/common/interaction.d.ts +2 -2
- package/dist/types/common/messages.gen.d.ts +1 -44
- package/dist/types/main/app/index.d.ts +0 -2
- package/dist/types/main/app/messages.gen.d.ts +0 -5
- package/dist/types/main/app/observer/observer.d.ts +5 -1
- package/dist/types/main/app/observer/top_observer.d.ts +1 -0
- package/dist/types/main/entry.d.ts +5 -0
- package/dist/types/main/index.d.ts +3 -3
- package/dist/types/main/modules/attributeSender.d.ts +2 -2
- package/dist/types/main/singleton.d.ts +108 -0
- package/package.json +11 -6
package/dist/cjs/index.js
CHANGED
|
@@ -725,7 +725,9 @@ class StringDictionary {
|
|
|
725
725
|
this.backDict = {};
|
|
726
726
|
this.getKey = (str) => {
|
|
727
727
|
let isNew = false;
|
|
728
|
-
|
|
728
|
+
// avoiding potential native object properties
|
|
729
|
+
const safeKey = `__${str}`;
|
|
730
|
+
if (!this.backDict[safeKey]) {
|
|
729
731
|
isNew = true;
|
|
730
732
|
// shaving the first 2 digits of the timestamp (since they are irrelevant for next millennia)
|
|
731
733
|
const shavedTs = Date.now() % 10 ** (13 - 2);
|
|
@@ -737,10 +739,10 @@ class StringDictionary {
|
|
|
737
739
|
else {
|
|
738
740
|
this.lastSuffix = 1;
|
|
739
741
|
}
|
|
740
|
-
this.backDict[
|
|
742
|
+
this.backDict[safeKey] = id;
|
|
741
743
|
this.lastTs = shavedTs;
|
|
742
744
|
}
|
|
743
|
-
return [this.backDict[
|
|
745
|
+
return [this.backDict[safeKey], isNew];
|
|
744
746
|
};
|
|
745
747
|
}
|
|
746
748
|
}
|
|
@@ -1677,33 +1679,6 @@ function SetNodeAttributeDictGlobal(id, name, value) {
|
|
|
1677
1679
|
value,
|
|
1678
1680
|
];
|
|
1679
1681
|
}
|
|
1680
|
-
function CSSInsertRule(id, rule, index) {
|
|
1681
|
-
return [
|
|
1682
|
-
37 /* Messages.Type.CSSInsertRule */,
|
|
1683
|
-
id,
|
|
1684
|
-
rule,
|
|
1685
|
-
index,
|
|
1686
|
-
];
|
|
1687
|
-
}
|
|
1688
|
-
function CSSDeleteRule(id, index) {
|
|
1689
|
-
return [
|
|
1690
|
-
38 /* Messages.Type.CSSDeleteRule */,
|
|
1691
|
-
id,
|
|
1692
|
-
index,
|
|
1693
|
-
];
|
|
1694
|
-
}
|
|
1695
|
-
function Fetch(method, url, request, response, status, timestamp, duration) {
|
|
1696
|
-
return [
|
|
1697
|
-
39 /* Messages.Type.Fetch */,
|
|
1698
|
-
method,
|
|
1699
|
-
url,
|
|
1700
|
-
request,
|
|
1701
|
-
response,
|
|
1702
|
-
status,
|
|
1703
|
-
timestamp,
|
|
1704
|
-
duration,
|
|
1705
|
-
];
|
|
1706
|
-
}
|
|
1707
1682
|
function Profiler(name, duration, args, result) {
|
|
1708
1683
|
return [
|
|
1709
1684
|
40 /* Messages.Type.Profiler */,
|
|
@@ -1846,18 +1821,6 @@ function SetNodeFocus(id) {
|
|
|
1846
1821
|
id,
|
|
1847
1822
|
];
|
|
1848
1823
|
}
|
|
1849
|
-
function LongTask(timestamp, duration, context, containerType, containerSrc, containerId, containerName) {
|
|
1850
|
-
return [
|
|
1851
|
-
59 /* Messages.Type.LongTask */,
|
|
1852
|
-
timestamp,
|
|
1853
|
-
duration,
|
|
1854
|
-
context,
|
|
1855
|
-
containerType,
|
|
1856
|
-
containerSrc,
|
|
1857
|
-
containerId,
|
|
1858
|
-
containerName,
|
|
1859
|
-
];
|
|
1860
|
-
}
|
|
1861
1824
|
function SetNodeAttributeURLBased(id, name, value, baseURL) {
|
|
1862
1825
|
return [
|
|
1863
1826
|
60 /* Messages.Type.SetNodeAttributeURLBased */,
|
|
@@ -1889,15 +1852,6 @@ function CustomIssue(name, payload) {
|
|
|
1889
1852
|
payload,
|
|
1890
1853
|
];
|
|
1891
1854
|
}
|
|
1892
|
-
function CSSInsertRuleURLBased(id, rule, index, baseURL) {
|
|
1893
|
-
return [
|
|
1894
|
-
67 /* Messages.Type.CSSInsertRuleURLBased */,
|
|
1895
|
-
id,
|
|
1896
|
-
rule,
|
|
1897
|
-
index,
|
|
1898
|
-
baseURL,
|
|
1899
|
-
];
|
|
1900
|
-
}
|
|
1901
1855
|
function MouseClick(id, hesitationTime, label, selector, normalizedX, normalizedY) {
|
|
1902
1856
|
return [
|
|
1903
1857
|
68 /* Messages.Type.MouseClick */,
|
|
@@ -2136,9 +2090,6 @@ var _Messages = /*#__PURE__*/Object.freeze({
|
|
|
2136
2090
|
AdoptedSSRemoveOwner: AdoptedSSRemoveOwner,
|
|
2137
2091
|
AdoptedSSReplaceURLBased: AdoptedSSReplaceURLBased,
|
|
2138
2092
|
BatchMetadata: BatchMetadata,
|
|
2139
|
-
CSSDeleteRule: CSSDeleteRule,
|
|
2140
|
-
CSSInsertRule: CSSInsertRule,
|
|
2141
|
-
CSSInsertRuleURLBased: CSSInsertRuleURLBased,
|
|
2142
2093
|
CanvasNode: CanvasNode,
|
|
2143
2094
|
ConnectionInformation: ConnectionInformation,
|
|
2144
2095
|
ConsoleLog: ConsoleLog,
|
|
@@ -2148,13 +2099,11 @@ var _Messages = /*#__PURE__*/Object.freeze({
|
|
|
2148
2099
|
CreateTextNode: CreateTextNode,
|
|
2149
2100
|
CustomEvent: CustomEvent,
|
|
2150
2101
|
CustomIssue: CustomIssue,
|
|
2151
|
-
Fetch: Fetch,
|
|
2152
2102
|
GraphQL: GraphQL,
|
|
2153
2103
|
GraphQLDeprecated: GraphQLDeprecated,
|
|
2154
2104
|
InputChange: InputChange,
|
|
2155
2105
|
JSException: JSException,
|
|
2156
2106
|
LoadFontFace: LoadFontFace,
|
|
2157
|
-
LongTask: LongTask,
|
|
2158
2107
|
Metadata: Metadata,
|
|
2159
2108
|
MobX: MobX,
|
|
2160
2109
|
MouseClick: MouseClick,
|
|
@@ -2592,9 +2541,7 @@ const spinnerStyles = {
|
|
|
2592
2541
|
};
|
|
2593
2542
|
|
|
2594
2543
|
const Quality = {
|
|
2595
|
-
Standard: { width: 1280, height: 720 }
|
|
2596
|
-
High: { width: 1920, height: 1080 },
|
|
2597
|
-
};
|
|
2544
|
+
Standard: { width: 1280, height: 720 }};
|
|
2598
2545
|
class Recorder {
|
|
2599
2546
|
constructor(app) {
|
|
2600
2547
|
this.app = app;
|
|
@@ -3756,8 +3703,8 @@ class Nodes {
|
|
|
3756
3703
|
}
|
|
3757
3704
|
|
|
3758
3705
|
const iconCache = {};
|
|
3759
|
-
const
|
|
3760
|
-
async function parseUseEl(useElement, mode) {
|
|
3706
|
+
const svgUrlCache = {};
|
|
3707
|
+
async function parseUseEl(useElement, mode, domParser) {
|
|
3761
3708
|
try {
|
|
3762
3709
|
const href = useElement.getAttribute('xlink:href') || useElement.getAttribute('href');
|
|
3763
3710
|
if (!href) {
|
|
@@ -3772,13 +3719,43 @@ async function parseUseEl(useElement, mode) {
|
|
|
3772
3719
|
if (iconCache[symbolId]) {
|
|
3773
3720
|
return iconCache[symbolId];
|
|
3774
3721
|
}
|
|
3775
|
-
|
|
3776
|
-
|
|
3777
|
-
|
|
3722
|
+
let svgDoc;
|
|
3723
|
+
if (svgUrlCache[url]) {
|
|
3724
|
+
if (svgUrlCache[url] === 1) {
|
|
3725
|
+
await new Promise((resolve) => {
|
|
3726
|
+
let tries = 0;
|
|
3727
|
+
const interval = setInterval(() => {
|
|
3728
|
+
if (tries > 100) {
|
|
3729
|
+
clearInterval(interval);
|
|
3730
|
+
resolve(false);
|
|
3731
|
+
}
|
|
3732
|
+
if (svgUrlCache[url] !== 1) {
|
|
3733
|
+
svgDoc = svgUrlCache[url];
|
|
3734
|
+
clearInterval(interval);
|
|
3735
|
+
resolve(true);
|
|
3736
|
+
}
|
|
3737
|
+
else {
|
|
3738
|
+
tries++;
|
|
3739
|
+
}
|
|
3740
|
+
}, 100);
|
|
3741
|
+
});
|
|
3742
|
+
}
|
|
3743
|
+
else {
|
|
3744
|
+
svgDoc = svgUrlCache[url] ?? `<svg xmlns="http://www.w3.org/2000/svg"></svg>`;
|
|
3745
|
+
}
|
|
3746
|
+
}
|
|
3747
|
+
else {
|
|
3748
|
+
svgUrlCache[url] = 1;
|
|
3749
|
+
const response = await fetch(url);
|
|
3750
|
+
const svgText = await response.text();
|
|
3751
|
+
svgDoc = domParser.parseFromString(svgText, 'image/svg+xml');
|
|
3752
|
+
svgUrlCache[url] = svgDoc;
|
|
3753
|
+
}
|
|
3754
|
+
// @ts-ignore
|
|
3778
3755
|
const symbol = svgDoc.getElementById(symbolId);
|
|
3779
3756
|
if (!symbol) {
|
|
3780
3757
|
console.debug('Openreplay: Symbol not found in SVG.');
|
|
3781
|
-
return;
|
|
3758
|
+
return '';
|
|
3782
3759
|
}
|
|
3783
3760
|
if (mode === 'inline') ;
|
|
3784
3761
|
if (mode === 'svgtext') {
|
|
@@ -3833,7 +3810,7 @@ var RecentsType;
|
|
|
3833
3810
|
RecentsType[RecentsType["Changed"] = 2] = "Changed";
|
|
3834
3811
|
})(RecentsType || (RecentsType = {}));
|
|
3835
3812
|
class Observer {
|
|
3836
|
-
constructor(app, isTopContext = false) {
|
|
3813
|
+
constructor(app, isTopContext = false, options = { disableSprites: false }) {
|
|
3837
3814
|
this.app = app;
|
|
3838
3815
|
this.isTopContext = isTopContext;
|
|
3839
3816
|
this.commited = [];
|
|
@@ -3841,6 +3818,9 @@ class Observer {
|
|
|
3841
3818
|
this.indexes = [];
|
|
3842
3819
|
this.attributesMap = new Map();
|
|
3843
3820
|
this.textSet = new Set();
|
|
3821
|
+
this.disableSprites = false;
|
|
3822
|
+
this.domParser = new DOMParser();
|
|
3823
|
+
this.disableSprites = options.disableSprites;
|
|
3844
3824
|
this.observer = createMutationObserver(this.app.safe((mutations) => {
|
|
3845
3825
|
for (const mutation of mutations) {
|
|
3846
3826
|
// mutations order is sequential
|
|
@@ -3935,8 +3915,8 @@ class Observer {
|
|
|
3935
3915
|
if (value === null) {
|
|
3936
3916
|
this.app.send(RemoveNodeAttribute(id, name));
|
|
3937
3917
|
}
|
|
3938
|
-
if (isUseElement(node) && name === 'href') {
|
|
3939
|
-
parseUseEl(node, 'svgtext')
|
|
3918
|
+
if (isUseElement(node) && name === 'href' && !this.disableSprites) {
|
|
3919
|
+
parseUseEl(node, 'svgtext', this.domParser)
|
|
3940
3920
|
.then((svgData) => {
|
|
3941
3921
|
if (svgData) {
|
|
3942
3922
|
this.app.send(SetNodeAttribute(id, name, `_$OPENREPLAY_SPRITE$_${svgData}`));
|
|
@@ -4289,7 +4269,11 @@ class IFrameOffsets {
|
|
|
4289
4269
|
const attachShadowNativeFn = IN_BROWSER ? Element.prototype.attachShadow : () => new ShadowRoot();
|
|
4290
4270
|
class TopObserver extends Observer {
|
|
4291
4271
|
constructor(params) {
|
|
4292
|
-
|
|
4272
|
+
const opts = Object.assign({
|
|
4273
|
+
captureIFrames: true,
|
|
4274
|
+
disableSprites: false,
|
|
4275
|
+
}, params.options);
|
|
4276
|
+
super(params.app, true, opts);
|
|
4293
4277
|
this.iframeOffsets = new IFrameOffsets();
|
|
4294
4278
|
this.contextCallbacks = [];
|
|
4295
4279
|
// Attached once per Tracker instance
|
|
@@ -4299,9 +4283,7 @@ class TopObserver extends Observer {
|
|
|
4299
4283
|
this.docObservers = new WeakMap();
|
|
4300
4284
|
this.shadowRootObservers = new WeakMap();
|
|
4301
4285
|
this.app = params.app;
|
|
4302
|
-
this.options =
|
|
4303
|
-
captureIFrames: true,
|
|
4304
|
-
}, params.options);
|
|
4286
|
+
this.options = opts;
|
|
4305
4287
|
// IFrames
|
|
4306
4288
|
this.app.nodes.attachNodeCallback((node) => {
|
|
4307
4289
|
if (hasTag(node, 'iframe') &&
|
|
@@ -4676,7 +4658,7 @@ class Ticker {
|
|
|
4676
4658
|
* this value is injected during build time via rollup
|
|
4677
4659
|
* */
|
|
4678
4660
|
// @ts-ignore
|
|
4679
|
-
const workerBodyFn = "!function(){\"use strict\";class t{constructor(t,s,i,e=10,n=250,h,r){this.onUnauthorised=s,this.onFailure=i,this.MAX_ATTEMPTS_COUNT=e,this.ATTEMPT_TIMEOUT=n,this.onCompress=h,this.pageNo=r,this.attemptsCount=0,this.busy=!1,this.queue=[],this.token=null,this.lastBatchNum=0,this.ingestURL=t+\"/v1/web/i\",this.isCompressing=void 0!==h}getQueueStatus(){return 0===this.queue.length&&!this.busy}authorise(t){this.token=t,this.busy||this.sendNext()}push(t){if(this.busy||!this.token)this.queue.push(t);else if(this.busy=!0,this.isCompressing&&this.onCompress)this.onCompress(t);else{const s=++this.lastBatchNum;this.sendBatch(t,!1,s)}}sendNext(){const t=this.queue.shift();if(t)if(this.busy=!0,this.isCompressing&&this.onCompress)this.onCompress(t);else{const s=++this.lastBatchNum;this.sendBatch(t,!1,s)}else this.busy=!1}retry(t,s,i){this.attemptsCount>=this.MAX_ATTEMPTS_COUNT?this.onFailure(`Failed to send batch after ${this.attemptsCount} attempts.`):(this.attemptsCount++,setTimeout((()=>this.sendBatch(t,s,i)),this.ATTEMPT_TIMEOUT*this.attemptsCount))}sendBatch(t,s,i){var e;const n=null==i?void 0:i.toString().replace(/^([^_]+)_([^_]+).*/,\"$1_$2_$3\");this.busy=!0;const h={Authorization:`Bearer ${this.token}`};if(s&&(h[\"Content-Encoding\"]=\"gzip\"),null===this.token)return void setTimeout((()=>{this.sendBatch(t,s,`${null!=i?i:\"noBatchNum\"}_newToken`)}),500);const r=new AbortController,a=setTimeout((()=>{r.abort()}),3e4);fetch(`${this.ingestURL}?batch=${null!==(e=this.pageNo)&&void 0!==e?e:\"noPageNum\"}_${null!=n?n:\"noBatchNum\"}`,{body:t,method:\"POST\",headers:h,keepalive:t.length<65536,signal:r.signal}).then((e=>{if(clearTimeout(a),401===e.status)return this.busy=!1,void this.onUnauthorised();e.status>=400?this.retry(t,s,`${null!=i?i:\"noBatchNum\"}_network:${e.status}`):(this.attemptsCount=0,this.sendNext())})).catch((e=>{clearTimeout(a),console.warn(\"OpenReplay:\",e),this.retry(t,s,`${null!=i?i:\"noBatchNum\"}_reject:${e.message}`)}))}sendCompressed(t){const s=++this.lastBatchNum;this.sendBatch(t,!0,s)}sendUncompressed(t){const s=++this.lastBatchNum;this.sendBatch(t,!1,s)}clean(){this.sendNext(),setTimeout((()=>{this.token=null,this.queue.length=0}),10)}}const s=\"function\"==typeof TextEncoder?new TextEncoder:{encode(t){const s=t.length,i=new Uint8Array(3*s);let e=-1;for(let n=0,h=0,r=0;r!==s;){if(n=t.charCodeAt(r),r+=1,n>=55296&&n<=56319){if(r===s){i[e+=1]=239,i[e+=1]=191,i[e+=1]=189;break}if(h=t.charCodeAt(r),!(h>=56320&&h<=57343)){i[e+=1]=239,i[e+=1]=191,i[e+=1]=189;continue}if(n=1024*(n-55296)+h-56320+65536,r+=1,n>65535){i[e+=1]=240|n>>>18,i[e+=1]=128|n>>>12&63,i[e+=1]=128|n>>>6&63,i[e+=1]=128|63&n;continue}}n<=127?i[e+=1]=0|n:n<=2047?(i[e+=1]=192|n>>>6,i[e+=1]=128|63&n):(i[e+=1]=224|n>>>12,i[e+=1]=128|n>>>6&63,i[e+=1]=128|63&n)}return i.subarray(0,e+1)}};class i{constructor(t){this.size=t,this.offset=0,this.checkpointOffset=0,this.data=new Uint8Array(t)}getCurrentOffset(){return this.offset}checkpoint(){this.checkpointOffset=this.offset}get isEmpty(){return 0===this.offset}skip(t){return this.offset+=t,this.offset<=this.size}set(t,s){this.data.set(t,s)}boolean(t){return this.data[this.offset++]=+t,this.offset<=this.size}uint(t){for((t<0||t>Number.MAX_SAFE_INTEGER)&&(t=0);t>=128;)this.data[this.offset++]=t%256|128,t=Math.floor(t/128);return this.data[this.offset++]=t,this.offset<=this.size}int(t){return t=Math.round(t),this.uint(t>=0?2*t:-2*t-1)}string(t){const i=s.encode(t),e=i.byteLength;return!(!this.uint(e)||this.offset+e>this.size)&&(this.data.set(i,this.offset),this.offset+=e,!0)}reset(){this.offset=0,this.checkpointOffset=0}flush(){const t=this.data.slice(0,this.checkpointOffset);return this.reset(),t}}class e extends i{encode(t){switch(t[0]){case 0:case 11:case 114:case 115:return this.uint(t[1]);case 4:case 44:case 47:return this.string(t[1])&&this.string(t[2])&&this.uint(t[3]);case 5:case 20:case 38:case 70:case 75:case 76:case 77:case 82:return this.uint(t[1])&&this.uint(t[2]);case 6:return this.int(t[1])&&this.int(t[2]);case 7:return!0;case 8:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.string(t[4])&&this.boolean(t[5]);case 9:case 10:case 24:case 35:case 51:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3]);case 12:case 52:case 61:case 71:return this.uint(t[1])&&this.string(t[2])&&this.string(t[3]);case 13:case 14:case 17:case 34:case 50:case 54:return this.uint(t[1])&&this.string(t[2]);case 16:return this.uint(t[1])&&this.int(t[2])&&this.int(t[3]);case 18:return this.uint(t[1])&&this.string(t[2])&&this.int(t[3]);case 19:return this.uint(t[1])&&this.boolean(t[2]);case 21:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])&&this.string(t[5])&&this.uint(t[6])&&this.uint(t[7])&&this.uint(t[8]);case 22:case 27:case 30:case 41:case 45:case 46:case 43:case 63:case 64:case 79:case 124:return this.string(t[1])&&this.string(t[2]);case 23:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.uint(t[4])&&this.uint(t[5])&&this.uint(t[6])&&this.uint(t[7])&&this.uint(t[8])&&this.uint(t[9]);case 28:case 29:case 42:case 117:case 118:return this.string(t[1]);case 37:return this.uint(t[1])&&this.string(t[2])&&this.uint(t[3]);case 39:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])&&this.uint(t[5])&&this.uint(t[6])&&this.uint(t[7]);case 40:return this.string(t[1])&&this.uint(t[2])&&this.string(t[3])&&this.string(t[4]);case 48:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])&&this.int(t[5]);case 49:return this.int(t[1])&&this.int(t[2])&&this.uint(t[3])&&this.uint(t[4]);case 53:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.uint(t[4])&&this.uint(t[5])&&this.uint(t[6])&&this.string(t[7])&&this.string(t[8]);case 55:return this.boolean(t[1]);case 57:case 60:return this.uint(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4]);case 58:case 120:return this.int(t[1]);case 59:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.uint(t[4])&&this.string(t[5])&&this.string(t[6])&&this.string(t[7]);case 67:case 73:return this.uint(t[1])&&this.string(t[2])&&this.uint(t[3])&&this.string(t[4]);case 68:return this.uint(t[1])&&this.uint(t[2])&&this.string(t[3])&&this.string(t[4])&&this.uint(t[5])&&this.uint(t[6]);case 69:return this.uint(t[1])&&this.uint(t[2])&&this.string(t[3])&&this.string(t[4]);case 78:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4]);case 81:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.int(t[4])&&this.string(t[5]);case 83:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])&&this.string(t[5])&&this.uint(t[6])&&this.uint(t[7])&&this.uint(t[8])&&this.uint(t[9]);case 84:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.uint(t[4])&&this.string(t[5])&&this.string(t[6]);case 112:return this.uint(t[1])&&this.string(t[2])&&this.boolean(t[3])&&this.string(t[4])&&this.int(t[5])&&this.int(t[6]);case 113:return this.uint(t[1])&&this.uint(t[2])&&this.string(t[3]);case 116:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.uint(t[4])&&this.uint(t[5])&&this.uint(t[6])&&this.string(t[7])&&this.string(t[8])&&this.uint(t[9])&&this.boolean(t[10]);case 119:return this.string(t[1])&&this.uint(t[2]);case 121:return this.string(t[1])&&this.string(t[2])&&this.uint(t[3])&&this.uint(t[4]);case 122:return this.string(t[1])&&this.string(t[2])&&this.uint(t[3])&&this.string(t[4]);case 123:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])&&this.uint(t[5])}}}class n{constructor(t,s,i,n,h,r){this.pageNo=t,this.timestamp=s,this.url=i,this.onBatch=n,this.tabId=h,this.onOfflineEnd=r,this.nextIndex=0,this.beaconSize=2e5,this.encoder=new e(this.beaconSize),this.sizeBuffer=new Uint8Array(3),this.isEmpty=!0,this.beaconSizeLimit=1e6,this.prepare()}writeType(t){return this.encoder.uint(t[0])}writeFields(t){return this.encoder.encode(t)}writeSizeAt(t,s){for(let s=0;s<3;s++)this.sizeBuffer[s]=t>>8*s;this.encoder.set(this.sizeBuffer,s)}prepare(){if(!this.encoder.isEmpty)return;const t=[81,1,this.pageNo,this.nextIndex,this.timestamp,this.url],s=[118,this.tabId];this.writeType(t),this.writeFields(t),this.writeWithSize(s),this.isEmpty=!0}writeWithSize(t){const s=this.encoder;if(!this.writeType(t)||!s.skip(3))return!1;const i=s.getCurrentOffset(),e=this.writeFields(t);if(e){const e=s.getCurrentOffset()-i;if(e>16777215)return console.warn(\"OpenReplay: max message size overflow.\"),!1;this.writeSizeAt(e,i-3),s.checkpoint(),this.isEmpty=this.isEmpty&&0===t[0],this.nextIndex++}return e}setBeaconSizeLimit(t){this.beaconSizeLimit=t}writeMessage(t){if(\"q_end\"===t[0])return this.finaliseBatch(),this.onOfflineEnd();0===t[0]&&(this.timestamp=t[1]),122===t[0]&&(this.url=t[1]),this.writeWithSize(t)||(this.finaliseBatch(),this.writeWithSize(t)||(this.encoder=new e(this.beaconSizeLimit),this.prepare(),this.writeWithSize(t)?this.finaliseBatch():console.warn(\"OpenReplay: beacon size overflow. Skipping large message.\",t,this),this.encoder=new e(this.beaconSize),this.prepare()))}finaliseBatch(){if(this.isEmpty)return;const t=this.encoder.flush();this.onBatch(t),this.prepare()}clean(){this.encoder.reset()}}var h;!function(t){t[t.NotActive=0]=\"NotActive\",t[t.Starting=1]=\"Starting\",t[t.Stopping=2]=\"Stopping\",t[t.Active=3]=\"Active\",t[t.Stopped=4]=\"Stopped\"}(h||(h={}));let r=null,a=null,u=h.NotActive;function o(){a&&a.finaliseBatch()}function c(){return new Promise((t=>{u=h.Stopping,null!==p&&(clearInterval(p),p=null),a&&(a.clean(),a=null),r&&(r.clean(),setTimeout((()=>{r=null}),20)),setTimeout((()=>{u=h.NotActive,t(null)}),100)}))}function l(){[h.Stopped,h.Stopping].includes(u)||(postMessage(\"a_stop\"),c().then((()=>{postMessage(\"a_start\")})))}let g,p=null;self.onmessage=({data:s})=>{if(null!=s)if(\"heartbeat_q\"!==s){if(\"stop\"===s)return o(),void c().then((()=>{u=h.Stopped}));if(\"forceFlushBatch\"!==s){if(!Array.isArray(s)){if(\"compressed\"===s.type){if(!r)return console.debug(\"OR WebWorker: sender not initialised. Compressed batch.\"),void l();s.batch&&r.sendCompressed(s.batch)}if(\"uncompressed\"===s.type){if(!r)return console.debug(\"OR WebWorker: sender not initialised. Uncompressed batch.\"),void l();s.batch&&r.sendUncompressed(s.batch)}return\"start\"===s.type?(u=h.Starting,r=new t(s.ingestPoint,(()=>{l()}),(t=>{!function(t){postMessage({type:\"failure\",reason:t}),c()}(t)}),s.connAttemptCount,s.connAttemptGap,(t=>{postMessage({type:\"compress\",batch:t},[t.buffer])}),s.pageNo),a=new n(s.pageNo,s.timestamp,s.url,(t=>{r&&r.push(t)}),s.tabId,(()=>postMessage({type:\"queue_empty\"}))),null===p&&(p=setInterval(o,1e4)),u=h.Active):\"auth\"===s.type?r?a?(r.authorise(s.token),void(s.beaconSizeLimit&&a.setBeaconSizeLimit(s.beaconSizeLimit))):(console.debug(\"OR WebWorker: writer not initialised. Received auth.\"),void l()):(console.debug(\"OR WebWorker: sender not initialised. Received auth.\"),void l()):void 0}if(a){const t=a;s.forEach((s=>{55===s[0]&&(s[1]?g=setTimeout((()=>l()),18e5):clearTimeout(g)),t.writeMessage(s)}))}else postMessage(\"not_init\"),l()}else o()}else postMessage(\"heartbeat_a\");else o()}}();\n";
|
|
4661
|
+
const workerBodyFn = "!function(){\"use strict\";class t{constructor(t,s,i,e=10,n=250,h,r){this.onUnauthorised=s,this.onFailure=i,this.MAX_ATTEMPTS_COUNT=e,this.ATTEMPT_TIMEOUT=n,this.onCompress=h,this.pageNo=r,this.attemptsCount=0,this.busy=!1,this.queue=[],this.token=null,this.lastBatchNum=0,this.ingestURL=t+\"/v1/web/i\",this.isCompressing=void 0!==h}getQueueStatus(){return 0===this.queue.length&&!this.busy}authorise(t){this.token=t,this.busy||this.sendNext()}push(t){if(this.busy||!this.token)this.queue.push(t);else if(this.busy=!0,this.isCompressing&&this.onCompress)this.onCompress(t);else{const s=++this.lastBatchNum;this.sendBatch(t,!1,s)}}sendNext(){const t=this.queue.shift();if(t)if(this.busy=!0,this.isCompressing&&this.onCompress)this.onCompress(t);else{const s=++this.lastBatchNum;this.sendBatch(t,!1,s)}else this.busy=!1}retry(t,s,i){this.attemptsCount>=this.MAX_ATTEMPTS_COUNT?this.onFailure(`Failed to send batch after ${this.attemptsCount} attempts.`):(this.attemptsCount++,setTimeout((()=>this.sendBatch(t,s,i)),this.ATTEMPT_TIMEOUT*this.attemptsCount))}sendBatch(t,s,i){var e;const n=null==i?void 0:i.toString().replace(/^([^_]+)_([^_]+).*/,\"$1_$2_$3\");this.busy=!0;const h={Authorization:`Bearer ${this.token}`};s&&(h[\"Content-Encoding\"]=\"gzip\"),null!==this.token?fetch(`${this.ingestURL}?batch=${null!==(e=this.pageNo)&&void 0!==e?e:\"noPageNum\"}_${null!=n?n:\"noBatchNum\"}`,{body:t,method:\"POST\",headers:h,keepalive:t.length<65536}).then((e=>{if(401===e.status)return this.busy=!1,void this.onUnauthorised();e.status>=400?this.retry(t,s,`${null!=i?i:\"noBatchNum\"}_network:${e.status}`):(this.attemptsCount=0,this.sendNext())})).catch((e=>{console.warn(\"OpenReplay:\",e),this.retry(t,s,`${null!=i?i:\"noBatchNum\"}_reject:${e.message}`)})):setTimeout((()=>{this.sendBatch(t,s,`${null!=i?i:\"noBatchNum\"}_newToken`)}),500)}sendCompressed(t){const s=++this.lastBatchNum;this.sendBatch(t,!0,s)}sendUncompressed(t){const s=++this.lastBatchNum;this.sendBatch(t,!1,s)}clean(){this.sendNext(),setTimeout((()=>{this.token=null,this.queue.length=0}),10)}}const s=\"function\"==typeof TextEncoder?new TextEncoder:{encode(t){const s=t.length,i=new Uint8Array(3*s);let e=-1;for(let n=0,h=0,r=0;r!==s;){if(n=t.charCodeAt(r),r+=1,n>=55296&&n<=56319){if(r===s){i[e+=1]=239,i[e+=1]=191,i[e+=1]=189;break}if(h=t.charCodeAt(r),!(h>=56320&&h<=57343)){i[e+=1]=239,i[e+=1]=191,i[e+=1]=189;continue}if(n=1024*(n-55296)+h-56320+65536,r+=1,n>65535){i[e+=1]=240|n>>>18,i[e+=1]=128|n>>>12&63,i[e+=1]=128|n>>>6&63,i[e+=1]=128|63&n;continue}}n<=127?i[e+=1]=0|n:n<=2047?(i[e+=1]=192|n>>>6,i[e+=1]=128|63&n):(i[e+=1]=224|n>>>12,i[e+=1]=128|n>>>6&63,i[e+=1]=128|63&n)}return i.subarray(0,e+1)}};class i{constructor(t){this.size=t,this.offset=0,this.checkpointOffset=0,this.data=new Uint8Array(t)}getCurrentOffset(){return this.offset}checkpoint(){this.checkpointOffset=this.offset}get isEmpty(){return 0===this.offset}skip(t){return this.offset+=t,this.offset<=this.size}set(t,s){this.data.set(t,s)}boolean(t){return this.data[this.offset++]=+t,this.offset<=this.size}uint(t){for((t<0||t>Number.MAX_SAFE_INTEGER)&&(t=0);t>=128;)this.data[this.offset++]=t%256|128,t=Math.floor(t/128);return this.data[this.offset++]=t,this.offset<=this.size}int(t){return t=Math.round(t),this.uint(t>=0?2*t:-2*t-1)}string(t){const i=s.encode(t),e=i.byteLength;return!(!this.uint(e)||this.offset+e>this.size)&&(this.data.set(i,this.offset),this.offset+=e,!0)}reset(){this.offset=0,this.checkpointOffset=0}flush(){const t=this.data.slice(0,this.checkpointOffset);return this.reset(),t}}class e extends i{encode(t){switch(t[0]){case 0:case 11:case 114:case 115:return this.uint(t[1]);case 4:case 44:case 47:return this.string(t[1])&&this.string(t[2])&&this.uint(t[3]);case 5:case 20:case 70:case 75:case 76:case 77:case 82:return this.uint(t[1])&&this.uint(t[2]);case 6:return this.int(t[1])&&this.int(t[2]);case 7:return!0;case 8:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.string(t[4])&&this.boolean(t[5]);case 9:case 10:case 24:case 35:case 51:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3]);case 12:case 52:case 61:case 71:return this.uint(t[1])&&this.string(t[2])&&this.string(t[3]);case 13:case 14:case 17:case 34:case 50:case 54:return this.uint(t[1])&&this.string(t[2]);case 16:return this.uint(t[1])&&this.int(t[2])&&this.int(t[3]);case 18:return this.uint(t[1])&&this.string(t[2])&&this.int(t[3]);case 19:return this.uint(t[1])&&this.boolean(t[2]);case 21:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])&&this.string(t[5])&&this.uint(t[6])&&this.uint(t[7])&&this.uint(t[8]);case 22:case 27:case 30:case 41:case 45:case 46:case 43:case 63:case 64:case 79:case 124:return this.string(t[1])&&this.string(t[2]);case 23:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.uint(t[4])&&this.uint(t[5])&&this.uint(t[6])&&this.uint(t[7])&&this.uint(t[8])&&this.uint(t[9]);case 28:case 29:case 42:case 117:case 118:return this.string(t[1]);case 40:return this.string(t[1])&&this.uint(t[2])&&this.string(t[3])&&this.string(t[4]);case 48:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])&&this.int(t[5]);case 49:return this.int(t[1])&&this.int(t[2])&&this.uint(t[3])&&this.uint(t[4]);case 53:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.uint(t[4])&&this.uint(t[5])&&this.uint(t[6])&&this.string(t[7])&&this.string(t[8]);case 55:return this.boolean(t[1]);case 57:case 60:return this.uint(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4]);case 58:case 120:return this.int(t[1]);case 68:return this.uint(t[1])&&this.uint(t[2])&&this.string(t[3])&&this.string(t[4])&&this.uint(t[5])&&this.uint(t[6]);case 69:return this.uint(t[1])&&this.uint(t[2])&&this.string(t[3])&&this.string(t[4]);case 73:return this.uint(t[1])&&this.string(t[2])&&this.uint(t[3])&&this.string(t[4]);case 78:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4]);case 81:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.int(t[4])&&this.string(t[5]);case 83:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])&&this.string(t[5])&&this.uint(t[6])&&this.uint(t[7])&&this.uint(t[8])&&this.uint(t[9]);case 84:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.uint(t[4])&&this.string(t[5])&&this.string(t[6]);case 112:return this.uint(t[1])&&this.string(t[2])&&this.boolean(t[3])&&this.string(t[4])&&this.int(t[5])&&this.int(t[6]);case 113:return this.uint(t[1])&&this.uint(t[2])&&this.string(t[3]);case 116:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.uint(t[4])&&this.uint(t[5])&&this.uint(t[6])&&this.string(t[7])&&this.string(t[8])&&this.uint(t[9])&&this.boolean(t[10]);case 119:return this.string(t[1])&&this.uint(t[2]);case 121:return this.string(t[1])&&this.string(t[2])&&this.uint(t[3])&&this.uint(t[4]);case 122:return this.string(t[1])&&this.string(t[2])&&this.uint(t[3])&&this.string(t[4]);case 123:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])&&this.uint(t[5])}}}class n{constructor(t,s,i,n,h,r){this.pageNo=t,this.timestamp=s,this.url=i,this.onBatch=n,this.tabId=h,this.onOfflineEnd=r,this.nextIndex=0,this.beaconSize=2e5,this.encoder=new e(this.beaconSize),this.sizeBuffer=new Uint8Array(3),this.isEmpty=!0,this.beaconSizeLimit=1e6,this.prepare()}writeType(t){return this.encoder.uint(t[0])}writeFields(t){return this.encoder.encode(t)}writeSizeAt(t,s){for(let s=0;s<3;s++)this.sizeBuffer[s]=t>>8*s;this.encoder.set(this.sizeBuffer,s)}prepare(){if(!this.encoder.isEmpty)return;const t=[81,1,this.pageNo,this.nextIndex,this.timestamp,this.url],s=[118,this.tabId];this.writeType(t),this.writeFields(t),this.writeWithSize(s),this.isEmpty=!0}writeWithSize(t){const s=this.encoder;if(!this.writeType(t)||!s.skip(3))return!1;const i=s.getCurrentOffset(),e=this.writeFields(t);if(e){const e=s.getCurrentOffset()-i;if(e>16777215)return console.warn(\"OpenReplay: max message size overflow.\"),!1;this.writeSizeAt(e,i-3),s.checkpoint(),this.isEmpty=this.isEmpty&&0===t[0],this.nextIndex++}return e}setBeaconSizeLimit(t){this.beaconSizeLimit=t}writeMessage(t){if(\"q_end\"===t[0])return this.finaliseBatch(),this.onOfflineEnd();0===t[0]&&(this.timestamp=t[1]),122===t[0]&&(this.url=t[1]),this.writeWithSize(t)||(this.finaliseBatch(),this.writeWithSize(t)||(this.encoder=new e(this.beaconSizeLimit),this.prepare(),this.writeWithSize(t)?this.finaliseBatch():console.warn(\"OpenReplay: beacon size overflow. Skipping large message.\",t,this),this.encoder=new e(this.beaconSize),this.prepare()))}finaliseBatch(){if(this.isEmpty)return;const t=this.encoder.flush();this.onBatch(t),this.prepare()}clean(){this.encoder.reset()}}var h;!function(t){t[t.NotActive=0]=\"NotActive\",t[t.Starting=1]=\"Starting\",t[t.Stopping=2]=\"Stopping\",t[t.Active=3]=\"Active\",t[t.Stopped=4]=\"Stopped\"}(h||(h={}));let r=null,a=null,u=h.NotActive;function o(){a&&a.finaliseBatch()}function c(){return new Promise((t=>{u=h.Stopping,null!==p&&(clearInterval(p),p=null),a&&(a.clean(),a=null),r&&(r.clean(),setTimeout((()=>{r=null}),20)),setTimeout((()=>{u=h.NotActive,t(null)}),100)}))}function l(){[h.Stopped,h.Stopping].includes(u)||(postMessage(\"a_stop\"),c().then((()=>{postMessage(\"a_start\")})))}let g,p=null;self.onmessage=({data:s})=>{if(null!=s){if(\"stop\"===s)return o(),void c().then((()=>{u=h.Stopped}));if(\"forceFlushBatch\"!==s){if(!Array.isArray(s)){if(\"compressed\"===s.type){if(!r)return console.debug(\"OR WebWorker: sender not initialised. Compressed batch.\"),void l();s.batch&&r.sendCompressed(s.batch)}if(\"uncompressed\"===s.type){if(!r)return console.debug(\"OR WebWorker: sender not initialised. Uncompressed batch.\"),void l();s.batch&&r.sendUncompressed(s.batch)}return\"start\"===s.type?(u=h.Starting,r=new t(s.ingestPoint,(()=>{l()}),(t=>{!function(t){postMessage({type:\"failure\",reason:t}),c()}(t)}),s.connAttemptCount,s.connAttemptGap,(t=>{postMessage({type:\"compress\",batch:t},[t.buffer])}),s.pageNo),a=new n(s.pageNo,s.timestamp,s.url,(t=>{r&&r.push(t)}),s.tabId,(()=>postMessage({type:\"queue_empty\"}))),null===p&&(p=setInterval(o,1e4)),u=h.Active):\"auth\"===s.type?r?a?(r.authorise(s.token),void(s.beaconSizeLimit&&a.setBeaconSizeLimit(s.beaconSizeLimit))):(console.debug(\"OR WebWorker: writer not initialised. Received auth.\"),void l()):(console.debug(\"OR WebWorker: sender not initialised. Received auth.\"),void l()):void 0}if(a){const t=a;s.forEach((s=>{55===s[0]&&(s[1]?g=setTimeout((()=>l()),18e5):clearTimeout(g)),t.writeMessage(s)}))}else postMessage(\"not_init\"),l()}else o()}else o()}}();\n";
|
|
4680
4662
|
const CANCELED = 'canceled';
|
|
4681
4663
|
const uxtStorageKey = 'or_uxt_active';
|
|
4682
4664
|
const bufferStorageKey = 'or_buffer_1';
|
|
@@ -4730,7 +4712,7 @@ class App {
|
|
|
4730
4712
|
this.stopCallbacks = [];
|
|
4731
4713
|
this.commitCallbacks = [];
|
|
4732
4714
|
this.activityState = ActivityState.NotActive;
|
|
4733
|
-
this.version = '16.0.2
|
|
4715
|
+
this.version = '16.0.2'; // TODO: version compatability check inside each plugin.
|
|
4734
4716
|
this.socketMode = false;
|
|
4735
4717
|
this.compressionThreshold = 24 * 1000;
|
|
4736
4718
|
this.bc = null;
|
|
@@ -4962,8 +4944,6 @@ class App {
|
|
|
4962
4944
|
}
|
|
4963
4945
|
};
|
|
4964
4946
|
this.startTimeout = null;
|
|
4965
|
-
this.heartbeatInterval = null;
|
|
4966
|
-
this.restartTimeout = null;
|
|
4967
4947
|
this.coldStartCommitN = 0;
|
|
4968
4948
|
this.delay = 0;
|
|
4969
4949
|
this.attachStartCallback = (cb, useSafe = false) => {
|
|
@@ -5065,6 +5045,7 @@ class App {
|
|
|
5065
5045
|
fixedCanvasScaling: false,
|
|
5066
5046
|
disableCanvas: false,
|
|
5067
5047
|
captureIFrames: true,
|
|
5048
|
+
disableSprites: false,
|
|
5068
5049
|
obscureTextEmails: true,
|
|
5069
5050
|
obscureTextNumbers: false,
|
|
5070
5051
|
crossdomain: {
|
|
@@ -5243,17 +5224,6 @@ class App {
|
|
|
5243
5224
|
this.worker.postMessage(null);
|
|
5244
5225
|
}
|
|
5245
5226
|
};
|
|
5246
|
-
this.heartbeatInterval = setInterval(() => {
|
|
5247
|
-
if (this.worker) {
|
|
5248
|
-
this.worker.postMessage('heartbeat_q');
|
|
5249
|
-
this.restartTimeout = setTimeout(() => {
|
|
5250
|
-
this.stop();
|
|
5251
|
-
this.waitStatus(ActivityState.NotActive).then(() => {
|
|
5252
|
-
void this.start(this.prevOpts);
|
|
5253
|
-
});
|
|
5254
|
-
}, 10000);
|
|
5255
|
-
}
|
|
5256
|
-
}, 20000);
|
|
5257
5227
|
// keep better tactics, discard others?
|
|
5258
5228
|
this.attachEventListener(window, 'beforeunload', alertWorker, false);
|
|
5259
5229
|
this.attachEventListener(document.body, 'mouseleave', alertWorker, false, false);
|
|
@@ -5284,12 +5254,6 @@ class App {
|
|
|
5284
5254
|
else if (data === 'not_init') {
|
|
5285
5255
|
this.debug.warn('OR WebWorker: writer not initialised. Restarting tracker');
|
|
5286
5256
|
}
|
|
5287
|
-
else if (data === 'heartbeat_a') {
|
|
5288
|
-
if (this.restartTimeout) {
|
|
5289
|
-
clearTimeout(this.restartTimeout);
|
|
5290
|
-
this.restartTimeout = null;
|
|
5291
|
-
}
|
|
5292
|
-
}
|
|
5293
5257
|
else if (data.type === 'failure') {
|
|
5294
5258
|
this.stop(false);
|
|
5295
5259
|
this.debug.error('worker_failed', data.reason);
|
|
@@ -7267,7 +7231,7 @@ function roundNumber(num) {
|
|
|
7267
7231
|
return Math.round(num * 1e4);
|
|
7268
7232
|
}
|
|
7269
7233
|
|
|
7270
|
-
var e,o=-1,a=function(e){addEventListener("pageshow",(function(n){n.persisted&&(o=n.timeStamp,e(n));})
|
|
7234
|
+
var e,o=-1,a=function(e){addEventListener("pageshow",(function(n){n.persisted&&(o=n.timeStamp,e(n));}),true);},c=function(){var e=self.performance&&performance.getEntriesByType&&performance.getEntriesByType("navigation")[0];if(e&&e.responseStart>0&&e.responseStart<performance.now())return e},u=function(){var e=c();return e&&e.activationStart||0},f=function(e,n){var t=c(),r="navigate";o>=0?r="back-forward-cache":t&&(document.prerendering||u()>0?r="prerender":document.wasDiscarded?r="restore":t.type&&(r=t.type.replace(/_/g,"-")));return {name:e,value:void 0===n?-1:n,rating:"good",delta:0,entries:[],id:"v4-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:r}},s=function(e,n,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){var r=new PerformanceObserver((function(e){Promise.resolve().then((function(){n(e.getEntries());}));}));return r.observe(Object.assign({type:e,buffered:!0},t||{})),r}}catch(e){}},d=function(e,n,t,r){var i,o;return function(a){n.value>=0&&(a||r)&&((o=n.value-(i||0))||void 0===i)&&(i=n.value,n.delta=o,n.rating=function(e,n){return e>n[1]?"poor":e>n[0]?"needs-improvement":"good"}(n.value,t),e(n));}},l=function(e){requestAnimationFrame((function(){return requestAnimationFrame((function(){return e()}))}));},p=function(e){document.addEventListener("visibilitychange",(function(){"hidden"===document.visibilityState&&e();}));},v=function(e){var n=false;return function(){n||(e(),n=true);}},m=-1,h=function(){return "hidden"!==document.visibilityState||document.prerendering?1/0:0},g=function(e){"hidden"===document.visibilityState&&m>-1&&(m="visibilitychange"===e.type?e.timeStamp:0,T());},y=function(){addEventListener("visibilitychange",g,true),addEventListener("prerenderingchange",g,true);},T=function(){removeEventListener("visibilitychange",g,true),removeEventListener("prerenderingchange",g,true);},E=function(){return m<0&&(m=h(),y(),a((function(){setTimeout((function(){m=h(),y();}),0);}))),{get firstHiddenTime(){return m}}},C=function(e){document.prerendering?addEventListener("prerenderingchange",(function(){return e()}),true):e();},b=[1800,3e3],S=function(e,n){n=n||{},C((function(){var t,r=E(),i=f("FCP"),o=s("paint",(function(e){e.forEach((function(e){"first-contentful-paint"===e.name&&(o.disconnect(),e.startTime<r.firstHiddenTime&&(i.value=Math.max(e.startTime-u(),0),i.entries.push(e),t(true)));}));}));o&&(t=d(e,i,b,n.reportAllChanges),a((function(r){i=f("FCP"),t=d(e,i,b,n.reportAllChanges),l((function(){i.value=performance.now()-r.timeStamp,t(true);}));})));}));},L=[.1,.25],w=function(e,n){n=n||{},S(v((function(){var t,r=f("CLS",0),i=0,o=[],c=function(e){e.forEach((function(e){if(!e.hadRecentInput){var n=o[0],t=o[o.length-1];i&&e.startTime-t.startTime<1e3&&e.startTime-n.startTime<5e3?(i+=e.value,o.push(e)):(i=e.value,o=[e]);}})),i>r.value&&(r.value=i,r.entries=o,t());},u=s("layout-shift",c);u&&(t=d(e,r,L,n.reportAllChanges),p((function(){c(u.takeRecords()),t(true);})),a((function(){i=0,r=f("CLS",0),t=d(e,r,L,n.reportAllChanges),l((function(){return t()}));})),setTimeout(t,0));})));},A=0,I=1/0,P=0,M=function(e){e.forEach((function(e){e.interactionId&&(I=Math.min(I,e.interactionId),P=Math.max(P,e.interactionId),A=P?(P-I)/7+1:0);}));},k=function(){return e?A:performance.interactionCount||0},F=function(){"interactionCount"in performance||e||(e=s("event",M,{type:"event",buffered:true,durationThreshold:0}));},D=[],x=new Map,R=0,B=function(){var e=Math.min(D.length-1,Math.floor((k()-R)/50));return D[e]},H=[],q=function(e){if(H.forEach((function(n){return n(e)})),e.interactionId||"first-input"===e.entryType){var n=D[D.length-1],t=x.get(e.interactionId);if(t||D.length<10||e.duration>n.latency){if(t)e.duration>t.latency?(t.entries=[e],t.latency=e.duration):e.duration===t.latency&&e.startTime===t.entries[0].startTime&&t.entries.push(e);else {var r={id:e.interactionId,latency:e.duration,entries:[e]};x.set(r.id,r),D.push(r);}D.sort((function(e,n){return n.latency-e.latency})),D.length>10&&D.splice(10).forEach((function(e){return x.delete(e.id)}));}}},O=function(e){var n=self.requestIdleCallback||self.setTimeout,t=-1;return e=v(e),"hidden"===document.visibilityState?e():(t=n(e),p(e)),t},N=[200,500],j=function(e,n){"PerformanceEventTiming"in self&&"interactionId"in PerformanceEventTiming.prototype&&(n=n||{},C((function(){var t;F();var r,i=f("INP"),o=function(e){O((function(){e.forEach(q);var n=B();n&&n.latency!==i.value&&(i.value=n.latency,i.entries=n.entries,r());}));},c=s("event",o,{durationThreshold:null!==(t=n.durationThreshold)&&void 0!==t?t:40});r=d(e,i,N,n.reportAllChanges),c&&(c.observe({type:"first-input",buffered:true}),p((function(){o(c.takeRecords()),r(true);})),a((function(){R=k(),D.length=0,x.clear(),i=f("INP"),r=d(e,i,N,n.reportAllChanges);})));})));},_=[2500,4e3],z={},G=function(e,n){n=n||{},C((function(){var t,r=E(),i=f("LCP"),o=function(e){n.reportAllChanges||(e=e.slice(-1)),e.forEach((function(e){e.startTime<r.firstHiddenTime&&(i.value=Math.max(e.startTime-u(),0),i.entries=[e],t());}));},c=s("largest-contentful-paint",o);if(c){t=d(e,i,_,n.reportAllChanges);var m=v((function(){z[i.id]||(o(c.takeRecords()),c.disconnect(),z[i.id]=true,t(true));}));["keydown","click"].forEach((function(e){addEventListener(e,(function(){return O(m)}),{once:true,capture:true});})),p(m),a((function(r){i=f("LCP"),t=d(e,i,_,n.reportAllChanges),l((function(){i.value=performance.now()-r.timeStamp,z[i.id]=true,t(true);}));}));}}));},J=[800,1800],K=function e(n){document.prerendering?C((function(){return e(n)})):"complete"!==document.readyState?addEventListener("load",(function(){return e(n)}),true):setTimeout(n,0);},Q=function(e,n){n=n||{};var t=f("TTFB"),r=d(e,t,J,n.reportAllChanges);K((function(){var i=c();i&&(t.value=Math.max(i.responseStart-u(),0),t.entries=[i],r(true),a((function(){t=f("TTFB",0),(r=d(e,t,J,n.reportAllChanges))(true);})));}));};
|
|
7271
7235
|
|
|
7272
7236
|
function getPaintBlocks(resources) {
|
|
7273
7237
|
const paintBlocks = [];
|
|
@@ -9211,7 +9175,7 @@ class API {
|
|
|
9211
9175
|
this.signalStartIssue = (reason, missingApi) => {
|
|
9212
9176
|
const doNotTrack = this.checkDoNotTrack();
|
|
9213
9177
|
console.log("Tracker couldn't start due to:", JSON.stringify({
|
|
9214
|
-
trackerVersion: '16.0.2
|
|
9178
|
+
trackerVersion: '16.0.2',
|
|
9215
9179
|
projectKey: this.options.projectKey,
|
|
9216
9180
|
doNotTrack,
|
|
9217
9181
|
reason: missingApi.length ? `missing api: ${missingApi.join(',')}` : reason,
|