@openreplay/tracker 3.4.4 → 3.4.8

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.
Files changed (72) hide show
  1. package/cjs/app/index.d.ts +8 -6
  2. package/cjs/app/index.js +26 -21
  3. package/cjs/app/observer.d.ts +3 -1
  4. package/cjs/app/observer.js +54 -34
  5. package/cjs/app/ticker.d.ts +1 -1
  6. package/cjs/index.d.ts +10 -11
  7. package/cjs/index.js +56 -53
  8. package/cjs/messages/index.d.ts +2 -2
  9. package/cjs/messages/message.d.ts +1 -1
  10. package/cjs/messages/webworker.d.ts +0 -1
  11. package/cjs/modules/connection.d.ts +1 -1
  12. package/cjs/modules/connection.js +2 -2
  13. package/cjs/modules/console.d.ts +1 -1
  14. package/cjs/modules/console.js +20 -5
  15. package/cjs/modules/cssrules.d.ts +1 -1
  16. package/cjs/modules/cssrules.js +4 -4
  17. package/cjs/modules/exception.d.ts +2 -2
  18. package/cjs/modules/exception.js +4 -4
  19. package/cjs/modules/img.d.ts +1 -1
  20. package/cjs/modules/img.js +6 -6
  21. package/cjs/modules/input.d.ts +1 -1
  22. package/cjs/modules/input.js +11 -11
  23. package/cjs/modules/longtasks.d.ts +1 -1
  24. package/cjs/modules/longtasks.js +3 -3
  25. package/cjs/modules/mouse.d.ts +2 -10
  26. package/cjs/modules/mouse.js +52 -40
  27. package/cjs/modules/performance.d.ts +1 -1
  28. package/cjs/modules/performance.js +5 -5
  29. package/cjs/modules/scroll.d.ts +1 -1
  30. package/cjs/modules/scroll.js +3 -3
  31. package/cjs/modules/timing.d.ts +1 -1
  32. package/cjs/modules/timing.js +6 -6
  33. package/cjs/modules/viewport.d.ts +1 -1
  34. package/cjs/modules/viewport.js +4 -4
  35. package/cjs/utils.js +1 -1
  36. package/lib/app/index.d.ts +8 -6
  37. package/lib/app/index.js +15 -10
  38. package/lib/app/observer.d.ts +3 -1
  39. package/lib/app/observer.js +38 -18
  40. package/lib/app/ticker.d.ts +1 -1
  41. package/lib/index.d.ts +10 -11
  42. package/lib/index.js +23 -20
  43. package/lib/messages/index.d.ts +2 -2
  44. package/lib/messages/message.d.ts +1 -1
  45. package/lib/messages/tsconfig.tsbuildinfo +1 -1
  46. package/lib/messages/webworker.d.ts +0 -1
  47. package/lib/modules/connection.d.ts +1 -1
  48. package/lib/modules/connection.js +1 -1
  49. package/lib/modules/console.d.ts +1 -1
  50. package/lib/modules/console.js +18 -3
  51. package/lib/modules/cssrules.d.ts +1 -1
  52. package/lib/modules/cssrules.js +1 -1
  53. package/lib/modules/exception.d.ts +2 -2
  54. package/lib/modules/exception.js +1 -1
  55. package/lib/modules/img.d.ts +1 -1
  56. package/lib/modules/img.js +2 -2
  57. package/lib/modules/input.d.ts +1 -1
  58. package/lib/modules/input.js +2 -2
  59. package/lib/modules/longtasks.d.ts +1 -1
  60. package/lib/modules/longtasks.js +2 -2
  61. package/lib/modules/mouse.d.ts +2 -10
  62. package/lib/modules/mouse.js +48 -36
  63. package/lib/modules/performance.d.ts +1 -1
  64. package/lib/modules/performance.js +2 -2
  65. package/lib/modules/scroll.d.ts +1 -1
  66. package/lib/modules/scroll.js +1 -1
  67. package/lib/modules/timing.d.ts +1 -1
  68. package/lib/modules/timing.js +3 -3
  69. package/lib/modules/viewport.d.ts +1 -1
  70. package/lib/modules/viewport.js +1 -1
  71. package/package.json +2 -3
  72. package/tsconfig-base.json +1 -1
@@ -1,8 +1,9 @@
1
- import Message from '../messages/message';
2
- import Nodes from './nodes';
3
- import Ticker from './ticker';
4
- import type { Options as ObserverOptions } from './observer';
5
- import type { Options as WebworkerOptions } from '../messages/webworker';
1
+ import Message from "../messages/message.js";
2
+ import Nodes from "./nodes.js";
3
+ import Observer from "./observer.js";
4
+ import Ticker from "./ticker.js";
5
+ import type { Options as ObserverOptions } from "./observer.js";
6
+ import type { Options as WebworkerOptions } from "../messages/webworker.js";
6
7
  interface OnStartInfo {
7
8
  sessionID: string;
8
9
  sessionToken: string;
@@ -29,7 +30,7 @@ export default class App {
29
30
  readonly ticker: Ticker;
30
31
  readonly projectKey: string;
31
32
  private readonly messages;
32
- private readonly observer;
33
+ readonly observer: Observer;
33
34
  private readonly startCallbacks;
34
35
  private readonly stopCallbacks;
35
36
  private readonly commitCallbacks;
@@ -43,6 +44,7 @@ export default class App {
43
44
  private _debug;
44
45
  send(message: Message, urgent?: boolean): void;
45
46
  private commit;
47
+ attachCommitCallback(cb: CommitCallback): void;
46
48
  addCommitCallback(cb: CommitCallback): void;
47
49
  safe<T extends (...args: any[]) => void>(fn: T): T;
48
50
  attachStartCallback(cb: Callback): void;
package/cjs/app/index.js CHANGED
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DEFAULT_INGEST_POINT = void 0;
4
- const utils_1 = require("../utils");
5
- const messages_1 = require("../messages");
6
- const nodes_1 = require("./nodes");
7
- const observer_1 = require("./observer");
8
- const ticker_1 = require("./ticker");
9
- const performance_1 = require("../modules/performance");
4
+ const utils_js_1 = require("../utils.js");
5
+ const index_js_1 = require("../messages/index.js");
6
+ const nodes_js_1 = require("./nodes.js");
7
+ const observer_js_1 = require("./observer.js");
8
+ const ticker_js_1 = require("./ticker.js");
9
+ const performance_js_1 = require("../modules/performance.js");
10
10
  // TODO: use backendHost only
11
11
  exports.DEFAULT_INGEST_POINT = 'https://api.openreplay.com/ingest';
12
12
  class App {
@@ -17,7 +17,7 @@ class App {
17
17
  this.commitCallbacks = [];
18
18
  this._sessionID = null;
19
19
  this.isActive = false;
20
- this.version = '3.4.4';
20
+ this.version = '3.4.8';
21
21
  this.projectKey = projectKey;
22
22
  this.options = Object.assign({
23
23
  revID: '',
@@ -38,9 +38,9 @@ class App {
38
38
  sessionStorage.setItem(this.options.session_token_key, sessionToken);
39
39
  }
40
40
  this.revID = this.options.revID;
41
- this.nodes = new nodes_1.default(this.options.node_id);
42
- this.observer = new observer_1.default(this, this.options);
43
- this.ticker = new ticker_1.default(this);
41
+ this.nodes = new nodes_js_1.default(this.options.node_id);
42
+ this.observer = new observer_js_1.default(this, this.options);
43
+ this.ticker = new ticker_js_1.default(this);
44
44
  this.ticker.attach(() => this.commit());
45
45
  try {
46
46
  this.worker = new Worker(URL.createObjectURL(new Blob([`"use strict";function t(t){function s(...s){return new t(...s)}return s.prototype=t.prototype,s}const s=new Map;const i=t(class{constructor(t,s,i){this.pageNo=t,this.firstIndex=s,this.timestamp=i,this._id=80}encode(t){return t.uint(80)&&t.uint(this.pageNo)&&t.uint(this.firstIndex)&&t.int(this.timestamp)}});s.set(80,i);const n=t(class{constructor(t){this.timestamp=t,this._id=0}encode(t){return t.uint(0)&&t.uint(this.timestamp)}});s.set(0,n);const e=t(class{constructor(t,s,i){this.url=t,this.referrer=s,this.navigationStart=i,this._id=4}encode(t){return t.uint(4)&&t.string(this.url)&&t.string(this.referrer)&&t.uint(this.navigationStart)}});s.set(4,e);const r=t(class{constructor(t,s){this.width=t,this.height=s,this._id=5}encode(t){return t.uint(5)&&t.uint(this.width)&&t.uint(this.height)}});s.set(5,r);const o=t(class{constructor(t,s){this.x=t,this.y=s,this._id=6}encode(t){return t.uint(6)&&t.int(this.x)&&t.int(this.y)}});s.set(6,o);const h=t(class{constructor(){this._id=7}encode(t){return t.uint(7)}});s.set(7,h);const c=t(class{constructor(t,s,i,n,e){this.id=t,this.parentID=s,this.index=i,this.tag=n,this.svg=e,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)}});s.set(8,c);const u=t(class{constructor(t,s,i){this.id=t,this.parentID=s,this.index=i,this._id=9}encode(t){return t.uint(9)&&t.uint(this.id)&&t.uint(this.parentID)&&t.uint(this.index)}});s.set(9,u);const a=t(class{constructor(t,s,i){this.id=t,this.parentID=s,this.index=i,this._id=10}encode(t){return t.uint(10)&&t.uint(this.id)&&t.uint(this.parentID)&&t.uint(this.index)}});s.set(10,a);const d=t(class{constructor(t){this.id=t,this._id=11}encode(t){return t.uint(11)&&t.uint(this.id)}});s.set(11,d);const l=t(class{constructor(t,s,i){this.id=t,this.name=s,this.value=i,this._id=12}encode(t){return t.uint(12)&&t.uint(this.id)&&t.string(this.name)&&t.string(this.value)}});s.set(12,l);const g=t(class{constructor(t,s){this.id=t,this.name=s,this._id=13}encode(t){return t.uint(13)&&t.uint(this.id)&&t.string(this.name)}});s.set(13,g);const f=t(class{constructor(t,s){this.id=t,this.data=s,this._id=14}encode(t){return t.uint(14)&&t.uint(this.id)&&t.string(this.data)}});s.set(14,f);const p=t(class{constructor(t,s,i){this.id=t,this.x=s,this.y=i,this._id=16}encode(t){return t.uint(16)&&t.uint(this.id)&&t.int(this.x)&&t.int(this.y)}});s.set(16,p);const m=t(class{constructor(t,s){this.id=t,this.label=s,this._id=17}encode(t){return t.uint(17)&&t.uint(this.id)&&t.string(this.label)}});s.set(17,m);const _=t(class{constructor(t,s,i){this.id=t,this.value=s,this.mask=i,this._id=18}encode(t){return t.uint(18)&&t.uint(this.id)&&t.string(this.value)&&t.int(this.mask)}});s.set(18,_);const y=t(class{constructor(t,s){this.id=t,this.checked=s,this._id=19}encode(t){return t.uint(19)&&t.uint(this.id)&&t.boolean(this.checked)}});s.set(19,y);const v=t(class{constructor(t,s){this.x=t,this.y=s,this._id=20}encode(t){return t.uint(20)&&t.uint(this.x)&&t.uint(this.y)}});s.set(20,v);const S=t(class{constructor(t,s){this.level=t,this.value=s,this._id=22}encode(t){return t.uint(22)&&t.string(this.level)&&t.string(this.value)}});s.set(22,S);const b=t(class{constructor(t,s,i,n,e,r,o,h,c){this.requestStart=t,this.responseStart=s,this.responseEnd=i,this.domContentLoadedEventStart=n,this.domContentLoadedEventEnd=e,this.loadEventStart=r,this.loadEventEnd=o,this.firstPaint=h,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)}});s.set(23,b);const x=t(class{constructor(t,s,i){this.speedIndex=t,this.visuallyComplete=s,this.timeToInteractive=i,this._id=24}encode(t){return t.uint(24)&&t.uint(this.speedIndex)&&t.uint(this.visuallyComplete)&&t.uint(this.timeToInteractive)}});s.set(24,x);const E=t(class{constructor(t,s,i){this.name=t,this.message=s,this.payload=i,this._id=25}encode(t){return t.uint(25)&&t.string(this.name)&&t.string(this.message)&&t.string(this.payload)}});s.set(25,E);const k=t(class{constructor(t,s){this.name=t,this.payload=s,this._id=27}encode(t){return t.uint(27)&&t.string(this.name)&&t.string(this.payload)}});s.set(27,k);const I=t(class{constructor(t){this.id=t,this._id=28}encode(t){return t.uint(28)&&t.string(this.id)}});s.set(28,I);const z=t(class{constructor(t){this.id=t,this._id=29}encode(t){return t.uint(29)&&t.string(this.id)}});s.set(29,z);const w=t(class{constructor(t,s){this.key=t,this.value=s,this._id=30}encode(t){return t.uint(30)&&t.string(this.key)&&t.string(this.value)}});s.set(30,w);const T=t(class{constructor(t,s,i){this.id=t,this.rule=s,this.index=i,this._id=37}encode(t){return t.uint(37)&&t.uint(this.id)&&t.string(this.rule)&&t.uint(this.index)}});s.set(37,T);const L=t(class{constructor(t,s){this.id=t,this.index=s,this._id=38}encode(t){return t.uint(38)&&t.uint(this.id)&&t.uint(this.index)}});s.set(38,L);const A=t(class{constructor(t,s,i,n,e,r,o){this.method=t,this.url=s,this.request=i,this.response=n,this.status=e,this.timestamp=r,this.duration=o,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)}});s.set(39,A);const C=t(class{constructor(t,s,i,n){this.name=t,this.duration=s,this.args=i,this.result=n,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)}});s.set(40,C);const M=t(class{constructor(t,s){this.key=t,this.value=s,this._id=41}encode(t){return t.uint(41)&&t.string(this.key)&&t.string(this.value)}});s.set(41,M);const R=t(class{constructor(t){this.type=t,this._id=42}encode(t){return t.uint(42)&&t.string(this.type)}});s.set(42,R);const N=t(class{constructor(t,s,i){this.action=t,this.state=s,this.duration=i,this._id=44}encode(t){return t.uint(44)&&t.string(this.action)&&t.string(this.state)&&t.uint(this.duration)}});s.set(44,N);const D=t(class{constructor(t,s){this.mutation=t,this.state=s,this._id=45}encode(t){return t.uint(45)&&t.string(this.mutation)&&t.string(this.state)}});s.set(45,D);const U=t(class{constructor(t,s){this.type=t,this.payload=s,this._id=46}encode(t){return t.uint(46)&&t.string(this.type)&&t.string(this.payload)}});s.set(46,U);const O=t(class{constructor(t,s,i){this.action=t,this.state=s,this.duration=i,this._id=47}encode(t){return t.uint(47)&&t.string(this.action)&&t.string(this.state)&&t.uint(this.duration)}});s.set(47,O);const q=t(class{constructor(t,s,i,n){this.operationKind=t,this.operationName=s,this.variables=i,this.response=n,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)}});s.set(48,q);const H=t(class{constructor(t,s,i,n){this.frames=t,this.ticks=s,this.totalJSHeapSize=i,this.usedJSHeapSize=n,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)}});s.set(49,H);const P=t(class{constructor(t,s,i,n,e,r,o,h){this.timestamp=t,this.duration=s,this.ttfb=i,this.headerSize=n,this.encodedBodySize=e,this.decodedBodySize=r,this.url=o,this.initiator=h,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)}});s.set(53,P);const B=t(class{constructor(t,s){this.downlink=t,this.type=s,this._id=54}encode(t){return t.uint(54)&&t.uint(this.downlink)&&t.string(this.type)}});s.set(54,B);const J=t(class{constructor(t){this.hidden=t,this._id=55}encode(t){return t.uint(55)&&t.boolean(this.hidden)}});s.set(55,J);const j=t(class{constructor(t,s,i,n,e,r,o){this.timestamp=t,this.duration=s,this.context=i,this.containerType=n,this.containerSrc=e,this.containerId=r,this.containerName=o,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)}});s.set(59,j);const G=t(class{constructor(t,s,i,n){this.id=t,this.name=s,this.value=i,this.baseURL=n,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)}});s.set(60,G);const K=t(class{constructor(t,s,i){this.id=t,this.data=s,this.baseURL=i,this._id=61}encode(t){return t.uint(61)&&t.uint(this.id)&&t.string(this.data)&&t.string(this.baseURL)}});s.set(61,K);const X=t(class{constructor(t,s){this.type=t,this.value=s,this._id=63}encode(t){return t.uint(63)&&t.string(this.type)&&t.string(this.value)}});s.set(63,X);const F=t(class{constructor(t,s){this.name=t,this.payload=s,this._id=64}encode(t){return t.uint(64)&&t.string(this.name)&&t.string(this.payload)}});s.set(64,F);const Q=t(class{constructor(){this._id=65}encode(t){return t.uint(65)}});s.set(65,Q);const V=t(class{constructor(t,s,i,n){this.id=t,this.rule=s,this.index=i,this.baseURL=n,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)}});s.set(67,V);const W=t(class{constructor(t,s,i,n){this.id=t,this.hesitationTime=s,this.label=i,this.selector=n,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)}});s.set(69,W);const Y=t(class{constructor(t,s){this.frameID=t,this.id=s,this._id=70}encode(t){return t.uint(70)&&t.uint(this.frameID)&&t.uint(this.id)}});s.set(70,Y);const Z="function"==typeof TextEncoder?new TextEncoder:{encode(t){const s=t.length,i=new Uint8Array(3*s);let n=-1;for(var e=0,r=0,o=0;o!==s;){if(e=t.charCodeAt(o),o+=1,e>=55296&&e<=56319){if(o===s){i[n+=1]=239,i[n+=1]=191,i[n+=1]=189;break}if(!((r=t.charCodeAt(o))>=56320&&r<=57343)){i[n+=1]=239,i[n+=1]=191,i[n+=1]=189;continue}if(o+=1,(e=1024*(e-55296)+r-56320+65536)>65535){i[n+=1]=240|e>>>18,i[n+=1]=128|e>>>12&63,i[n+=1]=128|e>>>6&63,i[n+=1]=128|63&e;continue}}e<=127?i[n+=1]=0|e:e<=2047?(i[n+=1]=192|e>>>6,i[n+=1]=128|63&e):(i[n+=1]=224|e>>>12,i[n+=1]=128|e>>>6&63,i[n+=1]=128|63&e)}return i.subarray(0,n+1)}};class tt{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 s=Z.encode(t),i=s.byteLength;return!(!this.uint(i)||this.offset+i>this.size)&&(this.data.set(s,this.offset),this.offset+=i,!0)}reset(){this.offset=0,this.checkpointOffset=0}flush(){const t=this.data.slice(0,this.checkpointOffset);return this.reset(),t}}let st,it=1e6,nt=4e5,et=new tt(nt),rt="",ot="",ht=0,ct=0,ut=0,at=0,dt=!0;function lt(){return new i(ht,at,ct).encode(et)}const gt=[];let ft,pt=!1,mt=0,_t=8e3,yt=10;function vt(){if(dt||""===ot||""===rt)return;const t=et.flush();pt?gt.push(t):(pt=!0,function t(s){const i=new XMLHttpRequest;i.open("POST",rt+"/v1/web/i",!1),i.setRequestHeader("Authorization","Bearer "+ot),i.onreadystatechange=function(){if(4===this.readyState){if(0==this.status)return;if(this.status>=400)return St(),gt.length=0,401===this.status?void self.postMessage("restart"):void self.postMessage(null);const s=gt.shift();s?t(s):pt=!1}},i.onerror=function(i){if(mt>=yt)return St(),void self.postMessage(null);mt++,setTimeout(()=>t(s),_t)},i.send(s.buffer)}(t)),dt=!0,lt()}function St(){rt="",ot="",clearInterval(st),et.reset()}self.onmessage=({data:t})=>{if(null!==t)return"stop"===t?(vt(),void St()):Array.isArray(t)?void t.forEach(t=>{const i=new(s.get(t._id));if(Object.assign(i,t),i instanceof n?ct=i.timestamp:i instanceof J&&(i.hidden?ft=setTimeout(()=>self.postMessage("restart"),3e5):clearTimeout(ft)),et.checkpoint(),!i.encode(et)&&(vt(),!i.encode(et)))for(;!i.encode(et);){if(nt===it)return console.warn("OpenReplay: beacon size overflow."),et.reset(),void lt();nt=Math.min(2*nt,it),et=new tt(nt),lt()}at++,dt=!1}):(rt=t.ingestPoint||rt,ot=t.token||ot,ht=t.pageNo||ht,ct=t.startTimestamp||ct,ut=t.timeAdjustment||ut,yt=t.connAttemptCount||yt,_t=t.connAttemptGap||_t,it=t.beaconSizeLimit||it,nt=Math.min(it,t.beaconSize||nt),et.isEmpty()&&lt(),void(null==st&&(st=setInterval(vt,2e4))));vt()};
@@ -48,7 +48,7 @@ class App {
48
48
  this.worker.onerror = e => {
49
49
  this._debug("webworker_error", e);
50
50
  };
51
- let lastTs = utils_1.timestamp();
51
+ let lastTs = (0, utils_js_1.timestamp)();
52
52
  let fileno = 0;
53
53
  this.worker.onmessage = ({ data }) => {
54
54
  if (data === null) {
@@ -85,7 +85,7 @@ class App {
85
85
  });
86
86
  }
87
87
  if (this.options.__debug_log) {
88
- utils_1.warn("OpenReplay errror: ", context, e);
88
+ (0, utils_js_1.warn)("OpenReplay error: ", context, e);
89
89
  }
90
90
  }
91
91
  send(message, urgent = false) {
@@ -99,15 +99,19 @@ class App {
99
99
  }
100
100
  commit() {
101
101
  if (this.worker && this.messages.length) {
102
- this.messages.unshift(new messages_1.Timestamp(utils_1.timestamp()));
102
+ this.messages.unshift(new index_js_1.Timestamp((0, utils_js_1.timestamp)()));
103
103
  this.worker.postMessage(this.messages);
104
104
  this.commitCallbacks.forEach(cb => cb(this.messages));
105
105
  this.messages.length = 0;
106
106
  }
107
107
  }
108
- addCommitCallback(cb) {
108
+ attachCommitCallback(cb) {
109
109
  this.commitCallbacks.push(cb);
110
110
  }
111
+ // @Depricated (TODO: remove in 3.5.*)
112
+ addCommitCallback(cb) {
113
+ this.attachCommitCallback(cb);
114
+ }
111
115
  safe(fn) {
112
116
  const app = this;
113
117
  return function (...args) {
@@ -190,7 +194,7 @@ class App {
190
194
  pageNo++;
191
195
  }
192
196
  sessionStorage.setItem(this.options.session_pageno_key, pageNo.toString());
193
- const startTimestamp = utils_1.timestamp();
197
+ const startTimestamp = (0, utils_js_1.timestamp)();
194
198
  const messageData = {
195
199
  ingestPoint: this.options.ingestPoint,
196
200
  pageNo,
@@ -212,8 +216,8 @@ class App {
212
216
  timestamp: startTimestamp,
213
217
  trackerVersion: this.version,
214
218
  isSnippet: this.options.__is_snippet,
215
- deviceMemory: performance_1.deviceMemory,
216
- jsHeapSizeLimit: performance_1.jsHeapSizeLimit,
219
+ deviceMemory: performance_js_1.deviceMemory,
220
+ jsHeapSizeLimit: performance_js_1.jsHeapSizeLimit,
217
221
  reset,
218
222
  }),
219
223
  })
@@ -246,7 +250,7 @@ class App {
246
250
  this.startCallbacks.forEach((cb) => cb());
247
251
  this.observer.observe();
248
252
  this.ticker.start();
249
- utils_1.log("OpenReplay tracking started.");
253
+ (0, utils_js_1.log)("OpenReplay tracking started.");
250
254
  const onStartInfo = { sessionToken: token, userUUID, sessionID };
251
255
  if (typeof this.options.onStart === 'function') {
252
256
  this.options.onStart(onStartInfo);
@@ -254,13 +258,14 @@ class App {
254
258
  return onStartInfo;
255
259
  })
256
260
  .catch(e => {
261
+ sessionStorage.removeItem(this.options.session_token_key);
257
262
  this.stop();
258
- utils_1.warn("OpenReplay was unable to start. ", e);
263
+ (0, utils_js_1.warn)("OpenReplay was unable to start. ", e);
259
264
  this._debug("session_start", e);
260
265
  throw e;
261
266
  });
262
267
  }
263
- return Promise.reject("Player is active");
268
+ return Promise.reject("Player is already active");
264
269
  }
265
270
  start(reset = false) {
266
271
  if (!document.hidden) {
@@ -288,7 +293,7 @@ class App {
288
293
  this.nodes.clear();
289
294
  this.ticker.stop();
290
295
  this.stopCallbacks.forEach((cb) => cb());
291
- utils_1.log("OpenReplay tracking stopped.");
296
+ (0, utils_js_1.log)("OpenReplay tracking stopped.");
292
297
  }
293
298
  finally {
294
299
  this.isActive = false;
@@ -1,4 +1,4 @@
1
- import App from './index';
1
+ import App from "./index.js";
2
2
  interface Window extends WindowProxy {
3
3
  HTMLInputElement: typeof HTMLInputElement;
4
4
  HTMLLinkElement: typeof HTMLLinkElement;
@@ -29,6 +29,8 @@ export default class Observer {
29
29
  private isInstance;
30
30
  private isIgnored;
31
31
  private sendNodeAttribute;
32
+ getInnerTextSecure(el: HTMLElement): string;
33
+ private checkObscure;
32
34
  private sendNodeData;
33
35
  private bindNode;
34
36
  private bindTree;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const utils_1 = require("../utils");
4
- const messages_1 = require("../messages");
3
+ const utils_js_1 = require("../utils.js");
4
+ const index_js_1 = require("../messages/index.js");
5
5
  function isSVGElement(node) {
6
6
  return node.namespaceURI === 'http://www.w3.org/2000/svg';
7
7
  }
@@ -33,7 +33,7 @@ class Observer {
33
33
  if (frameID === undefined || docID === undefined) {
34
34
  continue;
35
35
  }
36
- this.app.send(messages_1.CreateIFrameDocument(frameID, docID));
36
+ this.app.send((0, index_js_1.CreateIFrameDocument)(frameID, docID));
37
37
  continue;
38
38
  }
39
39
  if (this.isIgnored(target) || !context.document.contains(target)) {
@@ -128,16 +128,16 @@ class Observer {
128
128
  name = name.substr(6);
129
129
  }
130
130
  if (value === null) {
131
- this.app.send(new messages_1.RemoveNodeAttribute(id, name));
131
+ this.app.send(new index_js_1.RemoveNodeAttribute(id, name));
132
132
  }
133
133
  else if (name === 'href') {
134
134
  if (value.length > 1e5) {
135
135
  value = '';
136
136
  }
137
- this.app.send(new messages_1.SetNodeAttributeURLBased(id, name, value, this.app.getBaseHref()));
137
+ this.app.send(new index_js_1.SetNodeAttributeURLBased(id, name, value, this.app.getBaseHref()));
138
138
  }
139
139
  else {
140
- this.app.send(new messages_1.SetNodeAttribute(id, name, value));
140
+ this.app.send(new index_js_1.SetNodeAttribute(id, name, value));
141
141
  }
142
142
  return;
143
143
  }
@@ -157,36 +157,47 @@ class Observer {
157
157
  return;
158
158
  }
159
159
  if (value === null) {
160
- this.app.send(new messages_1.RemoveNodeAttribute(id, name));
160
+ this.app.send(new index_js_1.RemoveNodeAttribute(id, name));
161
161
  return;
162
162
  }
163
163
  if (name === 'style' || name === 'href' && this.isInstance(node, HTMLLinkElement)) {
164
- this.app.send(new messages_1.SetNodeAttributeURLBased(id, name, value, this.app.getBaseHref()));
164
+ this.app.send(new index_js_1.SetNodeAttributeURLBased(id, name, value, this.app.getBaseHref()));
165
165
  return;
166
166
  }
167
167
  if (name === 'href' || value.length > 1e5) {
168
168
  value = '';
169
169
  }
170
- this.app.send(new messages_1.SetNodeAttribute(id, name, value));
170
+ this.app.send(new index_js_1.SetNodeAttribute(id, name, value));
171
171
  }
172
- sendNodeData(id, parentElement, data) {
173
- if (this.isInstance(parentElement, HTMLStyleElement) || this.isInstance(parentElement, SVGStyleElement)) {
174
- this.app.send(new messages_1.SetCSSDataURLBased(id, data, this.app.getBaseHref()));
175
- return;
172
+ /* TODO: abstract sanitation */
173
+ getInnerTextSecure(el) {
174
+ const id = this.app.nodes.getID(el);
175
+ if (!id) {
176
+ return '';
176
177
  }
178
+ return this.checkObscure(id, el.innerText);
179
+ }
180
+ checkObscure(id, data) {
177
181
  if (this.textMasked.has(id)) {
178
- data = data.replace(/[^\f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]/g, '█');
182
+ return data.replace(/[^\f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]/g, '█');
179
183
  }
180
- else {
181
- if (this.options.obscureTextNumbers) {
182
- data = data.replace(/\d/g, '0');
183
- }
184
- if (this.options.obscureTextEmails) {
185
- data = data.replace(/([^\s]+)@([^\s]+)\.([^\s]+)/g, (...f) => utils_1.stars(f[1]) + '@' + utils_1.stars(f[2]) + '.' + utils_1.stars(f[3]));
186
- }
184
+ if (this.options.obscureTextNumbers) {
185
+ data = data.replace(/\d/g, '0');
186
+ }
187
+ if (this.options.obscureTextEmails) {
188
+ data = data.replace(/([^\s]+)@([^\s]+)\.([^\s]+)/g, (...f) => (0, utils_js_1.stars)(f[1]) + '@' + (0, utils_js_1.stars)(f[2]) + '.' + (0, utils_js_1.stars)(f[3]));
187
189
  }
188
- this.app.send(new messages_1.SetNodeData(id, data));
190
+ return data;
189
191
  }
192
+ sendNodeData(id, parentElement, data) {
193
+ if (this.isInstance(parentElement, HTMLStyleElement) || this.isInstance(parentElement, SVGStyleElement)) {
194
+ this.app.send(new index_js_1.SetCSSDataURLBased(id, data, this.app.getBaseHref()));
195
+ return;
196
+ }
197
+ data = this.checkObscure(id, data);
198
+ this.app.send(new index_js_1.SetNodeData(id, data));
199
+ }
200
+ /* end TODO: abstract sanitation */
190
201
  bindNode(node) {
191
202
  const r = this.app.nodes.registerNode(node);
192
203
  const id = r[0];
@@ -201,7 +212,9 @@ class Observer {
201
212
  acceptNode: (node) => this.isIgnored(node) || this.app.nodes.getID(node) !== undefined
202
213
  ? NodeFilter.FILTER_REJECT
203
214
  : NodeFilter.FILTER_ACCEPT,
204
- }, false);
215
+ },
216
+ // @ts-ignore
217
+ false);
205
218
  while (walker.nextNode()) {
206
219
  this.bindNode(walker.currentNode);
207
220
  }
@@ -209,7 +222,7 @@ class Observer {
209
222
  unbindNode(node) {
210
223
  const id = this.app.nodes.unregisterNode(node);
211
224
  if (id !== undefined && this.recents[id] === false) {
212
- this.app.send(new messages_1.RemoveNode(id));
225
+ this.app.send(new index_js_1.RemoveNode(id));
213
226
  }
214
227
  }
215
228
  _commitNode(id, node) {
@@ -233,7 +246,7 @@ class Observer {
233
246
  return false;
234
247
  }
235
248
  if (this.textMasked.has(parentID) ||
236
- (this.isInstance(node, Element) && utils_1.hasOpenreplayAttribute(node, 'masked'))) {
249
+ (this.isInstance(node, Element) && (0, utils_js_1.hasOpenreplayAttribute)(node, 'masked'))) {
237
250
  this.textMasked.add(id);
238
251
  }
239
252
  let sibling = node.previousSibling;
@@ -258,7 +271,7 @@ class Observer {
258
271
  if (isNew === true) {
259
272
  if (this.isInstance(node, Element)) {
260
273
  if (parentID !== undefined) {
261
- this.app.send(new messages_1.CreateElementNode(id, parentID, index, node.tagName, isSVGElement(node)));
274
+ this.app.send(new index_js_1.CreateElementNode(id, parentID, index, node.tagName, isSVGElement(node)));
262
275
  }
263
276
  for (let i = 0; i < node.attributes.length; i++) {
264
277
  const attr = node.attributes[i];
@@ -271,13 +284,13 @@ class Observer {
271
284
  }
272
285
  else if (this.isInstance(node, Text)) {
273
286
  // for text node id != 0, hence parentID !== undefined and parent is Element
274
- this.app.send(new messages_1.CreateTextNode(id, parentID, index));
287
+ this.app.send(new index_js_1.CreateTextNode(id, parentID, index));
275
288
  this.sendNodeData(id, parent, node.data);
276
289
  }
277
290
  return true;
278
291
  }
279
292
  if (isNew === false && parentID !== undefined) {
280
- this.app.send(new messages_1.MoveNode(id, parentID, index));
293
+ this.app.send(new index_js_1.MoveNode(id, parentID, index));
281
294
  }
282
295
  const attr = this.attributesList[id];
283
296
  if (attr !== undefined) {
@@ -319,16 +332,23 @@ class Observer {
319
332
  this.clear();
320
333
  }
321
334
  handleIframe(iframe) {
322
- const handle = () => {
323
- const context = iframe.contentWindow;
335
+ let context = null;
336
+ const handle = this.app.safe(() => {
324
337
  const id = this.app.nodes.getID(iframe);
325
- if (!context || id === undefined) {
338
+ if (id === undefined) {
339
+ return;
340
+ }
341
+ if (iframe.contentWindow === context) {
342
+ return;
343
+ }
344
+ context = iframe.contentWindow;
345
+ if (!context) {
326
346
  return;
327
347
  }
328
348
  const observer = new Observer(this.app, this.options, context);
329
349
  this.iframeObservers.push(observer);
330
350
  observer.observeIframe(id, context);
331
- };
351
+ });
332
352
  this.app.attachEventListener(iframe, "load", handle);
333
353
  handle();
334
354
  }
@@ -349,7 +369,7 @@ class Observer {
349
369
  console.log("Wrong");
350
370
  return;
351
371
  }
352
- this.app.send(messages_1.CreateIFrameDocument(id, docID));
372
+ this.app.send((0, index_js_1.CreateIFrameDocument)(id, docID));
353
373
  this.commitNodes();
354
374
  }
355
375
  observe() {
@@ -361,7 +381,7 @@ class Observer {
361
381
  attributeOldValue: false,
362
382
  characterDataOldValue: false,
363
383
  });
364
- this.app.send(new messages_1.CreateDocument());
384
+ this.app.send(new index_js_1.CreateDocument());
365
385
  this.bindTree(this.context.document.documentElement);
366
386
  this.commitNodes();
367
387
  }
@@ -1,4 +1,4 @@
1
- import App from './index';
1
+ import App from "./index.js";
2
2
  declare type Callback = () => void;
3
3
  export default class Ticker {
4
4
  private readonly app;
package/cjs/index.d.ts CHANGED
@@ -1,15 +1,14 @@
1
- import App from './app';
2
- export { default as App } from './app';
3
- import * as _Messages from './messages';
1
+ import App from "./app/index.js";
2
+ export { default as App } from './app/index.js';
3
+ import * as _Messages from "./messages/index.js";
4
4
  export declare const Messages: typeof _Messages;
5
- import { Options as AppOptions } from './app';
6
- import { Options as ConsoleOptions } from './modules/console';
7
- import { Options as ExceptionOptions } from './modules/exception';
8
- import { Options as InputOptions } from './modules/input';
9
- import { Options as MouseOptions } from './modules/mouse';
10
- import { Options as PerformanceOptions } from './modules/performance';
11
- import { Options as TimingOptions } from './modules/timing';
12
- export declare type Options = Partial<AppOptions & ConsoleOptions & ExceptionOptions & InputOptions & MouseOptions & PerformanceOptions & TimingOptions> & {
5
+ import { Options as AppOptions } from "./app/index.js";
6
+ import { Options as ConsoleOptions } from "./modules/console.js";
7
+ import { Options as ExceptionOptions } from "./modules/exception.js";
8
+ import { Options as InputOptions } from "./modules/input.js";
9
+ import { Options as PerformanceOptions } from "./modules/performance.js";
10
+ import { Options as TimingOptions } from "./modules/timing.js";
11
+ export declare type Options = Partial<AppOptions & ConsoleOptions & ExceptionOptions & InputOptions & PerformanceOptions & TimingOptions> & {
13
12
  projectID?: number;
14
13
  projectKey: string;
15
14
  sessionToken?: string;