@openreplay/tracker 16.0.2-beta.1 → 16.0.3-beta-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/common/interaction.d.ts +2 -2
- package/dist/cjs/common/messages.gen.d.ts +1 -44
- package/dist/cjs/entry.js +9828 -0
- package/dist/cjs/entry.js.map +1 -0
- package/dist/cjs/index.js +88 -116
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/main/app/index.d.ts +0 -5
- 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/app/ticker.d.ts +0 -4
- package/dist/cjs/main/entry.d.ts +5 -0
- package/dist/cjs/main/index.d.ts +3 -3
- 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 +9821 -0
- package/dist/lib/entry.js.map +1 -0
- package/dist/lib/index.js +88 -116
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/main/app/index.d.ts +0 -5
- 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/app/ticker.d.ts +0 -4
- package/dist/lib/main/entry.d.ts +5 -0
- package/dist/lib/main/index.d.ts +3 -3
- 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 -5
- 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/app/ticker.d.ts +0 -4
- package/dist/types/main/entry.d.ts +5 -0
- package/dist/types/main/index.d.ts +3 -3
- 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,29 +3703,76 @@ 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) {
|
|
3764
3711
|
console.debug('Openreplay: xlink:href or href not found on <use>.');
|
|
3765
3712
|
return;
|
|
3766
3713
|
}
|
|
3767
|
-
|
|
3768
|
-
if
|
|
3769
|
-
|
|
3714
|
+
let [url, symbolId] = href.split('#');
|
|
3715
|
+
// happens if svg spritemap is local, fastest case for us
|
|
3716
|
+
if (!url && symbolId) {
|
|
3717
|
+
const symbol = document.querySelector(href);
|
|
3718
|
+
if (symbol) {
|
|
3719
|
+
const inlineSvg = `
|
|
3720
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="${symbol.getAttribute('viewBox') || '0 0 24 24'}">
|
|
3721
|
+
${symbol.innerHTML}
|
|
3722
|
+
</svg>
|
|
3723
|
+
`.trim();
|
|
3724
|
+
iconCache[symbolId] = inlineSvg;
|
|
3725
|
+
return inlineSvg;
|
|
3726
|
+
}
|
|
3727
|
+
else {
|
|
3728
|
+
console.warn('Openreplay: Sprite symbol not found in the document.');
|
|
3729
|
+
return;
|
|
3730
|
+
}
|
|
3731
|
+
}
|
|
3732
|
+
if (!url && !symbolId) {
|
|
3733
|
+
console.warn('Openreplay: Invalid xlink:href or href found on <use>.');
|
|
3770
3734
|
return;
|
|
3771
3735
|
}
|
|
3772
3736
|
if (iconCache[symbolId]) {
|
|
3773
3737
|
return iconCache[symbolId];
|
|
3774
3738
|
}
|
|
3775
|
-
|
|
3776
|
-
|
|
3777
|
-
|
|
3739
|
+
let svgDoc;
|
|
3740
|
+
if (svgUrlCache[url]) {
|
|
3741
|
+
if (svgUrlCache[url] === 1) {
|
|
3742
|
+
await new Promise((resolve) => {
|
|
3743
|
+
let tries = 0;
|
|
3744
|
+
const interval = setInterval(() => {
|
|
3745
|
+
if (tries > 100) {
|
|
3746
|
+
clearInterval(interval);
|
|
3747
|
+
resolve(false);
|
|
3748
|
+
}
|
|
3749
|
+
if (svgUrlCache[url] !== 1) {
|
|
3750
|
+
svgDoc = svgUrlCache[url];
|
|
3751
|
+
clearInterval(interval);
|
|
3752
|
+
resolve(true);
|
|
3753
|
+
}
|
|
3754
|
+
else {
|
|
3755
|
+
tries++;
|
|
3756
|
+
}
|
|
3757
|
+
}, 100);
|
|
3758
|
+
});
|
|
3759
|
+
}
|
|
3760
|
+
else {
|
|
3761
|
+
svgDoc = svgUrlCache[url] ?? `<svg xmlns="http://www.w3.org/2000/svg"></svg>`;
|
|
3762
|
+
}
|
|
3763
|
+
}
|
|
3764
|
+
else {
|
|
3765
|
+
svgUrlCache[url] = 1;
|
|
3766
|
+
const response = await fetch(url);
|
|
3767
|
+
const svgText = await response.text();
|
|
3768
|
+
svgDoc = domParser.parseFromString(svgText, 'image/svg+xml');
|
|
3769
|
+
svgUrlCache[url] = svgDoc;
|
|
3770
|
+
}
|
|
3771
|
+
// @ts-ignore
|
|
3778
3772
|
const symbol = svgDoc.getElementById(symbolId);
|
|
3779
3773
|
if (!symbol) {
|
|
3780
3774
|
console.debug('Openreplay: Symbol not found in SVG.');
|
|
3781
|
-
return;
|
|
3775
|
+
return '';
|
|
3782
3776
|
}
|
|
3783
3777
|
if (mode === 'inline') ;
|
|
3784
3778
|
if (mode === 'svgtext') {
|
|
@@ -3833,7 +3827,7 @@ var RecentsType;
|
|
|
3833
3827
|
RecentsType[RecentsType["Changed"] = 2] = "Changed";
|
|
3834
3828
|
})(RecentsType || (RecentsType = {}));
|
|
3835
3829
|
class Observer {
|
|
3836
|
-
constructor(app, isTopContext = false) {
|
|
3830
|
+
constructor(app, isTopContext = false, options = { disableSprites: false }) {
|
|
3837
3831
|
this.app = app;
|
|
3838
3832
|
this.isTopContext = isTopContext;
|
|
3839
3833
|
this.commited = [];
|
|
@@ -3841,6 +3835,9 @@ class Observer {
|
|
|
3841
3835
|
this.indexes = [];
|
|
3842
3836
|
this.attributesMap = new Map();
|
|
3843
3837
|
this.textSet = new Set();
|
|
3838
|
+
this.disableSprites = false;
|
|
3839
|
+
this.domParser = new DOMParser();
|
|
3840
|
+
this.disableSprites = options.disableSprites;
|
|
3844
3841
|
this.observer = createMutationObserver(this.app.safe((mutations) => {
|
|
3845
3842
|
for (const mutation of mutations) {
|
|
3846
3843
|
// mutations order is sequential
|
|
@@ -3935,8 +3932,8 @@ class Observer {
|
|
|
3935
3932
|
if (value === null) {
|
|
3936
3933
|
this.app.send(RemoveNodeAttribute(id, name));
|
|
3937
3934
|
}
|
|
3938
|
-
if (isUseElement(node) && name === 'href') {
|
|
3939
|
-
parseUseEl(node, 'svgtext')
|
|
3935
|
+
if (isUseElement(node) && name === 'href' && !this.disableSprites) {
|
|
3936
|
+
parseUseEl(node, 'svgtext', this.domParser)
|
|
3940
3937
|
.then((svgData) => {
|
|
3941
3938
|
if (svgData) {
|
|
3942
3939
|
this.app.send(SetNodeAttribute(id, name, `_$OPENREPLAY_SPRITE$_${svgData}`));
|
|
@@ -4289,7 +4286,11 @@ class IFrameOffsets {
|
|
|
4289
4286
|
const attachShadowNativeFn = IN_BROWSER ? Element.prototype.attachShadow : () => new ShadowRoot();
|
|
4290
4287
|
class TopObserver extends Observer {
|
|
4291
4288
|
constructor(params) {
|
|
4292
|
-
|
|
4289
|
+
const opts = Object.assign({
|
|
4290
|
+
captureIFrames: true,
|
|
4291
|
+
disableSprites: false,
|
|
4292
|
+
}, params.options);
|
|
4293
|
+
super(params.app, true, opts);
|
|
4293
4294
|
this.iframeOffsets = new IFrameOffsets();
|
|
4294
4295
|
this.contextCallbacks = [];
|
|
4295
4296
|
// Attached once per Tracker instance
|
|
@@ -4299,9 +4300,7 @@ class TopObserver extends Observer {
|
|
|
4299
4300
|
this.docObservers = new WeakMap();
|
|
4300
4301
|
this.shadowRootObservers = new WeakMap();
|
|
4301
4302
|
this.app = params.app;
|
|
4302
|
-
this.options =
|
|
4303
|
-
captureIFrames: true,
|
|
4304
|
-
}, params.options);
|
|
4303
|
+
this.options = opts;
|
|
4305
4304
|
// IFrames
|
|
4306
4305
|
this.app.nodes.attachNodeCallback((node) => {
|
|
4307
4306
|
if (hasTag(node, 'iframe') &&
|
|
@@ -4635,10 +4634,6 @@ function wrap(callback, n) {
|
|
|
4635
4634
|
}
|
|
4636
4635
|
};
|
|
4637
4636
|
}
|
|
4638
|
-
/**
|
|
4639
|
-
* Takes a callback and n as number of turn skips
|
|
4640
|
-
* Every tick is 30ms, so attach(cb, 3) will call cb every 90ms
|
|
4641
|
-
* */
|
|
4642
4637
|
class Ticker {
|
|
4643
4638
|
constructor(app) {
|
|
4644
4639
|
this.app = app;
|
|
@@ -4680,7 +4675,7 @@ class Ticker {
|
|
|
4680
4675
|
* this value is injected during build time via rollup
|
|
4681
4676
|
* */
|
|
4682
4677
|
// @ts-ignore
|
|
4683
|
-
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 setTimeout((()=>{postMessage(\"heartbeat_a\")}),50);else o()}}();\n";
|
|
4678
|
+
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";
|
|
4684
4679
|
const CANCELED = 'canceled';
|
|
4685
4680
|
const uxtStorageKey = 'or_uxt_active';
|
|
4686
4681
|
const bufferStorageKey = 'or_buffer_1';
|
|
@@ -4734,7 +4729,7 @@ class App {
|
|
|
4734
4729
|
this.stopCallbacks = [];
|
|
4735
4730
|
this.commitCallbacks = [];
|
|
4736
4731
|
this.activityState = ActivityState.NotActive;
|
|
4737
|
-
this.version = '16.0.
|
|
4732
|
+
this.version = '16.0.3-beta-1'; // TODO: version compatability check inside each plugin.
|
|
4738
4733
|
this.socketMode = false;
|
|
4739
4734
|
this.compressionThreshold = 24 * 1000;
|
|
4740
4735
|
this.bc = null;
|
|
@@ -4966,8 +4961,6 @@ class App {
|
|
|
4966
4961
|
}
|
|
4967
4962
|
};
|
|
4968
4963
|
this.startTimeout = null;
|
|
4969
|
-
this.heartbeatInterval = null;
|
|
4970
|
-
this.restartTimeout = null;
|
|
4971
4964
|
this.coldStartCommitN = 0;
|
|
4972
4965
|
this.delay = 0;
|
|
4973
4966
|
this.attachStartCallback = (cb, useSafe = false) => {
|
|
@@ -5069,6 +5062,7 @@ class App {
|
|
|
5069
5062
|
fixedCanvasScaling: false,
|
|
5070
5063
|
disableCanvas: false,
|
|
5071
5064
|
captureIFrames: true,
|
|
5065
|
+
disableSprites: false,
|
|
5072
5066
|
obscureTextEmails: true,
|
|
5073
5067
|
obscureTextNumbers: false,
|
|
5074
5068
|
crossdomain: {
|
|
@@ -5247,17 +5241,6 @@ class App {
|
|
|
5247
5241
|
this.worker.postMessage(null);
|
|
5248
5242
|
}
|
|
5249
5243
|
};
|
|
5250
|
-
this.heartbeatInterval = setInterval(() => {
|
|
5251
|
-
if (this.worker) {
|
|
5252
|
-
this.restartTimeout = setTimeout(() => {
|
|
5253
|
-
this.stop();
|
|
5254
|
-
this.waitStatus(ActivityState.NotActive).then(() => {
|
|
5255
|
-
void this.start(this.prevOpts);
|
|
5256
|
-
});
|
|
5257
|
-
}, 10000);
|
|
5258
|
-
this.worker.postMessage('heartbeat_q');
|
|
5259
|
-
}
|
|
5260
|
-
}, 20000);
|
|
5261
5244
|
// keep better tactics, discard others?
|
|
5262
5245
|
this.attachEventListener(window, 'beforeunload', alertWorker, false);
|
|
5263
5246
|
this.attachEventListener(document.body, 'mouseleave', alertWorker, false, false);
|
|
@@ -5288,12 +5271,6 @@ class App {
|
|
|
5288
5271
|
else if (data === 'not_init') {
|
|
5289
5272
|
this.debug.warn('OR WebWorker: writer not initialised. Restarting tracker');
|
|
5290
5273
|
}
|
|
5291
|
-
else if (data === 'heartbeat_a') {
|
|
5292
|
-
if (this.restartTimeout) {
|
|
5293
|
-
clearTimeout(this.restartTimeout);
|
|
5294
|
-
this.restartTimeout = null;
|
|
5295
|
-
}
|
|
5296
|
-
}
|
|
5297
5274
|
else if (data.type === 'failure') {
|
|
5298
5275
|
this.stop(false);
|
|
5299
5276
|
this.debug.error('worker_failed', data.reason);
|
|
@@ -5365,8 +5342,7 @@ class App {
|
|
|
5365
5342
|
* */
|
|
5366
5343
|
_nCommit() {
|
|
5367
5344
|
if (this.socketMode) {
|
|
5368
|
-
this.messages.unshift(TabData(this.session.getTabId()));
|
|
5369
|
-
this.messages.unshift(Timestamp(this.timestamp()));
|
|
5345
|
+
this.messages.unshift(Timestamp(this.timestamp()), TabData(this.session.getTabId()));
|
|
5370
5346
|
this.commitCallbacks.forEach((cb) => cb(this.messages));
|
|
5371
5347
|
this.messages.length = 0;
|
|
5372
5348
|
return;
|
|
@@ -5385,8 +5361,7 @@ class App {
|
|
|
5385
5361
|
}
|
|
5386
5362
|
try {
|
|
5387
5363
|
requestIdleCb(() => {
|
|
5388
|
-
this.messages.unshift(TabData(this.session.getTabId()));
|
|
5389
|
-
this.messages.unshift(Timestamp(this.timestamp()));
|
|
5364
|
+
this.messages.unshift(Timestamp(this.timestamp()), TabData(this.session.getTabId()));
|
|
5390
5365
|
this.worker?.postMessage(this.messages);
|
|
5391
5366
|
this.commitCallbacks.forEach((cb) => cb(this.messages));
|
|
5392
5367
|
this.messages.length = 0;
|
|
@@ -5409,20 +5384,13 @@ class App {
|
|
|
5409
5384
|
_cStartCommit() {
|
|
5410
5385
|
this.coldStartCommitN += 1;
|
|
5411
5386
|
if (this.coldStartCommitN === 2) {
|
|
5412
|
-
this.
|
|
5413
|
-
this.bufferedMessages1.push(
|
|
5414
|
-
this.bufferedMessages2.push(
|
|
5415
|
-
this.bufferedMessages2.push(TabData(this.session.getTabId()));
|
|
5387
|
+
const payload = [Timestamp(this.timestamp()), TabData(this.session.getTabId())];
|
|
5388
|
+
this.bufferedMessages1.push(...payload);
|
|
5389
|
+
this.bufferedMessages2.push(...payload);
|
|
5416
5390
|
this.coldStartCommitN = 0;
|
|
5417
5391
|
}
|
|
5418
5392
|
}
|
|
5419
|
-
/**
|
|
5420
|
-
* called every 30ms via this.ticker
|
|
5421
|
-
* */
|
|
5422
5393
|
commit() {
|
|
5423
|
-
if (this.activityState === ActivityState.NotActive) {
|
|
5424
|
-
return;
|
|
5425
|
-
}
|
|
5426
5394
|
if (this.activityState === ActivityState.ColdStart) {
|
|
5427
5395
|
this._cStartCommit();
|
|
5428
5396
|
}
|
|
@@ -5445,6 +5413,10 @@ class App {
|
|
|
5445
5413
|
}
|
|
5446
5414
|
catch (e) {
|
|
5447
5415
|
app._debug('safe_fn_call', e);
|
|
5416
|
+
// time: this.timestamp(),
|
|
5417
|
+
// name: e.name,
|
|
5418
|
+
// message: e.message,
|
|
5419
|
+
// stack: e.stack
|
|
5448
5420
|
}
|
|
5449
5421
|
}; // TODO: correct typing
|
|
5450
5422
|
}
|
|
@@ -7273,7 +7245,7 @@ function roundNumber(num) {
|
|
|
7273
7245
|
return Math.round(num * 1e4);
|
|
7274
7246
|
}
|
|
7275
7247
|
|
|
7276
|
-
var e,o=-1,a=function(e){addEventListener("pageshow",(function(n){n.persisted&&(o=n.timeStamp,e(n));})
|
|
7248
|
+
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);})));}));};
|
|
7277
7249
|
|
|
7278
7250
|
function getPaintBlocks(resources) {
|
|
7279
7251
|
const paintBlocks = [];
|
|
@@ -9217,7 +9189,7 @@ class API {
|
|
|
9217
9189
|
this.signalStartIssue = (reason, missingApi) => {
|
|
9218
9190
|
const doNotTrack = this.checkDoNotTrack();
|
|
9219
9191
|
console.log("Tracker couldn't start due to:", JSON.stringify({
|
|
9220
|
-
trackerVersion: '16.0.
|
|
9192
|
+
trackerVersion: '16.0.3-beta-1',
|
|
9221
9193
|
projectKey: this.options.projectKey,
|
|
9222
9194
|
doNotTrack,
|
|
9223
9195
|
reason: missingApi.length ? `missing api: ${missingApi.join(',')}` : reason,
|