@openreplay/tracker 3.5.12 → 3.5.13-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/cjs/app/guards.d.ts +17 -0
- package/cjs/app/guards.js +24 -0
- package/cjs/app/index.d.ts +4 -0
- package/cjs/app/index.js +20 -16
- package/cjs/app/nodes.d.ts +1 -1
- package/cjs/app/observer/observer.d.ts +2 -2
- package/cjs/app/observer/observer.js +38 -46
- package/cjs/app/observer/top_observer.js +3 -3
- package/cjs/app/sanitizer.js +2 -2
- package/cjs/index.js +1 -1
- package/cjs/modules/console.d.ts +1 -1
- package/cjs/modules/console.js +2 -1
- package/cjs/modules/cssrules.d.ts +1 -1
- package/cjs/modules/cssrules.js +2 -4
- package/cjs/modules/exception.d.ts +1 -1
- package/cjs/modules/img.d.ts +1 -1
- package/cjs/modules/img.js +2 -1
- package/cjs/modules/input.d.ts +1 -1
- package/cjs/modules/input.js +13 -12
- package/cjs/modules/longtasks.d.ts +1 -1
- package/cjs/modules/mouse.d.ts +1 -1
- package/cjs/modules/mouse.js +3 -2
- package/cjs/modules/performance.d.ts +1 -1
- package/cjs/modules/scroll.d.ts +1 -1
- package/cjs/modules/scroll.js +5 -5
- package/cjs/modules/timing.d.ts +1 -1
- package/cjs/modules/timing.js +2 -1
- package/cjs/modules/viewport.d.ts +1 -1
- package/lib/app/guards.d.ts +17 -0
- package/lib/app/guards.js +16 -0
- package/lib/app/index.d.ts +4 -0
- package/lib/app/index.js +20 -16
- package/lib/app/nodes.d.ts +1 -1
- package/lib/app/observer/observer.d.ts +2 -2
- package/lib/app/observer/observer.js +34 -42
- package/lib/app/observer/top_observer.js +3 -3
- package/lib/app/sanitizer.js +2 -2
- package/lib/common/tsconfig.tsbuildinfo +1 -1
- package/lib/index.js +1 -1
- package/lib/modules/console.d.ts +1 -1
- package/lib/modules/console.js +2 -1
- package/lib/modules/cssrules.d.ts +1 -1
- package/lib/modules/cssrules.js +2 -4
- package/lib/modules/exception.d.ts +1 -1
- package/lib/modules/img.d.ts +1 -1
- package/lib/modules/img.js +2 -1
- package/lib/modules/input.d.ts +1 -1
- package/lib/modules/input.js +13 -12
- package/lib/modules/longtasks.d.ts +1 -1
- package/lib/modules/mouse.d.ts +1 -1
- package/lib/modules/mouse.js +3 -2
- package/lib/modules/performance.d.ts +1 -1
- package/lib/modules/scroll.d.ts +1 -1
- package/lib/modules/scroll.js +5 -5
- package/lib/modules/timing.d.ts +1 -1
- package/lib/modules/timing.js +2 -1
- package/lib/modules/viewport.d.ts +1 -1
- package/package.json +1 -1
- package/cjs/app/context.d.ts +0 -18
- package/cjs/app/context.js +0 -73
- package/lib/app/context.d.ts +0 -18
- package/lib/app/context.js +0 -68
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare function isSVGElement(node: Element): node is SVGElement;
|
|
2
|
+
export declare function isElementNode(node: Node): node is Element;
|
|
3
|
+
export declare function isTextNode(node: Node): node is Text;
|
|
4
|
+
export declare function isRootNode(node: Node): boolean;
|
|
5
|
+
declare type TagTypeMap = {
|
|
6
|
+
HTML: HTMLHtmlElement;
|
|
7
|
+
IMG: HTMLImageElement;
|
|
8
|
+
INPUT: HTMLInputElement;
|
|
9
|
+
TEXTAREA: HTMLTextAreaElement;
|
|
10
|
+
SELECT: HTMLSelectElement;
|
|
11
|
+
LABEL: HTMLLabelElement;
|
|
12
|
+
IFRAME: HTMLIFrameElement;
|
|
13
|
+
STYLE: HTMLStyleElement | SVGStyleElement;
|
|
14
|
+
LINK: HTMLLinkElement;
|
|
15
|
+
};
|
|
16
|
+
export declare function hasTag<T extends keyof TagTypeMap>(el: Node, tagName: T): el is TagTypeMap[typeof tagName];
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hasTag = exports.isRootNode = exports.isTextNode = exports.isElementNode = exports.isSVGElement = void 0;
|
|
4
|
+
function isSVGElement(node) {
|
|
5
|
+
return node.namespaceURI === 'http://www.w3.org/2000/svg';
|
|
6
|
+
}
|
|
7
|
+
exports.isSVGElement = isSVGElement;
|
|
8
|
+
function isElementNode(node) {
|
|
9
|
+
return node.nodeType === Node.ELEMENT_NODE;
|
|
10
|
+
}
|
|
11
|
+
exports.isElementNode = isElementNode;
|
|
12
|
+
function isTextNode(node) {
|
|
13
|
+
return node.nodeType === Node.TEXT_NODE;
|
|
14
|
+
}
|
|
15
|
+
exports.isTextNode = isTextNode;
|
|
16
|
+
function isRootNode(node) {
|
|
17
|
+
return node.nodeType === Node.DOCUMENT_NODE ||
|
|
18
|
+
node.nodeType === Node.DOCUMENT_FRAGMENT_NODE;
|
|
19
|
+
}
|
|
20
|
+
exports.isRootNode = isRootNode;
|
|
21
|
+
function hasTag(el, tagName) {
|
|
22
|
+
return el.nodeName.toUpperCase() === tagName;
|
|
23
|
+
}
|
|
24
|
+
exports.hasTag = hasTag;
|
package/cjs/app/index.d.ts
CHANGED
|
@@ -44,6 +44,8 @@ declare type AppOptions = {
|
|
|
44
44
|
__is_snippet: boolean;
|
|
45
45
|
__debug_report_edp: string | null;
|
|
46
46
|
__debug__?: LoggerOptions;
|
|
47
|
+
localStorage: Storage;
|
|
48
|
+
sessionStorage: Storage;
|
|
47
49
|
onStart?: StartCallback;
|
|
48
50
|
} & WebworkerOptions;
|
|
49
51
|
export declare type Options = AppOptions & ObserverOptions & SanitizerOptions;
|
|
@@ -56,6 +58,8 @@ export default class App {
|
|
|
56
58
|
readonly debug: Logger;
|
|
57
59
|
readonly notify: Logger;
|
|
58
60
|
readonly session: Session;
|
|
61
|
+
readonly localStorage: Storage;
|
|
62
|
+
readonly sessionStorage: Storage;
|
|
59
63
|
private readonly messages;
|
|
60
64
|
private readonly observer;
|
|
61
65
|
private readonly startCallbacks;
|
package/cjs/app/index.js
CHANGED
|
@@ -32,7 +32,7 @@ class App {
|
|
|
32
32
|
this.stopCallbacks = [];
|
|
33
33
|
this.commitCallbacks = [];
|
|
34
34
|
this.activityState = ActivityState.NotActive;
|
|
35
|
-
this.version = '3.5.
|
|
35
|
+
this.version = '3.5.13-beta.0'; // TODO: version compatability check inside each plugin.
|
|
36
36
|
this.projectKey = projectKey;
|
|
37
37
|
this.options = Object.assign({
|
|
38
38
|
revID: '',
|
|
@@ -46,10 +46,9 @@ class App {
|
|
|
46
46
|
verbose: false,
|
|
47
47
|
__is_snippet: false,
|
|
48
48
|
__debug_report_edp: null,
|
|
49
|
+
localStorage: window.localStorage,
|
|
50
|
+
sessionStorage: window.sessionStorage,
|
|
49
51
|
}, options);
|
|
50
|
-
if (sessionToken != null) {
|
|
51
|
-
sessionStorage.setItem(this.options.session_token_key, sessionToken);
|
|
52
|
-
}
|
|
53
52
|
this.revID = this.options.revID;
|
|
54
53
|
this.sanitizer = new sanitizer_js_1.default(this, options);
|
|
55
54
|
this.nodes = new nodes_js_1.default(this.options.node_id);
|
|
@@ -59,6 +58,11 @@ class App {
|
|
|
59
58
|
this.debug = new logger_js_1.default(this.options.__debug__);
|
|
60
59
|
this.notify = new logger_js_1.default(this.options.verbose ? logger_js_1.LogLevel.Warnings : logger_js_1.LogLevel.Silent);
|
|
61
60
|
this.session = new session_js_1.default(this);
|
|
61
|
+
this.localStorage = this.options.localStorage;
|
|
62
|
+
this.sessionStorage = this.options.sessionStorage;
|
|
63
|
+
if (sessionToken != null) {
|
|
64
|
+
this.sessionStorage.setItem(this.options.session_token_key, sessionToken);
|
|
65
|
+
}
|
|
62
66
|
try {
|
|
63
67
|
this.worker = new Worker(URL.createObjectURL(new Blob([`"use strict";function t(t){function i(...i){return new t(...i)}return i.prototype=t.prototype,i}const i=new Map;const s=t(class{constructor(t,i,s){this.pageNo=t,this.firstIndex=i,this.timestamp=s,this._id=80}encode(t){return t.uint(80)&&t.uint(this.pageNo)&&t.uint(this.firstIndex)&&t.int(this.timestamp)}});i.set(80,s);const e=t(class{constructor(t){this.timestamp=t,this._id=0}encode(t){return t.uint(0)&&t.uint(this.timestamp)}});i.set(0,e);const n=t(class{constructor(t,i,s){this.url=t,this.referrer=i,this.navigationStart=s,this._id=4}encode(t){return t.uint(4)&&t.string(this.url)&&t.string(this.referrer)&&t.uint(this.navigationStart)}});i.set(4,n);const r=t(class{constructor(t,i){this.width=t,this.height=i,this._id=5}encode(t){return t.uint(5)&&t.uint(this.width)&&t.uint(this.height)}});i.set(5,r);const h=t(class{constructor(t,i){this.x=t,this.y=i,this._id=6}encode(t){return t.uint(6)&&t.int(this.x)&&t.int(this.y)}});i.set(6,h);const o=t(class{constructor(){this._id=7}encode(t){return t.uint(7)}});i.set(7,o);const c=t(class{constructor(t,i,s,e,n){this.id=t,this.parentID=i,this.index=s,this.tag=e,this.svg=n,this._id=8}encode(t){return t.uint(8)&&t.uint(this.id)&&t.uint(this.parentID)&&t.uint(this.index)&&t.string(this.tag)&&t.boolean(this.svg)}});i.set(8,c);const a=t(class{constructor(t,i,s){this.id=t,this.parentID=i,this.index=s,this._id=9}encode(t){return t.uint(9)&&t.uint(this.id)&&t.uint(this.parentID)&&t.uint(this.index)}});i.set(9,a);const u=t(class{constructor(t,i,s){this.id=t,this.parentID=i,this.index=s,this._id=10}encode(t){return t.uint(10)&&t.uint(this.id)&&t.uint(this.parentID)&&t.uint(this.index)}});i.set(10,u);const d=t(class{constructor(t){this.id=t,this._id=11}encode(t){return t.uint(11)&&t.uint(this.id)}});i.set(11,d);const l=t(class{constructor(t,i,s){this.id=t,this.name=i,this.value=s,this._id=12}encode(t){return t.uint(12)&&t.uint(this.id)&&t.string(this.name)&&t.string(this.value)}});i.set(12,l);const p=t(class{constructor(t,i){this.id=t,this.name=i,this._id=13}encode(t){return t.uint(13)&&t.uint(this.id)&&t.string(this.name)}});i.set(13,p);const m=t(class{constructor(t,i){this.id=t,this.data=i,this._id=14}encode(t){return t.uint(14)&&t.uint(this.id)&&t.string(this.data)}});i.set(14,m);const g=t(class{constructor(t,i,s){this.id=t,this.x=i,this.y=s,this._id=16}encode(t){return t.uint(16)&&t.uint(this.id)&&t.int(this.x)&&t.int(this.y)}});i.set(16,g);const f=t(class{constructor(t,i){this.id=t,this.label=i,this._id=17}encode(t){return t.uint(17)&&t.uint(this.id)&&t.string(this.label)}});i.set(17,f);const y=t(class{constructor(t,i,s){this.id=t,this.value=i,this.mask=s,this._id=18}encode(t){return t.uint(18)&&t.uint(this.id)&&t.string(this.value)&&t.int(this.mask)}});i.set(18,y);const _=t(class{constructor(t,i){this.id=t,this.checked=i,this._id=19}encode(t){return t.uint(19)&&t.uint(this.id)&&t.boolean(this.checked)}});i.set(19,_);const v=t(class{constructor(t,i){this.x=t,this.y=i,this._id=20}encode(t){return t.uint(20)&&t.uint(this.x)&&t.uint(this.y)}});i.set(20,v);const b=t(class{constructor(t,i){this.level=t,this.value=i,this._id=22}encode(t){return t.uint(22)&&t.string(this.level)&&t.string(this.value)}});i.set(22,b);const S=t(class{constructor(t,i,s,e,n,r,h,o,c){this.requestStart=t,this.responseStart=i,this.responseEnd=s,this.domContentLoadedEventStart=e,this.domContentLoadedEventEnd=n,this.loadEventStart=r,this.loadEventEnd=h,this.firstPaint=o,this.firstContentfulPaint=c,this._id=23}encode(t){return t.uint(23)&&t.uint(this.requestStart)&&t.uint(this.responseStart)&&t.uint(this.responseEnd)&&t.uint(this.domContentLoadedEventStart)&&t.uint(this.domContentLoadedEventEnd)&&t.uint(this.loadEventStart)&&t.uint(this.loadEventEnd)&&t.uint(this.firstPaint)&&t.uint(this.firstContentfulPaint)}});i.set(23,S);const w=t(class{constructor(t,i,s){this.speedIndex=t,this.visuallyComplete=i,this.timeToInteractive=s,this._id=24}encode(t){return t.uint(24)&&t.uint(this.speedIndex)&&t.uint(this.visuallyComplete)&&t.uint(this.timeToInteractive)}});i.set(24,w);const E=t(class{constructor(t,i,s){this.name=t,this.message=i,this.payload=s,this._id=25}encode(t){return t.uint(25)&&t.string(this.name)&&t.string(this.message)&&t.string(this.payload)}});i.set(25,E);const x=t(class{constructor(t,i){this.name=t,this.payload=i,this._id=27}encode(t){return t.uint(27)&&t.string(this.name)&&t.string(this.payload)}});i.set(27,x);const T=t(class{constructor(t){this.id=t,this._id=28}encode(t){return t.uint(28)&&t.string(this.id)}});i.set(28,T);const z=t(class{constructor(t){this.id=t,this._id=29}encode(t){return t.uint(29)&&t.string(this.id)}});i.set(29,z);const k=t(class{constructor(t,i){this.key=t,this.value=i,this._id=30}encode(t){return t.uint(30)&&t.string(this.key)&&t.string(this.value)}});i.set(30,k);const I=t(class{constructor(t,i,s){this.id=t,this.rule=i,this.index=s,this._id=37}encode(t){return t.uint(37)&&t.uint(this.id)&&t.string(this.rule)&&t.uint(this.index)}});i.set(37,I);const M=t(class{constructor(t,i){this.id=t,this.index=i,this._id=38}encode(t){return t.uint(38)&&t.uint(this.id)&&t.uint(this.index)}});i.set(38,M);const B=t(class{constructor(t,i,s,e,n,r,h){this.method=t,this.url=i,this.request=s,this.response=e,this.status=n,this.timestamp=r,this.duration=h,this._id=39}encode(t){return t.uint(39)&&t.string(this.method)&&t.string(this.url)&&t.string(this.request)&&t.string(this.response)&&t.uint(this.status)&&t.uint(this.timestamp)&&t.uint(this.duration)}});i.set(39,B);const L=t(class{constructor(t,i,s,e){this.name=t,this.duration=i,this.args=s,this.result=e,this._id=40}encode(t){return t.uint(40)&&t.string(this.name)&&t.uint(this.duration)&&t.string(this.args)&&t.string(this.result)}});i.set(40,L);const C=t(class{constructor(t,i){this.key=t,this.value=i,this._id=41}encode(t){return t.uint(41)&&t.string(this.key)&&t.string(this.value)}});i.set(41,C);const A=t(class{constructor(t){this.type=t,this._id=42}encode(t){return t.uint(42)&&t.string(this.type)}});i.set(42,A);const U=t(class{constructor(t,i,s){this.action=t,this.state=i,this.duration=s,this._id=44}encode(t){return t.uint(44)&&t.string(this.action)&&t.string(this.state)&&t.uint(this.duration)}});i.set(44,U);const N=t(class{constructor(t,i){this.mutation=t,this.state=i,this._id=45}encode(t){return t.uint(45)&&t.string(this.mutation)&&t.string(this.state)}});i.set(45,N);const R=t(class{constructor(t,i){this.type=t,this.payload=i,this._id=46}encode(t){return t.uint(46)&&t.string(this.type)&&t.string(this.payload)}});i.set(46,R);const O=t(class{constructor(t,i,s){this.action=t,this.state=i,this.duration=s,this._id=47}encode(t){return t.uint(47)&&t.string(this.action)&&t.string(this.state)&&t.uint(this.duration)}});i.set(47,O);const P=t(class{constructor(t,i,s,e){this.operationKind=t,this.operationName=i,this.variables=s,this.response=e,this._id=48}encode(t){return t.uint(48)&&t.string(this.operationKind)&&t.string(this.operationName)&&t.string(this.variables)&&t.string(this.response)}});i.set(48,P);const q=t(class{constructor(t,i,s,e){this.frames=t,this.ticks=i,this.totalJSHeapSize=s,this.usedJSHeapSize=e,this._id=49}encode(t){return t.uint(49)&&t.int(this.frames)&&t.int(this.ticks)&&t.uint(this.totalJSHeapSize)&&t.uint(this.usedJSHeapSize)}});i.set(49,q);const D=t(class{constructor(t,i,s,e,n,r,h,o){this.timestamp=t,this.duration=i,this.ttfb=s,this.headerSize=e,this.encodedBodySize=n,this.decodedBodySize=r,this.url=h,this.initiator=o,this._id=53}encode(t){return t.uint(53)&&t.uint(this.timestamp)&&t.uint(this.duration)&&t.uint(this.ttfb)&&t.uint(this.headerSize)&&t.uint(this.encodedBodySize)&&t.uint(this.decodedBodySize)&&t.string(this.url)&&t.string(this.initiator)}});i.set(53,D);const W=t(class{constructor(t,i){this.downlink=t,this.type=i,this._id=54}encode(t){return t.uint(54)&&t.uint(this.downlink)&&t.string(this.type)}});i.set(54,W);const H=t(class{constructor(t){this.hidden=t,this._id=55}encode(t){return t.uint(55)&&t.boolean(this.hidden)}});i.set(55,H);const J=t(class{constructor(t,i,s,e,n,r,h){this.timestamp=t,this.duration=i,this.context=s,this.containerType=e,this.containerSrc=n,this.containerId=r,this.containerName=h,this._id=59}encode(t){return t.uint(59)&&t.uint(this.timestamp)&&t.uint(this.duration)&&t.uint(this.context)&&t.uint(this.containerType)&&t.string(this.containerSrc)&&t.string(this.containerId)&&t.string(this.containerName)}});i.set(59,J);const F=t(class{constructor(t,i,s,e){this.id=t,this.name=i,this.value=s,this.baseURL=e,this._id=60}encode(t){return t.uint(60)&&t.uint(this.id)&&t.string(this.name)&&t.string(this.value)&&t.string(this.baseURL)}});i.set(60,F);const X=t(class{constructor(t,i,s){this.id=t,this.data=i,this.baseURL=s,this._id=61}encode(t){return t.uint(61)&&t.uint(this.id)&&t.string(this.data)&&t.string(this.baseURL)}});i.set(61,X);const G=t(class{constructor(t,i){this.type=t,this.value=i,this._id=63}encode(t){return t.uint(63)&&t.string(this.type)&&t.string(this.value)}});i.set(63,G);const K=t(class{constructor(t,i){this.name=t,this.payload=i,this._id=64}encode(t){return t.uint(64)&&t.string(this.name)&&t.string(this.payload)}});i.set(64,K);const j=t(class{constructor(){this._id=65}encode(t){return t.uint(65)}});i.set(65,j);const Q=t(class{constructor(t,i,s,e){this.id=t,this.rule=i,this.index=s,this.baseURL=e,this._id=67}encode(t){return t.uint(67)&&t.uint(this.id)&&t.string(this.rule)&&t.uint(this.index)&&t.string(this.baseURL)}});i.set(67,Q);const V=t(class{constructor(t,i,s,e){this.id=t,this.hesitationTime=i,this.label=s,this.selector=e,this._id=69}encode(t){return t.uint(69)&&t.uint(this.id)&&t.uint(this.hesitationTime)&&t.string(this.label)&&t.string(this.selector)}});i.set(69,V);const Y=t(class{constructor(t,i){this.frameID=t,this.id=i,this._id=70}encode(t){return t.uint(70)&&t.uint(this.frameID)&&t.uint(this.id)}});i.set(70,Y);class Z{constructor(t,i,s,e=10,n=1e3){this.onUnauthorised=i,this.onFailure=s,this.MAX_ATTEMPTS_COUNT=e,this.ATTEMPT_TIMEOUT=n,this.attemptsCount=0,this.busy=!1,this.queue=[],this.token=null,this.ingestURL=t+"/v1/web/i"}authorise(t){this.token=t}push(t){this.busy||!this.token?this.queue.push(t):this.sendBatch(t)}retry(t){this.attemptsCount>=this.MAX_ATTEMPTS_COUNT?this.onFailure():(this.attemptsCount++,setTimeout(()=>this.sendBatch(t),this.ATTEMPT_TIMEOUT*this.attemptsCount))}sendBatch(t){this.busy=!0,fetch(this.ingestURL,{body:t,method:"POST",headers:{Authorization:"Bearer "+this.token},keepalive:t.length<65536}).then(i=>{if(401===i.status)return this.busy=!1,void this.onUnauthorised();if(i.status>=400)return void this.retry(t);this.attemptsCount=0;const s=this.queue.shift();s?this.sendBatch(s):this.busy=!1}).catch(i=>{console.warn("OpenReplay:",i),this.retry(t)})}clean(){this.queue.length=0}}const tt="function"==typeof TextEncoder?new TextEncoder:{encode(t){const i=t.length,s=new Uint8Array(3*i);let e=-1;for(var n=0,r=0,h=0;h!==i;){if(n=t.charCodeAt(h),h+=1,n>=55296&&n<=56319){if(h===i){s[e+=1]=239,s[e+=1]=191,s[e+=1]=189;break}if(!((r=t.charCodeAt(h))>=56320&&r<=57343)){s[e+=1]=239,s[e+=1]=191,s[e+=1]=189;continue}if(h+=1,(n=1024*(n-55296)+r-56320+65536)>65535){s[e+=1]=240|n>>>18,s[e+=1]=128|n>>>12&63,s[e+=1]=128|n>>>6&63,s[e+=1]=128|63&n;continue}}n<=127?s[e+=1]=0|n:n<=2047?(s[e+=1]=192|n>>>6,s[e+=1]=128|63&n):(s[e+=1]=224|n>>>12,s[e+=1]=128|n>>>6&63,s[e+=1]=128|63&n)}return s.subarray(0,e+1)}};class it{constructor(t){this.size=t,this.offset=0,this.checkpointOffset=0,this.data=new Uint8Array(t)}checkpoint(){this.checkpointOffset=this.offset}isEmpty(){return 0===this.offset}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=tt.encode(t),s=i.byteLength;return!(!this.uint(s)||this.offset+s>this.size)&&(this.data.set(i,this.offset),this.offset+=s,!0)}reset(){this.offset=0,this.checkpointOffset=0}flush(){const t=this.data.slice(0,this.checkpointOffset);return this.reset(),t}}class st{constructor(t,i,s){this.pageNo=t,this.timestamp=i,this.onBatch=s,this.nextIndex=0,this.beaconSize=2e5,this.writer=new it(this.beaconSize),this.isEmpty=!0,this.beaconSizeLimit=1e6,this.prepareBatchMeta()}prepareBatchMeta(){return new s(this.pageNo,this.nextIndex,this.timestamp).encode(this.writer)}setBeaconSizeLimit(t){this.beaconSizeLimit=t}writeMessage(t){if(t instanceof e&&(this.timestamp=t.timestamp),!t.encode(this.writer))for(this.isEmpty||(this.onBatch(this.writer.flush()),this.prepareBatchMeta());!t.encode(this.writer);){if(this.beaconSize===this.beaconSizeLimit)return console.warn("OpenReplay: beacon size overflow. Skipping large message."),this.writer.reset(),this.prepareBatchMeta(),void(this.isEmpty=!0);this.beaconSize=Math.min(2*this.beaconSize,this.beaconSizeLimit),this.writer=new it(this.beaconSize),this.prepareBatchMeta()}this.writer.checkpoint(),this.nextIndex++,this.isEmpty=!1}finaliseBatch(){this.isEmpty||(this.onBatch(this.writer.flush()),this.prepareBatchMeta(),this.isEmpty=!0)}clean(){this.writer.reset()}}let et=null,nt=null;function rt(){nt&&nt.finaliseBatch()}function ht(){null!==ct&&(clearInterval(ct),ct=null),nt&&(nt.clean(),nt=null)}let ot,ct=null;self.onmessage=({data:t})=>{if(null!=t){if("stop"===t)return rt(),void ht();if(Array.isArray(t)){if(!nt)throw new Error("WebWorker: writer not initialised.");const s=nt;t.forEach(t=>{const e=new(i.get(t._id));Object.assign(e,t),e instanceof H&&(e.hidden?ot=setTimeout(()=>self.postMessage("restart"),18e5):clearTimeout(ot)),s.writeMessage(e)})}else{if("start"===t.type)return et=new Z(t.ingestPoint,()=>{self.postMessage("restart")},()=>{et&&(et.clean(),et=null),ht(),self.postMessage("failed")},t.connAttemptCount,t.connAttemptGap),nt=new st(t.pageNo,t.timestamp,t=>et&&et.push(t)),void(null===ct&&(ct=setInterval(rt,1e4)));if("auth"===t.type){if(!et)throw new Error("WebWorker: sender not initialised. Recieved auth.");if(!nt)throw new Error("WebWorker: writer not initialised. Recieved auth.");return et.authorise(t.token),void(t.beaconSizeLimit&&nt.setBeaconSizeLimit(t.beaconSizeLimit))}}}else rt()};
|
|
64
68
|
`], { type: 'text/javascript' })));
|
|
@@ -166,7 +170,7 @@ class App {
|
|
|
166
170
|
}
|
|
167
171
|
getStartInfo() {
|
|
168
172
|
return {
|
|
169
|
-
userUUID: localStorage.getItem(this.options.local_uuid_key),
|
|
173
|
+
userUUID: this.localStorage.getItem(this.options.local_uuid_key),
|
|
170
174
|
projectKey: this.projectKey,
|
|
171
175
|
revID: this.revID,
|
|
172
176
|
timestamp: (0, utils_js_1.timestamp)(),
|
|
@@ -178,7 +182,7 @@ class App {
|
|
|
178
182
|
return Object.assign(Object.assign({}, this.session.getInfo()), this.getStartInfo());
|
|
179
183
|
}
|
|
180
184
|
getSessionToken() {
|
|
181
|
-
const token = sessionStorage.getItem(this.options.session_token_key);
|
|
185
|
+
const token = this.sessionStorage.getItem(this.options.session_token_key);
|
|
182
186
|
if (token !== null) {
|
|
183
187
|
return token;
|
|
184
188
|
}
|
|
@@ -220,10 +224,10 @@ class App {
|
|
|
220
224
|
}
|
|
221
225
|
resetNextPageSession(flag) {
|
|
222
226
|
if (flag) {
|
|
223
|
-
sessionStorage.setItem(this.options.session_reset_key, 't');
|
|
227
|
+
this.sessionStorage.setItem(this.options.session_reset_key, 't');
|
|
224
228
|
}
|
|
225
229
|
else {
|
|
226
|
-
sessionStorage.removeItem(this.options.session_reset_key);
|
|
230
|
+
this.sessionStorage.removeItem(this.options.session_reset_key);
|
|
227
231
|
}
|
|
228
232
|
}
|
|
229
233
|
_start(startOpts) {
|
|
@@ -235,12 +239,12 @@ class App {
|
|
|
235
239
|
}
|
|
236
240
|
this.activityState = ActivityState.Starting;
|
|
237
241
|
let pageNo = 0;
|
|
238
|
-
const pageNoStr = sessionStorage.getItem(this.options.session_pageno_key);
|
|
242
|
+
const pageNoStr = this.sessionStorage.getItem(this.options.session_pageno_key);
|
|
239
243
|
if (pageNoStr != null) {
|
|
240
244
|
pageNo = parseInt(pageNoStr);
|
|
241
245
|
pageNo++;
|
|
242
246
|
}
|
|
243
|
-
sessionStorage.setItem(this.options.session_pageno_key, pageNo.toString());
|
|
247
|
+
this.sessionStorage.setItem(this.options.session_pageno_key, pageNo.toString());
|
|
244
248
|
const startInfo = this.getStartInfo();
|
|
245
249
|
const startWorkerMsg = {
|
|
246
250
|
type: "start",
|
|
@@ -251,14 +255,14 @@ class App {
|
|
|
251
255
|
connAttemptGap: this.options.connAttemptGap,
|
|
252
256
|
};
|
|
253
257
|
this.worker.postMessage(startWorkerMsg); // brings delay of 10th ms?
|
|
254
|
-
const sReset = sessionStorage.getItem(this.options.session_reset_key);
|
|
255
|
-
sessionStorage.removeItem(this.options.session_reset_key);
|
|
258
|
+
const sReset = this.sessionStorage.getItem(this.options.session_reset_key);
|
|
259
|
+
this.sessionStorage.removeItem(this.options.session_reset_key);
|
|
256
260
|
return window.fetch(this.options.ingestPoint + '/v1/web/start', {
|
|
257
261
|
method: 'POST',
|
|
258
262
|
headers: {
|
|
259
263
|
'Content-Type': 'application/json',
|
|
260
264
|
},
|
|
261
|
-
body: JSON.stringify(Object.assign(Object.assign({}, startInfo), { userID: startOpts.userID || this.session.getInfo().userID, token: sessionStorage.getItem(this.options.session_token_key), deviceMemory: performance_js_1.deviceMemory,
|
|
265
|
+
body: JSON.stringify(Object.assign(Object.assign({}, startInfo), { userID: startOpts.userID || this.session.getInfo().userID, token: this.sessionStorage.getItem(this.options.session_token_key), deviceMemory: performance_js_1.deviceMemory,
|
|
262
266
|
jsHeapSizeLimit: performance_js_1.jsHeapSizeLimit, reset: startOpts.forceNew || sReset !== null })),
|
|
263
267
|
})
|
|
264
268
|
.then(r => {
|
|
@@ -281,8 +285,8 @@ class App {
|
|
|
281
285
|
(typeof beaconSizeLimit !== 'number' && typeof beaconSizeLimit !== 'undefined')) {
|
|
282
286
|
return Promise.reject(`Incorrect server response: ${JSON.stringify(r)}`);
|
|
283
287
|
}
|
|
284
|
-
sessionStorage.setItem(this.options.session_token_key, token);
|
|
285
|
-
localStorage.setItem(this.options.local_uuid_key, userUUID);
|
|
288
|
+
this.sessionStorage.setItem(this.options.session_token_key, token);
|
|
289
|
+
this.localStorage.setItem(this.options.local_uuid_key, userUUID);
|
|
286
290
|
this.session.update(Object.assign({ sessionID }, startOpts));
|
|
287
291
|
this.activityState = ActivityState.Active;
|
|
288
292
|
const startWorkerMsg = {
|
|
@@ -303,7 +307,7 @@ class App {
|
|
|
303
307
|
return SuccessfulStart(onStartInfo);
|
|
304
308
|
})
|
|
305
309
|
.catch(reason => {
|
|
306
|
-
sessionStorage.removeItem(this.options.session_token_key);
|
|
310
|
+
this.sessionStorage.removeItem(this.options.session_token_key);
|
|
307
311
|
this.stop();
|
|
308
312
|
if (reason === CANCELED) {
|
|
309
313
|
return UnsuccessfulStart(CANCELED);
|
package/cjs/app/nodes.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export default class Nodes {
|
|
|
7
7
|
constructor(node_id: string);
|
|
8
8
|
attachNodeCallback(nodeCallback: NodeCallback): void;
|
|
9
9
|
attachElementListener(type: string, node: Element, elementListener: EventListener): void;
|
|
10
|
-
registerNode(node: Node): [number, boolean];
|
|
10
|
+
registerNode(node: Node): [id: number, isNew: boolean];
|
|
11
11
|
unregisterNode(node: Node): number | undefined;
|
|
12
12
|
callNodeCallbacks(node: Node): void;
|
|
13
13
|
getID(node: Node): number | undefined;
|
|
@@ -4,11 +4,11 @@ export default abstract class Observer {
|
|
|
4
4
|
protected readonly isTopContext: boolean;
|
|
5
5
|
private readonly observer;
|
|
6
6
|
private readonly commited;
|
|
7
|
-
private readonly recents;
|
|
8
|
-
private readonly myNodes;
|
|
9
7
|
private readonly indexes;
|
|
10
8
|
private readonly attributesList;
|
|
11
9
|
private readonly textSet;
|
|
10
|
+
private readonly newSet;
|
|
11
|
+
private readonly affectedSet;
|
|
12
12
|
constructor(app: App, isTopContext?: boolean);
|
|
13
13
|
private clear;
|
|
14
14
|
private sendNodeAttribute;
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const messages_js_1 = require("../../common/messages.js");
|
|
4
|
-
const
|
|
5
|
-
function isSVGElement(node) {
|
|
6
|
-
return node.namespaceURI === 'http://www.w3.org/2000/svg';
|
|
7
|
-
}
|
|
4
|
+
const guards_js_1 = require("../guards.js");
|
|
8
5
|
function isIgnored(node) {
|
|
9
|
-
if ((0,
|
|
6
|
+
if ((0, guards_js_1.isTextNode)(node)) {
|
|
10
7
|
return false;
|
|
11
8
|
}
|
|
12
|
-
if (!(0,
|
|
9
|
+
if (!(0, guards_js_1.isElementNode)(node)) {
|
|
13
10
|
return true;
|
|
14
11
|
}
|
|
15
12
|
const tag = node.tagName.toUpperCase();
|
|
@@ -24,11 +21,8 @@ function isIgnored(node) {
|
|
|
24
21
|
tag === 'TITLE' ||
|
|
25
22
|
tag === 'BASE');
|
|
26
23
|
}
|
|
27
|
-
function isRootNode(node) {
|
|
28
|
-
return (0, context_js_1.isInstance)(node, Document) || (0, context_js_1.isInstance)(node, ShadowRoot);
|
|
29
|
-
}
|
|
30
24
|
function isObservable(node) {
|
|
31
|
-
if (isRootNode(node)) {
|
|
25
|
+
if ((0, guards_js_1.isRootNode)(node)) {
|
|
32
26
|
return true;
|
|
33
27
|
}
|
|
34
28
|
return !isIgnored(node);
|
|
@@ -38,20 +32,23 @@ class Observer {
|
|
|
38
32
|
this.app = app;
|
|
39
33
|
this.isTopContext = isTopContext;
|
|
40
34
|
this.commited = [];
|
|
41
|
-
this.recents = [];
|
|
42
|
-
this.myNodes = [];
|
|
43
35
|
this.indexes = [];
|
|
44
36
|
this.attributesList = [];
|
|
45
37
|
this.textSet = new Set();
|
|
38
|
+
this.newSet = new Set();
|
|
39
|
+
this.affectedSet = new Set();
|
|
46
40
|
this.observer = new MutationObserver(this.app.safe((mutations) => {
|
|
47
41
|
for (const mutation of mutations) {
|
|
48
42
|
const target = mutation.target;
|
|
49
43
|
const type = mutation.type;
|
|
50
|
-
if (!isObservable(target)
|
|
44
|
+
if (!isObservable(target) /*|| !inDocument() */) {
|
|
51
45
|
continue;
|
|
52
46
|
}
|
|
53
47
|
if (type === 'childList') {
|
|
54
48
|
for (let i = 0; i < mutation.removedNodes.length; i++) {
|
|
49
|
+
// TODO: handle node removal separately from binding.
|
|
50
|
+
// Node removals should go first in the commit.
|
|
51
|
+
// To check: MoveNode and other possible unbinding behaviours
|
|
55
52
|
this.bindTree(mutation.removedNodes[i]);
|
|
56
53
|
}
|
|
57
54
|
for (let i = 0; i < mutation.addedNodes.length; i++) {
|
|
@@ -63,9 +60,6 @@ class Observer {
|
|
|
63
60
|
if (id === undefined) {
|
|
64
61
|
continue;
|
|
65
62
|
}
|
|
66
|
-
if (id >= this.recents.length) { // TODO: something more convinient
|
|
67
|
-
this.recents[id] = undefined;
|
|
68
|
-
}
|
|
69
63
|
if (type === 'attributes') {
|
|
70
64
|
const name = mutation.attributeName;
|
|
71
65
|
if (name === null) {
|
|
@@ -76,10 +70,12 @@ class Observer {
|
|
|
76
70
|
this.attributesList[id] = attr = new Set();
|
|
77
71
|
}
|
|
78
72
|
attr.add(name);
|
|
73
|
+
this.affectedSet.add(id);
|
|
79
74
|
continue;
|
|
80
75
|
}
|
|
81
76
|
if (type === 'characterData') {
|
|
82
77
|
this.textSet.add(id);
|
|
78
|
+
this.affectedSet.add(id);
|
|
83
79
|
continue;
|
|
84
80
|
}
|
|
85
81
|
}
|
|
@@ -88,13 +84,14 @@ class Observer {
|
|
|
88
84
|
}
|
|
89
85
|
clear() {
|
|
90
86
|
this.commited.length = 0;
|
|
91
|
-
this.recents.length = 0;
|
|
92
87
|
this.indexes.length = 1;
|
|
93
88
|
this.attributesList.length = 0;
|
|
94
89
|
this.textSet.clear();
|
|
90
|
+
this.newSet.clear();
|
|
91
|
+
this.affectedSet.clear();
|
|
95
92
|
}
|
|
96
93
|
sendNodeAttribute(id, node, name, value) {
|
|
97
|
-
if (isSVGElement(node)) {
|
|
94
|
+
if ((0, guards_js_1.isSVGElement)(node)) {
|
|
98
95
|
if (name.substr(0, 6) === 'xlink:') {
|
|
99
96
|
name = name.substr(6);
|
|
100
97
|
}
|
|
@@ -121,7 +118,7 @@ class Observer {
|
|
|
121
118
|
return;
|
|
122
119
|
}
|
|
123
120
|
if (name === 'value' &&
|
|
124
|
-
(0,
|
|
121
|
+
(0, guards_js_1.hasTag)(node, "INPUT") &&
|
|
125
122
|
node.type !== 'button' &&
|
|
126
123
|
node.type !== 'reset' &&
|
|
127
124
|
node.type !== 'submit') {
|
|
@@ -131,7 +128,7 @@ class Observer {
|
|
|
131
128
|
this.app.send(new messages_js_1.RemoveNodeAttribute(id, name));
|
|
132
129
|
return;
|
|
133
130
|
}
|
|
134
|
-
if (name === 'style' || name === 'href' && (0,
|
|
131
|
+
if (name === 'style' || name === 'href' && (0, guards_js_1.hasTag)(node, "LINK")) {
|
|
135
132
|
this.app.send(new messages_js_1.SetNodeAttributeURLBased(id, name, value, this.app.getBaseHref()));
|
|
136
133
|
return;
|
|
137
134
|
}
|
|
@@ -141,7 +138,7 @@ class Observer {
|
|
|
141
138
|
this.app.send(new messages_js_1.SetNodeAttribute(id, name, value));
|
|
142
139
|
}
|
|
143
140
|
sendNodeData(id, parentElement, data) {
|
|
144
|
-
if ((0,
|
|
141
|
+
if ((0, guards_js_1.hasTag)(parentElement, "STYLE")) {
|
|
145
142
|
this.app.send(new messages_js_1.SetCSSDataURLBased(id, data, this.app.getBaseHref()));
|
|
146
143
|
return;
|
|
147
144
|
}
|
|
@@ -149,10 +146,11 @@ class Observer {
|
|
|
149
146
|
this.app.send(new messages_js_1.SetNodeData(id, data));
|
|
150
147
|
}
|
|
151
148
|
bindNode(node) {
|
|
152
|
-
const
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
149
|
+
const [id, isNew] = this.app.nodes.registerNode(node);
|
|
150
|
+
if (isNew) {
|
|
151
|
+
this.newSet.add(id);
|
|
152
|
+
}
|
|
153
|
+
this.affectedSet.add(id);
|
|
156
154
|
}
|
|
157
155
|
bindTree(node) {
|
|
158
156
|
if (!isObservable(node)) {
|
|
@@ -172,12 +170,13 @@ class Observer {
|
|
|
172
170
|
}
|
|
173
171
|
unbindNode(node) {
|
|
174
172
|
const id = this.app.nodes.unregisterNode(node);
|
|
175
|
-
if (id !== undefined && this.recents[id] === false) {
|
|
173
|
+
// if (id !== undefined && this.recents[id] === false) { // In the old version it === flase when bindNode() was called on node but it was not new
|
|
174
|
+
if (id !== undefined && !this.newSet.has(id) && this.affectedSet.has(id)) { // Unbinding logic should be simplified. Node removals should go first.
|
|
176
175
|
this.app.send(new messages_js_1.RemoveNode(id));
|
|
177
176
|
}
|
|
178
177
|
}
|
|
179
178
|
_commitNode(id, node) {
|
|
180
|
-
if (isRootNode(node)) {
|
|
179
|
+
if ((0, guards_js_1.isRootNode)(node)) {
|
|
181
180
|
return true;
|
|
182
181
|
}
|
|
183
182
|
const parent = node.parentNode;
|
|
@@ -185,7 +184,7 @@ class Observer {
|
|
|
185
184
|
// Disable parent check for the upper context HTMLHtmlElement, because it is root there... (before)
|
|
186
185
|
// TODO: get rid of "special" cases (there is an issue with CreateDocument altered behaviour though)
|
|
187
186
|
// TODO: Clean the logic (though now it workd fine)
|
|
188
|
-
if (!(0,
|
|
187
|
+
if (!(0, guards_js_1.hasTag)(node, "HTML") || !this.isTopContext) {
|
|
189
188
|
if (parent === null) {
|
|
190
189
|
this.unbindNode(node);
|
|
191
190
|
return false;
|
|
@@ -212,24 +211,24 @@ class Observer {
|
|
|
212
211
|
sibling = sibling.previousSibling;
|
|
213
212
|
}
|
|
214
213
|
if (sibling === null) {
|
|
215
|
-
this.indexes[id] = 0;
|
|
214
|
+
this.indexes[id] = 0;
|
|
216
215
|
}
|
|
217
|
-
const isNew = this.
|
|
216
|
+
const isNew = this.newSet.has(id);
|
|
218
217
|
const index = this.indexes[id];
|
|
219
218
|
if (index === undefined) {
|
|
220
219
|
throw 'commitNode: missing node index';
|
|
221
220
|
}
|
|
222
221
|
if (isNew === true) {
|
|
223
|
-
if ((0,
|
|
222
|
+
if ((0, guards_js_1.isElementNode)(node)) {
|
|
224
223
|
if (parentID !== undefined) {
|
|
225
|
-
this.app.send(new messages_js_1.CreateElementNode(id, parentID, index, node.tagName, isSVGElement(node)));
|
|
224
|
+
this.app.send(new messages_js_1.CreateElementNode(id, parentID, index, node.tagName, (0, guards_js_1.isSVGElement)(node)));
|
|
226
225
|
}
|
|
227
226
|
for (let i = 0; i < node.attributes.length; i++) {
|
|
228
227
|
const attr = node.attributes[i];
|
|
229
228
|
this.sendNodeAttribute(id, node, attr.nodeName, attr.value);
|
|
230
229
|
}
|
|
231
230
|
}
|
|
232
|
-
else if ((0,
|
|
231
|
+
else if ((0, guards_js_1.isTextNode)(node)) {
|
|
233
232
|
// for text node id != 0, hence parentID !== undefined and parent is Element
|
|
234
233
|
this.app.send(new messages_js_1.CreateTextNode(id, parentID, index));
|
|
235
234
|
this.sendNodeData(id, parent, node.data);
|
|
@@ -237,11 +236,12 @@ class Observer {
|
|
|
237
236
|
return true;
|
|
238
237
|
}
|
|
239
238
|
if (isNew === false && parentID !== undefined) {
|
|
239
|
+
// does this happen a lot?
|
|
240
240
|
this.app.send(new messages_js_1.MoveNode(id, parentID, index));
|
|
241
241
|
}
|
|
242
242
|
const attr = this.attributesList[id];
|
|
243
243
|
if (attr !== undefined) {
|
|
244
|
-
if (!(0,
|
|
244
|
+
if (!(0, guards_js_1.isElementNode)(node)) {
|
|
245
245
|
throw 'commitNode: node is not an element';
|
|
246
246
|
}
|
|
247
247
|
for (const name of attr) {
|
|
@@ -249,7 +249,7 @@ class Observer {
|
|
|
249
249
|
}
|
|
250
250
|
}
|
|
251
251
|
if (this.textSet.has(id)) {
|
|
252
|
-
if (!(0,
|
|
252
|
+
if (!(0, guards_js_1.isTextNode)(node)) {
|
|
253
253
|
throw 'commitNode: node is not a text';
|
|
254
254
|
}
|
|
255
255
|
// for text node id != 0, hence parent is Element
|
|
@@ -270,19 +270,12 @@ class Observer {
|
|
|
270
270
|
}
|
|
271
271
|
commitNodes() {
|
|
272
272
|
let node;
|
|
273
|
-
|
|
274
|
-
// TODO: make things/logic nice here.
|
|
275
|
-
// commit required in any case if recents[id] true or false (in case of unbinding) or undefined (in case of attr change).
|
|
276
|
-
// Possible solution: separate new node commit (recents) and new attribute/move node commit
|
|
277
|
-
// Otherwise commitNode is called on each node, which might be a lot
|
|
278
|
-
if (!this.myNodes[id]) {
|
|
279
|
-
continue;
|
|
280
|
-
}
|
|
273
|
+
this.affectedSet.forEach(id => {
|
|
281
274
|
this.commitNode(id);
|
|
282
|
-
if (this.
|
|
275
|
+
if (this.newSet.has(id) && (node = this.app.nodes.getNode(id))) {
|
|
283
276
|
this.app.nodes.callNodeCallbacks(node);
|
|
284
277
|
}
|
|
285
|
-
}
|
|
278
|
+
});
|
|
286
279
|
this.clear();
|
|
287
280
|
}
|
|
288
281
|
// ISSSUE
|
|
@@ -302,7 +295,6 @@ class Observer {
|
|
|
302
295
|
disconnect() {
|
|
303
296
|
this.observer.disconnect();
|
|
304
297
|
this.clear();
|
|
305
|
-
this.myNodes.length = 0;
|
|
306
298
|
}
|
|
307
299
|
}
|
|
308
300
|
exports.default = Observer;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const observer_js_1 = require("./observer.js");
|
|
4
|
-
const
|
|
4
|
+
const guards_js_1 = require("../guards.js");
|
|
5
5
|
const iframe_observer_js_1 = require("./iframe_observer.js");
|
|
6
6
|
const shadow_root_observer_js_1 = require("./shadow_root_observer.js");
|
|
7
7
|
const messages_js_1 = require("../../common/messages.js");
|
|
@@ -17,7 +17,7 @@ class TopObserver extends observer_js_1.default {
|
|
|
17
17
|
}, options);
|
|
18
18
|
// IFrames
|
|
19
19
|
this.app.nodes.attachNodeCallback(node => {
|
|
20
|
-
if ((0,
|
|
20
|
+
if ((0, guards_js_1.hasTag)(node, "IFRAME") &&
|
|
21
21
|
((this.options.captureIFrames && !(0, utils_js_1.hasOpenreplayAttribute)(node, "obscured"))
|
|
22
22
|
|| (0, utils_js_1.hasOpenreplayAttribute)(node, "capture"))) {
|
|
23
23
|
this.handleIframe(node);
|
|
@@ -25,7 +25,7 @@ class TopObserver extends observer_js_1.default {
|
|
|
25
25
|
});
|
|
26
26
|
// ShadowDOM
|
|
27
27
|
this.app.nodes.attachNodeCallback(node => {
|
|
28
|
-
if ((0,
|
|
28
|
+
if ((0, guards_js_1.isElementNode)(node) && node.shadowRoot !== null) {
|
|
29
29
|
this.handleShadowRoot(node.shadowRoot);
|
|
30
30
|
}
|
|
31
31
|
});
|
package/cjs/app/sanitizer.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const utils_js_1 = require("../utils.js");
|
|
4
|
-
const
|
|
4
|
+
const guards_js_1 = require("./guards.js");
|
|
5
5
|
class Sanitizer {
|
|
6
6
|
constructor(app, options) {
|
|
7
7
|
this.app = app;
|
|
@@ -13,7 +13,7 @@ class Sanitizer {
|
|
|
13
13
|
}
|
|
14
14
|
handleNode(id, parentID, node) {
|
|
15
15
|
if (this.masked.has(parentID) ||
|
|
16
|
-
((0,
|
|
16
|
+
((0, guards_js_1.isElementNode)(node) && (0, utils_js_1.hasOpenreplayAttribute)(node, 'masked'))) {
|
|
17
17
|
this.masked.add(id);
|
|
18
18
|
}
|
|
19
19
|
}
|
package/cjs/index.js
CHANGED
|
@@ -127,7 +127,7 @@ class API {
|
|
|
127
127
|
// no-cors issue only with text/plain or not-set Content-Type
|
|
128
128
|
// req.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
|
|
129
129
|
req.send(JSON.stringify({
|
|
130
|
-
trackerVersion: '3.5.
|
|
130
|
+
trackerVersion: '3.5.13-beta.0',
|
|
131
131
|
projectKey: options.projectKey,
|
|
132
132
|
doNotTrack,
|
|
133
133
|
// TODO: add precise reason (an exact API missing)
|
package/cjs/modules/console.d.ts
CHANGED
package/cjs/modules/console.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const guards_js_1 = require("../app/guards.js");
|
|
3
4
|
const utils_js_1 = require("../utils.js");
|
|
4
5
|
const messages_js_1 = require("../common/messages.js");
|
|
5
6
|
const printError = utils_js_1.IN_BROWSER && 'InstallTrigger' in window // detect Firefox
|
|
@@ -115,7 +116,7 @@ function default_1(app, opts) {
|
|
|
115
116
|
});
|
|
116
117
|
patchConsole(window.console);
|
|
117
118
|
app.nodes.attachNodeCallback(app.safe(node => {
|
|
118
|
-
if (node
|
|
119
|
+
if ((0, guards_js_1.hasTag)(node, "IFRAME")) { // TODO: newContextCallback
|
|
119
120
|
let context = node.contentWindow;
|
|
120
121
|
if (context) {
|
|
121
122
|
patchConsole(context.console);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import App from "../app/index.js";
|
|
1
|
+
import type App from "../app/index.js";
|
|
2
2
|
export default function (app: App | null): void;
|
package/cjs/modules/cssrules.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const messages_js_1 = require("../common/messages.js");
|
|
4
|
+
const guards_js_1 = require("../app/guards.js");
|
|
4
5
|
function default_1(app) {
|
|
5
6
|
if (app === null) {
|
|
6
7
|
return;
|
|
@@ -32,10 +33,7 @@ function default_1(app) {
|
|
|
32
33
|
return deleteRule.call(this, index);
|
|
33
34
|
};
|
|
34
35
|
app.nodes.attachNodeCallback((node) => {
|
|
35
|
-
if (!(node
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
if (!(node.sheet instanceof CSSStyleSheet)) {
|
|
36
|
+
if (!(0, guards_js_1.hasTag)(node, "STYLE") || !node.sheet) {
|
|
39
37
|
return;
|
|
40
38
|
}
|
|
41
39
|
if (node.textContent !== null && node.textContent.trim().length > 0) {
|
package/cjs/modules/img.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import App from "../app/index.js";
|
|
1
|
+
import type App from "../app/index.js";
|
|
2
2
|
export default function (app: App): void;
|
package/cjs/modules/img.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const utils_js_1 = require("../utils.js");
|
|
4
4
|
const messages_js_1 = require("../common/messages.js");
|
|
5
|
+
const guards_js_1 = require("../app/guards.js");
|
|
5
6
|
const PLACEHOLDER_SRC = "https://static.openreplay.com/tracker/placeholder.jpeg";
|
|
6
7
|
function default_1(app) {
|
|
7
8
|
function sendPlaceholder(id, node) {
|
|
@@ -49,7 +50,7 @@ function default_1(app) {
|
|
|
49
50
|
}
|
|
50
51
|
});
|
|
51
52
|
app.nodes.attachNodeCallback((node) => {
|
|
52
|
-
if (!(node
|
|
53
|
+
if (!(0, guards_js_1.hasTag)(node, "IMG")) {
|
|
53
54
|
return;
|
|
54
55
|
}
|
|
55
56
|
app.nodes.attachElementListener('error', node, sendImgSrc);
|
package/cjs/modules/input.d.ts
CHANGED