@openreplay/tracker 16.0.2-beta.1 → 16.1.0-beta.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/cjs/common/interaction.d.ts +2 -2
- package/dist/cjs/common/messages.gen.d.ts +1 -44
- package/dist/cjs/entry.js +9821 -0
- package/dist/cjs/entry.js.map +1 -0
- package/dist/cjs/index.js +68 -103
- 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 +9814 -0
- package/dist/lib/entry.js.map +1 -0
- package/dist/lib/index.js +68 -103
- 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
|
@@ -1677,33 +1677,6 @@ function SetNodeAttributeDictGlobal(id, name, value) {
|
|
|
1677
1677
|
value,
|
|
1678
1678
|
];
|
|
1679
1679
|
}
|
|
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
1680
|
function Profiler(name, duration, args, result) {
|
|
1708
1681
|
return [
|
|
1709
1682
|
40 /* Messages.Type.Profiler */,
|
|
@@ -1846,18 +1819,6 @@ function SetNodeFocus(id) {
|
|
|
1846
1819
|
id,
|
|
1847
1820
|
];
|
|
1848
1821
|
}
|
|
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
1822
|
function SetNodeAttributeURLBased(id, name, value, baseURL) {
|
|
1862
1823
|
return [
|
|
1863
1824
|
60 /* Messages.Type.SetNodeAttributeURLBased */,
|
|
@@ -1889,15 +1850,6 @@ function CustomIssue(name, payload) {
|
|
|
1889
1850
|
payload,
|
|
1890
1851
|
];
|
|
1891
1852
|
}
|
|
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
1853
|
function MouseClick(id, hesitationTime, label, selector, normalizedX, normalizedY) {
|
|
1902
1854
|
return [
|
|
1903
1855
|
68 /* Messages.Type.MouseClick */,
|
|
@@ -2136,9 +2088,6 @@ var _Messages = /*#__PURE__*/Object.freeze({
|
|
|
2136
2088
|
AdoptedSSRemoveOwner: AdoptedSSRemoveOwner,
|
|
2137
2089
|
AdoptedSSReplaceURLBased: AdoptedSSReplaceURLBased,
|
|
2138
2090
|
BatchMetadata: BatchMetadata,
|
|
2139
|
-
CSSDeleteRule: CSSDeleteRule,
|
|
2140
|
-
CSSInsertRule: CSSInsertRule,
|
|
2141
|
-
CSSInsertRuleURLBased: CSSInsertRuleURLBased,
|
|
2142
2091
|
CanvasNode: CanvasNode,
|
|
2143
2092
|
ConnectionInformation: ConnectionInformation,
|
|
2144
2093
|
ConsoleLog: ConsoleLog,
|
|
@@ -2148,13 +2097,11 @@ var _Messages = /*#__PURE__*/Object.freeze({
|
|
|
2148
2097
|
CreateTextNode: CreateTextNode,
|
|
2149
2098
|
CustomEvent: CustomEvent,
|
|
2150
2099
|
CustomIssue: CustomIssue,
|
|
2151
|
-
Fetch: Fetch,
|
|
2152
2100
|
GraphQL: GraphQL,
|
|
2153
2101
|
GraphQLDeprecated: GraphQLDeprecated,
|
|
2154
2102
|
InputChange: InputChange,
|
|
2155
2103
|
JSException: JSException,
|
|
2156
2104
|
LoadFontFace: LoadFontFace,
|
|
2157
|
-
LongTask: LongTask,
|
|
2158
2105
|
Metadata: Metadata,
|
|
2159
2106
|
MobX: MobX,
|
|
2160
2107
|
MouseClick: MouseClick,
|
|
@@ -2592,9 +2539,7 @@ const spinnerStyles = {
|
|
|
2592
2539
|
};
|
|
2593
2540
|
|
|
2594
2541
|
const Quality = {
|
|
2595
|
-
Standard: { width: 1280, height: 720 }
|
|
2596
|
-
High: { width: 1920, height: 1080 },
|
|
2597
|
-
};
|
|
2542
|
+
Standard: { width: 1280, height: 720 }};
|
|
2598
2543
|
class Recorder {
|
|
2599
2544
|
constructor(app) {
|
|
2600
2545
|
this.app = app;
|
|
@@ -3756,8 +3701,8 @@ class Nodes {
|
|
|
3756
3701
|
}
|
|
3757
3702
|
|
|
3758
3703
|
const iconCache = {};
|
|
3759
|
-
const
|
|
3760
|
-
async function parseUseEl(useElement, mode) {
|
|
3704
|
+
const svgUrlCache = {};
|
|
3705
|
+
async function parseUseEl(useElement, mode, domParser) {
|
|
3761
3706
|
try {
|
|
3762
3707
|
const href = useElement.getAttribute('xlink:href') || useElement.getAttribute('href');
|
|
3763
3708
|
if (!href) {
|
|
@@ -3772,13 +3717,43 @@ async function parseUseEl(useElement, mode) {
|
|
|
3772
3717
|
if (iconCache[symbolId]) {
|
|
3773
3718
|
return iconCache[symbolId];
|
|
3774
3719
|
}
|
|
3775
|
-
|
|
3776
|
-
|
|
3777
|
-
|
|
3720
|
+
let svgDoc;
|
|
3721
|
+
if (svgUrlCache[url]) {
|
|
3722
|
+
if (svgUrlCache[url] === 1) {
|
|
3723
|
+
await new Promise((resolve) => {
|
|
3724
|
+
let tries = 0;
|
|
3725
|
+
const interval = setInterval(() => {
|
|
3726
|
+
if (tries > 100) {
|
|
3727
|
+
clearInterval(interval);
|
|
3728
|
+
resolve(false);
|
|
3729
|
+
}
|
|
3730
|
+
if (svgUrlCache[url] !== 1) {
|
|
3731
|
+
svgDoc = svgUrlCache[url];
|
|
3732
|
+
clearInterval(interval);
|
|
3733
|
+
resolve(true);
|
|
3734
|
+
}
|
|
3735
|
+
else {
|
|
3736
|
+
tries++;
|
|
3737
|
+
}
|
|
3738
|
+
}, 100);
|
|
3739
|
+
});
|
|
3740
|
+
}
|
|
3741
|
+
else {
|
|
3742
|
+
svgDoc = svgUrlCache[url] ?? `<svg xmlns="http://www.w3.org/2000/svg"></svg>`;
|
|
3743
|
+
}
|
|
3744
|
+
}
|
|
3745
|
+
else {
|
|
3746
|
+
svgUrlCache[url] = 1;
|
|
3747
|
+
const response = await fetch(url);
|
|
3748
|
+
const svgText = await response.text();
|
|
3749
|
+
svgDoc = domParser.parseFromString(svgText, 'image/svg+xml');
|
|
3750
|
+
svgUrlCache[url] = svgDoc;
|
|
3751
|
+
}
|
|
3752
|
+
// @ts-ignore
|
|
3778
3753
|
const symbol = svgDoc.getElementById(symbolId);
|
|
3779
3754
|
if (!symbol) {
|
|
3780
3755
|
console.debug('Openreplay: Symbol not found in SVG.');
|
|
3781
|
-
return;
|
|
3756
|
+
return '';
|
|
3782
3757
|
}
|
|
3783
3758
|
if (mode === 'inline') ;
|
|
3784
3759
|
if (mode === 'svgtext') {
|
|
@@ -3833,7 +3808,7 @@ var RecentsType;
|
|
|
3833
3808
|
RecentsType[RecentsType["Changed"] = 2] = "Changed";
|
|
3834
3809
|
})(RecentsType || (RecentsType = {}));
|
|
3835
3810
|
class Observer {
|
|
3836
|
-
constructor(app, isTopContext = false) {
|
|
3811
|
+
constructor(app, isTopContext = false, options = { disableSprites: false }) {
|
|
3837
3812
|
this.app = app;
|
|
3838
3813
|
this.isTopContext = isTopContext;
|
|
3839
3814
|
this.commited = [];
|
|
@@ -3841,6 +3816,9 @@ class Observer {
|
|
|
3841
3816
|
this.indexes = [];
|
|
3842
3817
|
this.attributesMap = new Map();
|
|
3843
3818
|
this.textSet = new Set();
|
|
3819
|
+
this.disableSprites = false;
|
|
3820
|
+
this.domParser = new DOMParser();
|
|
3821
|
+
this.disableSprites = options.disableSprites;
|
|
3844
3822
|
this.observer = createMutationObserver(this.app.safe((mutations) => {
|
|
3845
3823
|
for (const mutation of mutations) {
|
|
3846
3824
|
// mutations order is sequential
|
|
@@ -3935,8 +3913,8 @@ class Observer {
|
|
|
3935
3913
|
if (value === null) {
|
|
3936
3914
|
this.app.send(RemoveNodeAttribute(id, name));
|
|
3937
3915
|
}
|
|
3938
|
-
if (isUseElement(node) && name === 'href') {
|
|
3939
|
-
parseUseEl(node, 'svgtext')
|
|
3916
|
+
if (isUseElement(node) && name === 'href' && !this.disableSprites) {
|
|
3917
|
+
parseUseEl(node, 'svgtext', this.domParser)
|
|
3940
3918
|
.then((svgData) => {
|
|
3941
3919
|
if (svgData) {
|
|
3942
3920
|
this.app.send(SetNodeAttribute(id, name, `_$OPENREPLAY_SPRITE$_${svgData}`));
|
|
@@ -4289,7 +4267,11 @@ class IFrameOffsets {
|
|
|
4289
4267
|
const attachShadowNativeFn = IN_BROWSER ? Element.prototype.attachShadow : () => new ShadowRoot();
|
|
4290
4268
|
class TopObserver extends Observer {
|
|
4291
4269
|
constructor(params) {
|
|
4292
|
-
|
|
4270
|
+
const opts = Object.assign({
|
|
4271
|
+
captureIFrames: true,
|
|
4272
|
+
disableSprites: false,
|
|
4273
|
+
}, params.options);
|
|
4274
|
+
super(params.app, true, opts);
|
|
4293
4275
|
this.iframeOffsets = new IFrameOffsets();
|
|
4294
4276
|
this.contextCallbacks = [];
|
|
4295
4277
|
// Attached once per Tracker instance
|
|
@@ -4299,9 +4281,7 @@ class TopObserver extends Observer {
|
|
|
4299
4281
|
this.docObservers = new WeakMap();
|
|
4300
4282
|
this.shadowRootObservers = new WeakMap();
|
|
4301
4283
|
this.app = params.app;
|
|
4302
|
-
this.options =
|
|
4303
|
-
captureIFrames: true,
|
|
4304
|
-
}, params.options);
|
|
4284
|
+
this.options = opts;
|
|
4305
4285
|
// IFrames
|
|
4306
4286
|
this.app.nodes.attachNodeCallback((node) => {
|
|
4307
4287
|
if (hasTag(node, 'iframe') &&
|
|
@@ -4635,10 +4615,6 @@ function wrap(callback, n) {
|
|
|
4635
4615
|
}
|
|
4636
4616
|
};
|
|
4637
4617
|
}
|
|
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
4618
|
class Ticker {
|
|
4643
4619
|
constructor(app) {
|
|
4644
4620
|
this.app = app;
|
|
@@ -4680,7 +4656,7 @@ class Ticker {
|
|
|
4680
4656
|
* this value is injected during build time via rollup
|
|
4681
4657
|
* */
|
|
4682
4658
|
// @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";
|
|
4659
|
+
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
4660
|
const CANCELED = 'canceled';
|
|
4685
4661
|
const uxtStorageKey = 'or_uxt_active';
|
|
4686
4662
|
const bufferStorageKey = 'or_buffer_1';
|
|
@@ -4734,7 +4710,7 @@ class App {
|
|
|
4734
4710
|
this.stopCallbacks = [];
|
|
4735
4711
|
this.commitCallbacks = [];
|
|
4736
4712
|
this.activityState = ActivityState.NotActive;
|
|
4737
|
-
this.version = '16.0
|
|
4713
|
+
this.version = '16.1.0-beta.0'; // TODO: version compatability check inside each plugin.
|
|
4738
4714
|
this.socketMode = false;
|
|
4739
4715
|
this.compressionThreshold = 24 * 1000;
|
|
4740
4716
|
this.bc = null;
|
|
@@ -4966,8 +4942,6 @@ class App {
|
|
|
4966
4942
|
}
|
|
4967
4943
|
};
|
|
4968
4944
|
this.startTimeout = null;
|
|
4969
|
-
this.heartbeatInterval = null;
|
|
4970
|
-
this.restartTimeout = null;
|
|
4971
4945
|
this.coldStartCommitN = 0;
|
|
4972
4946
|
this.delay = 0;
|
|
4973
4947
|
this.attachStartCallback = (cb, useSafe = false) => {
|
|
@@ -5069,6 +5043,7 @@ class App {
|
|
|
5069
5043
|
fixedCanvasScaling: false,
|
|
5070
5044
|
disableCanvas: false,
|
|
5071
5045
|
captureIFrames: true,
|
|
5046
|
+
disableSprites: false,
|
|
5072
5047
|
obscureTextEmails: true,
|
|
5073
5048
|
obscureTextNumbers: false,
|
|
5074
5049
|
crossdomain: {
|
|
@@ -5247,17 +5222,6 @@ class App {
|
|
|
5247
5222
|
this.worker.postMessage(null);
|
|
5248
5223
|
}
|
|
5249
5224
|
};
|
|
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
5225
|
// keep better tactics, discard others?
|
|
5262
5226
|
this.attachEventListener(window, 'beforeunload', alertWorker, false);
|
|
5263
5227
|
this.attachEventListener(document.body, 'mouseleave', alertWorker, false, false);
|
|
@@ -5288,12 +5252,6 @@ class App {
|
|
|
5288
5252
|
else if (data === 'not_init') {
|
|
5289
5253
|
this.debug.warn('OR WebWorker: writer not initialised. Restarting tracker');
|
|
5290
5254
|
}
|
|
5291
|
-
else if (data === 'heartbeat_a') {
|
|
5292
|
-
if (this.restartTimeout) {
|
|
5293
|
-
clearTimeout(this.restartTimeout);
|
|
5294
|
-
this.restartTimeout = null;
|
|
5295
|
-
}
|
|
5296
|
-
}
|
|
5297
5255
|
else if (data.type === 'failure') {
|
|
5298
5256
|
this.stop(false);
|
|
5299
5257
|
this.debug.error('worker_failed', data.reason);
|
|
@@ -5387,7 +5345,16 @@ class App {
|
|
|
5387
5345
|
requestIdleCb(() => {
|
|
5388
5346
|
this.messages.unshift(TabData(this.session.getTabId()));
|
|
5389
5347
|
this.messages.unshift(Timestamp(this.timestamp()));
|
|
5390
|
-
|
|
5348
|
+
if (this.messages.length > 3) {
|
|
5349
|
+
console.log(this.messages);
|
|
5350
|
+
}
|
|
5351
|
+
try {
|
|
5352
|
+
this.worker?.postMessage(this.messages);
|
|
5353
|
+
}
|
|
5354
|
+
catch (e) {
|
|
5355
|
+
console.log(this.messages);
|
|
5356
|
+
console.error(e);
|
|
5357
|
+
}
|
|
5391
5358
|
this.commitCallbacks.forEach((cb) => cb(this.messages));
|
|
5392
5359
|
this.messages.length = 0;
|
|
5393
5360
|
});
|
|
@@ -5416,13 +5383,7 @@ class App {
|
|
|
5416
5383
|
this.coldStartCommitN = 0;
|
|
5417
5384
|
}
|
|
5418
5385
|
}
|
|
5419
|
-
/**
|
|
5420
|
-
* called every 30ms via this.ticker
|
|
5421
|
-
* */
|
|
5422
5386
|
commit() {
|
|
5423
|
-
if (this.activityState === ActivityState.NotActive) {
|
|
5424
|
-
return;
|
|
5425
|
-
}
|
|
5426
5387
|
if (this.activityState === ActivityState.ColdStart) {
|
|
5427
5388
|
this._cStartCommit();
|
|
5428
5389
|
}
|
|
@@ -5445,6 +5406,10 @@ class App {
|
|
|
5445
5406
|
}
|
|
5446
5407
|
catch (e) {
|
|
5447
5408
|
app._debug('safe_fn_call', e);
|
|
5409
|
+
// time: this.timestamp(),
|
|
5410
|
+
// name: e.name,
|
|
5411
|
+
// message: e.message,
|
|
5412
|
+
// stack: e.stack
|
|
5448
5413
|
}
|
|
5449
5414
|
}; // TODO: correct typing
|
|
5450
5415
|
}
|
|
@@ -7273,7 +7238,7 @@ function roundNumber(num) {
|
|
|
7273
7238
|
return Math.round(num * 1e4);
|
|
7274
7239
|
}
|
|
7275
7240
|
|
|
7276
|
-
var e,o=-1,a=function(e){addEventListener("pageshow",(function(n){n.persisted&&(o=n.timeStamp,e(n));})
|
|
7241
|
+
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
7242
|
|
|
7278
7243
|
function getPaintBlocks(resources) {
|
|
7279
7244
|
const paintBlocks = [];
|
|
@@ -9217,7 +9182,7 @@ class API {
|
|
|
9217
9182
|
this.signalStartIssue = (reason, missingApi) => {
|
|
9218
9183
|
const doNotTrack = this.checkDoNotTrack();
|
|
9219
9184
|
console.log("Tracker couldn't start due to:", JSON.stringify({
|
|
9220
|
-
trackerVersion: '16.0
|
|
9185
|
+
trackerVersion: '16.1.0-beta.0',
|
|
9221
9186
|
projectKey: this.options.projectKey,
|
|
9222
9187
|
doNotTrack,
|
|
9223
9188
|
reason: missingApi.length ? `missing api: ${missingApi.join(',')}` : reason,
|