@openreplay/tracker 15.1.2 → 15.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/entry.js +91 -61
- package/dist/cjs/entry.js.map +1 -1
- package/dist/cjs/index.js +91 -61
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/main/index.d.ts +2 -0
- package/dist/cjs/main/modules/viewport.d.ts +5 -1
- package/dist/lib/entry.js +91 -61
- package/dist/lib/entry.js.map +1 -1
- package/dist/lib/index.js +91 -61
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/main/index.d.ts +2 -0
- package/dist/lib/main/modules/viewport.d.ts +5 -1
- package/package.json +2 -2
package/dist/lib/index.js
CHANGED
|
@@ -4629,7 +4629,7 @@ class Session {
|
|
|
4629
4629
|
}
|
|
4630
4630
|
}
|
|
4631
4631
|
|
|
4632
|
-
function wrap(callback, n) {
|
|
4632
|
+
function wrap$1(callback, n) {
|
|
4633
4633
|
let t = 0;
|
|
4634
4634
|
return () => {
|
|
4635
4635
|
if (t++ >= n) {
|
|
@@ -4657,7 +4657,7 @@ class Ticker {
|
|
|
4657
4657
|
if (useSafe) {
|
|
4658
4658
|
callback = this.app.safe(callback);
|
|
4659
4659
|
}
|
|
4660
|
-
this.callbacks.unshift(n ? wrap(callback, n) : callback) - 1;
|
|
4660
|
+
this.callbacks.unshift(n ? wrap$1(callback, n) : callback) - 1;
|
|
4661
4661
|
}
|
|
4662
4662
|
start() {
|
|
4663
4663
|
if (this.timer === null) {
|
|
@@ -4679,7 +4679,7 @@ class Ticker {
|
|
|
4679
4679
|
* this value is injected during build time via rollup
|
|
4680
4680
|
* */
|
|
4681
4681
|
// @ts-ignore
|
|
4682
|
-
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 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 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 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=[0,this.timestamp],i=[118,this.tabId];this.writeType(t),this.writeFields(t),this.writeWithSize(s),this.writeWithSize(i),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,u=null,a=h.NotActive;function o(){u&&u.finaliseBatch()}function c(){return new Promise((t=>{a=h.Stopping,null!==p&&(clearInterval(p),p=null),u&&(u.clean(),u=null),r&&(r.clean(),setTimeout((()=>{r=null}),20)),setTimeout((()=>{a=h.NotActive,t(null)}),100)}))}function g(){[h.Stopped,h.Stopping].includes(a)||(postMessage(\"a_stop\"),c().then((()=>{postMessage(\"a_start\")})))}let l,p=null;self.onmessage=({data:s})=>{if(null!=s){if(\"stop\"===s)return o(),void c().then((()=>{a=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 g();s.batch&&r.sendCompressed(s.batch)}if(\"uncompressed\"===s.type){if(!r)return console.debug(\"OR WebWorker: sender not initialised. Uncompressed batch.\"),void g();s.batch&&r.sendUncompressed(s.batch)}return\"start\"===s.type?(a=h.Starting,r=new t(s.ingestPoint,(()=>{g()}),(t=>{!function(t){postMessage({type:\"failure\",reason:t}),c()}(t)}),s.connAttemptCount,s.connAttemptGap,(t=>{postMessage({type:\"compress\",batch:t},[t.buffer])}),s.pageNo),u=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)),a=h.Active):\"auth\"===s.type?r?u?(r.authorise(s.token),void(s.beaconSizeLimit&&u.setBeaconSizeLimit(s.beaconSizeLimit))):(console.debug(\"OR WebWorker: writer not initialised. Received auth.\"),void g()):(console.debug(\"OR WebWorker: sender not initialised. Received auth.\"),void g()):void 0}if(u){const t=u;s.forEach((s=>{55===s[0]&&(s[1]?l=setTimeout((()=>g()),18e5):clearTimeout(l)),t.writeMessage(s)}))}else postMessage(\"not_init\"),g()}else o()}else o()}}();\n";
|
|
4682
|
+
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 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 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 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=[0,this.timestamp],i=[118,this.tabId];this.writeType(t),this.writeFields(t),this.writeWithSize(s),this.writeWithSize(i),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,u=null,a=h.NotActive;function o(){u&&u.finaliseBatch()}function c(){return new Promise(t=>{a=h.Stopping,null!==p&&(clearInterval(p),p=null),u&&(u.clean(),u=null),r&&(r.clean(),setTimeout(()=>{r=null},20)),setTimeout(()=>{a=h.NotActive,t(null)},100)})}function g(){[h.Stopped,h.Stopping].includes(a)||(postMessage(\"a_stop\"),c().then(()=>{postMessage(\"a_start\")}))}let l,p=null;self.onmessage=({data:s})=>{if(null!=s){if(\"stop\"===s)return o(),void c().then(()=>{a=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 g();s.batch&&r.sendCompressed(s.batch)}if(\"uncompressed\"===s.type){if(!r)return console.debug(\"OR WebWorker: sender not initialised. Uncompressed batch.\"),void g();s.batch&&r.sendUncompressed(s.batch)}return\"start\"===s.type?(a=h.Starting,r=new t(s.ingestPoint,()=>{g()},t=>{!function(t){postMessage({type:\"failure\",reason:t}),c()}(t)},s.connAttemptCount,s.connAttemptGap,t=>{postMessage({type:\"compress\",batch:t},[t.buffer])},s.pageNo),u=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)),a=h.Active):\"auth\"===s.type?r?u?(r.authorise(s.token),void(s.beaconSizeLimit&&u.setBeaconSizeLimit(s.beaconSizeLimit))):(console.debug(\"OR WebWorker: writer not initialised. Received auth.\"),void g()):(console.debug(\"OR WebWorker: sender not initialised. Received auth.\"),void g()):void 0}if(u){const t=u;s.forEach(s=>{55===s[0]&&(s[1]?l=setTimeout(()=>g(),18e5):clearTimeout(l)),t.writeMessage(s)})}else postMessage(\"not_init\"),g()}else o()}else o()}}();\n";
|
|
4683
4683
|
const CANCELED = 'canceled';
|
|
4684
4684
|
const uxtStorageKey = 'or_uxt_active';
|
|
4685
4685
|
const bufferStorageKey = 'or_buffer_1';
|
|
@@ -4733,7 +4733,7 @@ class App {
|
|
|
4733
4733
|
this.stopCallbacks = [];
|
|
4734
4734
|
this.commitCallbacks = [];
|
|
4735
4735
|
this.activityState = ActivityState.NotActive;
|
|
4736
|
-
this.version = '15.
|
|
4736
|
+
this.version = '15.2.0'; // TODO: version compatability check inside each plugin.
|
|
4737
4737
|
this.socketMode = false;
|
|
4738
4738
|
this.compressionThreshold = 24 * 1000;
|
|
4739
4739
|
this.bc = null;
|
|
@@ -7529,15 +7529,18 @@ function Scroll (app, insideIframe) {
|
|
|
7529
7529
|
}, 5, false);
|
|
7530
7530
|
}
|
|
7531
7531
|
|
|
7532
|
-
function Viewport (app) {
|
|
7532
|
+
function Viewport (app, options) {
|
|
7533
7533
|
let url, width, height;
|
|
7534
7534
|
let navigationStart;
|
|
7535
7535
|
let referrer = document.referrer;
|
|
7536
|
+
const urlSanitizer = options?.urlSanitizer || ((u) => u);
|
|
7537
|
+
const titleSanitizer = options?.titleSanitizer || ((t) => t);
|
|
7536
7538
|
const sendSetPageLocation = app.safe(() => {
|
|
7537
7539
|
const { URL } = document;
|
|
7538
7540
|
if (URL !== url) {
|
|
7539
|
-
url = URL;
|
|
7540
|
-
|
|
7541
|
+
url = urlSanitizer(URL);
|
|
7542
|
+
const title = titleSanitizer(document.title);
|
|
7543
|
+
app.send(SetPageLocation(url, referrer, navigationStart, title));
|
|
7541
7544
|
navigationStart = 0;
|
|
7542
7545
|
referrer = url;
|
|
7543
7546
|
}
|
|
@@ -8042,7 +8045,10 @@ function obscure(value) {
|
|
|
8042
8045
|
const digits = numDigits(value);
|
|
8043
8046
|
return "9".repeat(digits);
|
|
8044
8047
|
}
|
|
8045
|
-
|
|
8048
|
+
if (typeof value === "string") {
|
|
8049
|
+
return value.replace(/[^\f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff\s]/g, '*');
|
|
8050
|
+
}
|
|
8051
|
+
return value;
|
|
8046
8052
|
}
|
|
8047
8053
|
function filterHeaders(headers) {
|
|
8048
8054
|
const filteredHeaders = {};
|
|
@@ -8086,14 +8092,27 @@ function filterBody(body) {
|
|
|
8086
8092
|
return JSON.stringify(parsedBody);
|
|
8087
8093
|
}
|
|
8088
8094
|
else {
|
|
8089
|
-
const
|
|
8090
|
-
|
|
8091
|
-
|
|
8092
|
-
const
|
|
8093
|
-
params.
|
|
8095
|
+
const isUrlSearch = typeof body === "string" && body.includes("?") && body.includes("=");
|
|
8096
|
+
if (isUrlSearch) {
|
|
8097
|
+
try {
|
|
8098
|
+
const params = new URLSearchParams(body);
|
|
8099
|
+
for (const key of params.keys()) {
|
|
8100
|
+
if (sensitiveParams.has(key.toLowerCase())) {
|
|
8101
|
+
const value = obscure(params.get(key));
|
|
8102
|
+
params.set(key, value);
|
|
8103
|
+
}
|
|
8104
|
+
}
|
|
8105
|
+
return params.toString();
|
|
8106
|
+
}
|
|
8107
|
+
catch (e) {
|
|
8108
|
+
// not url query ?
|
|
8109
|
+
return body;
|
|
8094
8110
|
}
|
|
8095
8111
|
}
|
|
8096
|
-
|
|
8112
|
+
else {
|
|
8113
|
+
// not json or url query
|
|
8114
|
+
return body;
|
|
8115
|
+
}
|
|
8097
8116
|
}
|
|
8098
8117
|
}
|
|
8099
8118
|
function sanitizeObject(obj) {
|
|
@@ -8264,42 +8283,47 @@ const genStringBody = (body) => {
|
|
|
8264
8283
|
return null;
|
|
8265
8284
|
}
|
|
8266
8285
|
let result;
|
|
8267
|
-
|
|
8268
|
-
if (
|
|
8269
|
-
|
|
8286
|
+
try {
|
|
8287
|
+
if (typeof body === 'string') {
|
|
8288
|
+
if (body[0] === '{' || body[0] === '[') {
|
|
8289
|
+
result = body;
|
|
8290
|
+
}
|
|
8291
|
+
// 'a=1&b=2' => try to parse as query
|
|
8292
|
+
const arr = body.split('&');
|
|
8293
|
+
if (arr.length === 1) {
|
|
8294
|
+
// not a query, parse as original string
|
|
8295
|
+
result = body;
|
|
8296
|
+
}
|
|
8297
|
+
else {
|
|
8298
|
+
// 'a=1&b=2&c' => parse as query
|
|
8299
|
+
result = arr.join(',');
|
|
8300
|
+
}
|
|
8270
8301
|
}
|
|
8271
|
-
|
|
8272
|
-
|
|
8273
|
-
|
|
8274
|
-
|
|
8302
|
+
else if (isIterable(body)) {
|
|
8303
|
+
// FormData or URLSearchParams or Array
|
|
8304
|
+
const arr = [];
|
|
8305
|
+
for (const [key, value] of body) {
|
|
8306
|
+
arr.push(`${key}=${typeof value === 'string' ? value : '[object Object]'}`);
|
|
8307
|
+
}
|
|
8308
|
+
result = arr.join(',');
|
|
8309
|
+
}
|
|
8310
|
+
else if (body instanceof Blob ||
|
|
8311
|
+
body instanceof ReadableStream ||
|
|
8312
|
+
body instanceof ArrayBuffer) {
|
|
8313
|
+
result = 'byte data';
|
|
8314
|
+
}
|
|
8315
|
+
else if (isPureObject(body)) {
|
|
8316
|
+
// overriding ArrayBufferView which is not convertable to string
|
|
8275
8317
|
result = body;
|
|
8276
8318
|
}
|
|
8277
8319
|
else {
|
|
8278
|
-
|
|
8279
|
-
result = arr.join(',');
|
|
8280
|
-
}
|
|
8281
|
-
}
|
|
8282
|
-
else if (isIterable(body)) {
|
|
8283
|
-
// FormData or URLSearchParams or Array
|
|
8284
|
-
const arr = [];
|
|
8285
|
-
for (const [key, value] of body) {
|
|
8286
|
-
arr.push(`${key}=${typeof value === 'string' ? value : '[object Object]'}`);
|
|
8320
|
+
result = `can't parse body ${typeof body}`;
|
|
8287
8321
|
}
|
|
8288
|
-
result
|
|
8289
|
-
}
|
|
8290
|
-
else if (body instanceof Blob ||
|
|
8291
|
-
body instanceof ReadableStream ||
|
|
8292
|
-
body instanceof ArrayBuffer) {
|
|
8293
|
-
result = 'byte data';
|
|
8322
|
+
return result;
|
|
8294
8323
|
}
|
|
8295
|
-
|
|
8296
|
-
|
|
8297
|
-
result = body;
|
|
8324
|
+
catch (_) {
|
|
8325
|
+
return "can't parse body";
|
|
8298
8326
|
}
|
|
8299
|
-
else {
|
|
8300
|
-
result = `can't parse body ${typeof body}`;
|
|
8301
|
-
}
|
|
8302
|
-
return result;
|
|
8303
8327
|
};
|
|
8304
8328
|
const genGetDataByUrl = (url, getData = {}) => {
|
|
8305
8329
|
if (!isPureObject(getData)) {
|
|
@@ -8494,9 +8518,10 @@ class ResponseProxyHandler {
|
|
|
8494
8518
|
if (typeof this.resp.body.getReader !== 'function') {
|
|
8495
8519
|
return;
|
|
8496
8520
|
}
|
|
8497
|
-
const
|
|
8521
|
+
const clonedResp = this.resp.clone();
|
|
8522
|
+
const _getReader = clonedResp.body.getReader;
|
|
8498
8523
|
// @ts-ignore
|
|
8499
|
-
|
|
8524
|
+
clonedResp.body.getReader = () => {
|
|
8500
8525
|
const reader = _getReader.apply(this.resp.body);
|
|
8501
8526
|
// when readyState is already 4,
|
|
8502
8527
|
// it's not a chunked stream, or it had already been read.
|
|
@@ -8941,10 +8966,17 @@ class XHRProxy {
|
|
|
8941
8966
|
}
|
|
8942
8967
|
}
|
|
8943
8968
|
|
|
8944
|
-
const
|
|
8969
|
+
const warn = (api) => {
|
|
8945
8970
|
const str = `Openreplay: Can't find ${api} in global context.`;
|
|
8946
8971
|
console.warn(str);
|
|
8947
8972
|
};
|
|
8973
|
+
const OR_FLAG = Symbol('OpenReplayProxyOriginal');
|
|
8974
|
+
const isProxied = (fn) => !!fn && fn[OR_FLAG] !== undefined;
|
|
8975
|
+
const unwrap = (fn) => isProxied(fn) ? fn[OR_FLAG] : fn;
|
|
8976
|
+
const wrap = (proxy, orig) => {
|
|
8977
|
+
proxy[OR_FLAG] = orig;
|
|
8978
|
+
return proxy;
|
|
8979
|
+
};
|
|
8948
8980
|
/**
|
|
8949
8981
|
* Creates network proxies for XMLHttpRequest, fetch, and sendBeacon to intercept and monitor network requests and
|
|
8950
8982
|
* responses.
|
|
@@ -8978,26 +9010,24 @@ function createNetworkProxy(context, ignoredHeaders, setSessionTokenHeader, sani
|
|
|
8978
9010
|
if (!context)
|
|
8979
9011
|
return;
|
|
8980
9012
|
if (modules.xhr) {
|
|
8981
|
-
|
|
8982
|
-
|
|
8983
|
-
|
|
9013
|
+
const original = unwrap(context.XMLHttpRequest);
|
|
9014
|
+
if (!original)
|
|
9015
|
+
warn('XMLHttpRequest');
|
|
8984
9016
|
else {
|
|
8985
|
-
|
|
9017
|
+
context.XMLHttpRequest = wrap(XHRProxy.create(ignoredHeaders, setSessionTokenHeader, sanitize, sendMessage, isServiceUrl, tokenUrlMatcher), original);
|
|
8986
9018
|
}
|
|
8987
9019
|
}
|
|
8988
9020
|
if (modules.fetch) {
|
|
8989
|
-
|
|
8990
|
-
|
|
8991
|
-
|
|
9021
|
+
const original = unwrap(context.fetch);
|
|
9022
|
+
if (!original)
|
|
9023
|
+
warn('fetch');
|
|
8992
9024
|
else {
|
|
8993
|
-
|
|
9025
|
+
context.fetch = wrap(FetchProxy.create(ignoredHeaders, setSessionTokenHeader, sanitize, sendMessage, isServiceUrl, tokenUrlMatcher), original);
|
|
8994
9026
|
}
|
|
8995
9027
|
}
|
|
8996
|
-
if (modules.beacon) {
|
|
8997
|
-
|
|
8998
|
-
|
|
8999
|
-
context.navigator.sendBeacon = BeaconProxy.create(origBeacon, ignoredHeaders, setSessionTokenHeader, sanitize, sendMessage, isServiceUrl);
|
|
9000
|
-
}
|
|
9028
|
+
if (modules.beacon && ((_a = context.navigator) === null || _a === void 0 ? void 0 : _a.sendBeacon)) {
|
|
9029
|
+
const original = unwrap(context.navigator.sendBeacon);
|
|
9030
|
+
context.navigator.sendBeacon = wrap(BeaconProxy.create(original, ignoredHeaders, setSessionTokenHeader, sanitize, sendMessage, isServiceUrl), original);
|
|
9001
9031
|
}
|
|
9002
9032
|
}
|
|
9003
9033
|
|
|
@@ -9337,7 +9367,7 @@ class API {
|
|
|
9337
9367
|
this.signalStartIssue = (reason, missingApi) => {
|
|
9338
9368
|
const doNotTrack = this.checkDoNotTrack();
|
|
9339
9369
|
console.log("Tracker couldn't start due to:", JSON.stringify({
|
|
9340
|
-
trackerVersion: '15.
|
|
9370
|
+
trackerVersion: '15.2.0',
|
|
9341
9371
|
projectKey: this.options.projectKey,
|
|
9342
9372
|
doNotTrack,
|
|
9343
9373
|
reason: missingApi.length ? `missing api: ${missingApi.join(',')}` : reason,
|
|
@@ -9425,7 +9455,7 @@ class API {
|
|
|
9425
9455
|
this.app = app;
|
|
9426
9456
|
if (!this.crossdomainMode) {
|
|
9427
9457
|
// no need to send iframe viewport data since its a node for us
|
|
9428
|
-
Viewport(app);
|
|
9458
|
+
Viewport(app, options.urls);
|
|
9429
9459
|
// calculated in main window
|
|
9430
9460
|
Connection(app);
|
|
9431
9461
|
// while we can calculate it here, trying to compute it for all parts is hard
|