@openreplay/tracker 4.1.8 → 4.1.9-beta.2
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/CHANGELOG.md +18 -0
- package/README.md +22 -18
- package/cjs/app/guards.d.ts +10 -11
- package/cjs/app/guards.js +2 -1
- package/cjs/app/index.d.ts +5 -3
- package/cjs/app/index.js +53 -36
- package/cjs/app/messages.gen.d.ts +3 -2
- package/cjs/app/messages.gen.js +19 -5
- package/cjs/app/observer/observer.js +4 -4
- package/cjs/app/observer/top_observer.js +1 -1
- package/cjs/app/session.d.ts +1 -1
- package/cjs/app/session.js +1 -1
- package/cjs/common/messages.gen.d.ts +16 -4
- package/cjs/index.d.ts +5 -1
- package/cjs/index.js +6 -4
- package/cjs/modules/cssrules.js +1 -1
- package/cjs/modules/focus.js +2 -2
- package/cjs/modules/img.js +1 -1
- package/cjs/modules/input.js +9 -17
- package/cjs/modules/mouse.js +1 -1
- package/cjs/modules/network.d.ts +28 -0
- package/cjs/modules/network.js +203 -0
- package/cjs/modules/timing.js +9 -6
- package/cjs/modules/viewport.js +3 -1
- package/cjs/utils.d.ts +1 -0
- package/cjs/utils.js +7 -4
- package/jest.config.js +11 -0
- package/lib/app/guards.d.ts +10 -11
- package/lib/app/guards.js +2 -1
- package/lib/app/index.d.ts +5 -3
- package/lib/app/index.js +54 -37
- package/lib/app/messages.gen.d.ts +3 -2
- package/lib/app/messages.gen.js +15 -2
- package/lib/app/observer/observer.js +4 -4
- package/lib/app/observer/top_observer.js +1 -1
- package/lib/app/session.d.ts +1 -1
- package/lib/app/session.js +1 -1
- package/lib/common/messages.gen.d.ts +16 -4
- package/lib/common/tsconfig.tsbuildinfo +1 -1
- package/lib/index.d.ts +5 -1
- package/lib/index.js +7 -5
- package/lib/modules/cssrules.js +1 -1
- package/lib/modules/focus.js +2 -2
- package/lib/modules/img.js +1 -1
- package/lib/modules/input.js +9 -17
- package/lib/modules/mouse.js +1 -1
- package/lib/modules/network.d.ts +28 -0
- package/lib/modules/network.js +200 -0
- package/lib/modules/timing.js +10 -7
- package/lib/modules/viewport.js +3 -1
- package/lib/utils.d.ts +1 -0
- package/lib/utils.js +5 -3
- package/package.json +8 -3
- package/cjs/app/messages.d.ts +0 -52
- package/cjs/app/messages.js +0 -234
- package/lib/app/messages.d.ts +0 -52
- package/lib/app/messages.js +0 -181
package/lib/app/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Timestamp, Metadata, UserID } from './messages.gen.js';
|
|
2
|
-
import { now, adjustTimeOrigin } from '../utils.js';
|
|
2
|
+
import { now, adjustTimeOrigin, deprecationWarn } from '../utils.js';
|
|
3
3
|
import Nodes from './nodes.js';
|
|
4
4
|
import Observer from './observer/top_observer.js';
|
|
5
5
|
import Sanitizer from './sanitizer.js';
|
|
@@ -30,7 +30,8 @@ export default class App {
|
|
|
30
30
|
this.stopCallbacks = [];
|
|
31
31
|
this.commitCallbacks = [];
|
|
32
32
|
this.activityState = ActivityState.NotActive;
|
|
33
|
-
this.version = '4.1.
|
|
33
|
+
this.version = '4.1.9-beta.2'; // TODO: version compatability check inside each plugin.
|
|
34
|
+
this._usingOldFetchPlugin = false;
|
|
34
35
|
this.delay = 0;
|
|
35
36
|
this.projectKey = projectKey;
|
|
36
37
|
this.options = Object.assign({
|
|
@@ -73,14 +74,14 @@ export default class App {
|
|
|
73
74
|
this.session.applySessionHash(sessionToken);
|
|
74
75
|
}
|
|
75
76
|
try {
|
|
76
|
-
this.worker = new Worker(URL.createObjectURL(new Blob(['"use strict";class t{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(`Failed to send batch after ${this.attemptsCount} attempts.`):(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();
|
|
77
|
+
this.worker = new Worker(URL.createObjectURL(new Blob(['"use strict";class t{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,this.busy||this.sendNext()}push(t){this.busy||!this.token?this.queue.push(t):this.sendBatch(t)}sendNext(){const t=this.queue.shift();t?this.sendBatch(t):this.busy=!1}retry(t){this.attemptsCount>=this.MAX_ATTEMPTS_COUNT?this.onFailure(`Failed to send batch after ${this.attemptsCount} attempts.`):(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();i.status>=400?this.retry(t):(this.attemptsCount=0,this.sendNext())}).catch(i=>{console.warn("OpenReplay:",i),this.retry(t)})}clean(){this.queue.length=0,this.token=null}}const i="function"==typeof TextEncoder?new TextEncoder:{encode(t){const i=t.length,s=new Uint8Array(3*i);let e=-1;for(let 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),!(r>=56320&&r<=57343)){s[e+=1]=239,s[e+=1]=191,s[e+=1]=189;continue}if(n=1024*(n-55296)+r-56320+65536,h+=1,n>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 s extends class{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,i){this.data.set(t,i)}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=i.encode(t),e=s.byteLength;return!(!this.uint(e)||this.offset+e>this.size)&&(this.data.set(s,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}}{encode(t){switch(t[0]){case 81:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.int(t[4])&&this.string(t[5]);case 82:return this.uint(t[1])&&this.uint(t[2]);case 0:return this.uint(t[1]);case 4:return this.string(t[1])&&this.string(t[2])&&this.uint(t[3]);case 5: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:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3]);case 11:return this.uint(t[1]);case 12:return this.uint(t[1])&&this.string(t[2])&&this.string(t[3]);case 13:case 14: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 17:return this.uint(t[1])&&this.string(t[2]);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 20:return this.uint(t[1])&&this.uint(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: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 24:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3]);case 25:return this.string(t[1])&&this.string(t[2])&&this.string(t[3]);case 27:return this.string(t[1])&&this.string(t[2]);case 28:case 29:return this.string(t[1]);case 30:return this.string(t[1])&&this.string(t[2]);case 37:return this.uint(t[1])&&this.string(t[2])&&this.uint(t[3]);case 38:return this.uint(t[1])&&this.uint(t[2]);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 41:return this.string(t[1])&&this.string(t[2]);case 42:return this.string(t[1]);case 44:return this.string(t[1])&&this.string(t[2])&&this.uint(t[3]);case 45:case 46:return this.string(t[1])&&this.string(t[2]);case 47:return this.string(t[1])&&this.string(t[2])&&this.uint(t[3]);case 48:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4]);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 54:return this.uint(t[1])&&this.string(t[2]);case 55:return this.boolean(t[1]);case 57:return this.uint(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4]);case 58: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 60:return this.uint(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4]);case 61:return this.uint(t[1])&&this.string(t[2])&&this.string(t[3]);case 63:case 64:return this.string(t[1])&&this.string(t[2]);case 67:return this.uint(t[1])&&this.string(t[2])&&this.uint(t[3])&&this.string(t[4]);case 69:return this.uint(t[1])&&this.uint(t[2])&&this.string(t[3])&&this.string(t[4]);case 70:return this.uint(t[1])&&this.uint(t[2]);case 71:return this.uint(t[1])&&this.string(t[2])&&this.string(t[3]);case 73:return this.uint(t[1])&&this.string(t[2])&&this.uint(t[3])&&this.string(t[4]);case 75:case 76:case 77:return this.uint(t[1])&&this.uint(t[2]);case 79:return this.string(t[1])&&this.string(t[2]);case 78:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])}}}class e{constructor(t,i,e,n){this.pageNo=t,this.timestamp=i,this.url=e,this.onBatch=n,this.nextIndex=0,this.beaconSize=2e5,this.encoder=new s(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,i){for(let i=0;i<3;i++)this.sizeBuffer[i]=t>>8*i;this.encoder.set(this.sizeBuffer,i)}prepare(){if(!this.encoder.isEmpty)return;const t=[81,1,this.pageNo,this.nextIndex,this.timestamp,this.url];this.writeType(t),this.writeFields(t),this.isEmpty=!0}writeWithSize(t){const i=this.encoder;if(!this.writeType(t)||!i.skip(3))return!1;const s=i.getCurrentOffset(),e=this.writeFields(t);if(e){const e=i.getCurrentOffset()-s;if(e>16777215)return console.warn("OpenReplay: max message size overflow."),!1;this.writeSizeAt(e,s-3),i.checkpoint(),this.isEmpty=this.isEmpty&&0===t[0],this.nextIndex++}return e}setBeaconSizeLimit(t){this.beaconSizeLimit=t}writeMessage(t){0===t[0]&&(this.timestamp=t[1]),4===t[0]&&(this.url=t[1]),this.writeWithSize(t)||(this.finaliseBatch(),this.writeWithSize(t)||(this.encoder=new s(this.beaconSizeLimit),this.prepare(),this.writeWithSize(t)||console.warn("OpenReplay: beacon size overflow. Skipping large message.",t,this),this.encoder=new s(this.beaconSize),this.prepare()))}finaliseBatch(){this.isEmpty||(this.onBatch(this.encoder.flush()),this.prepare())}clean(){this.encoder.reset()}}var n;!function(t){t[t.NotActive=0]="NotActive",t[t.Starting=1]="Starting",t[t.Stopping=2]="Stopping",t[t.Active=3]="Active"}(n||(n={}));let r=null,h=null;function u(){h&&h.finaliseBatch()}function a(){n.Stopping,null!==g&&(clearInterval(g),g=null),h&&(h.clean(),h=null),r&&(r.clean(),r=null),n.NotActive}function c(){postMessage("restart"),a()}n.NotActive;let o,g=null;self.onmessage=({data:i})=>{if(null!=i){if("stop"===i)return u(),void a();if(Array.isArray(i)){if(!h)throw new Error("WebWorker: writer not initialised. Service Should be Started.");const t=h;i.forEach(i=>{55===i[0]&&(i[1]?o=setTimeout(()=>c(),18e5):clearTimeout(o)),t.writeMessage(i)})}else{if("start"===i.type)return n.Starting,r=new t(i.ingestPoint,()=>{c()},t=>{!function(t){postMessage({type:"failure",reason:t}),a()}(t)},i.connAttemptCount,i.connAttemptGap),h=new e(i.pageNo,i.timestamp,i.url,t=>r&&r.push(t)),null===g&&(g=setInterval(u,1e4)),n.Active;if("auth"===i.type){if(!r)throw new Error("WebWorker: sender not initialised. Received auth.");if(!h)throw new Error("WebWorker: writer not initialised. Received auth.");return r.authorise(i.token),void(i.beaconSizeLimit&&h.setBeaconSizeLimit(i.beaconSizeLimit))}}}else u()};'], { type: 'text/javascript' })));
|
|
77
78
|
this.worker.onerror = (e) => {
|
|
78
79
|
this._debug('webworker_error', e);
|
|
79
80
|
};
|
|
80
81
|
this.worker.onmessage = ({ data }) => {
|
|
81
82
|
if (data === 'restart') {
|
|
82
83
|
this.stop(false);
|
|
83
|
-
this.start({
|
|
84
|
+
this.start({}, true);
|
|
84
85
|
}
|
|
85
86
|
else if (data.type === 'failure') {
|
|
86
87
|
this.stop(false);
|
|
@@ -117,9 +118,18 @@ export default class App {
|
|
|
117
118
|
}
|
|
118
119
|
send(message, urgent = false) {
|
|
119
120
|
if (this.activityState === ActivityState.NotActive) {
|
|
120
|
-
// this.debug.log('SendiTrying to send when not active', message) <- crashing the app
|
|
121
121
|
return;
|
|
122
122
|
}
|
|
123
|
+
// === Back compatibility with Fetch/Axios plugins ===
|
|
124
|
+
if (message[0] === 39 /* Fetch */) {
|
|
125
|
+
this._usingOldFetchPlugin = true;
|
|
126
|
+
deprecationWarn('Fetch plugin', "'network' init option");
|
|
127
|
+
deprecationWarn('Axios plugin', "'network' init option");
|
|
128
|
+
}
|
|
129
|
+
if (this._usingOldFetchPlugin && message[0] === 21 /* NetworkRequest */) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
// ====================================================
|
|
123
133
|
this.messages.push(message);
|
|
124
134
|
// TODO: commit on start if there were `urgent` sends;
|
|
125
135
|
// Clarify where urgent can be used for;
|
|
@@ -214,8 +224,8 @@ export default class App {
|
|
|
214
224
|
getSessionID() {
|
|
215
225
|
return this.session.getInfo().sessionID || undefined;
|
|
216
226
|
}
|
|
217
|
-
getSessionURL() {
|
|
218
|
-
const { projectID, sessionID } = this.session.getInfo();
|
|
227
|
+
getSessionURL(options) {
|
|
228
|
+
const { projectID, sessionID, timestamp } = this.session.getInfo();
|
|
219
229
|
if (!projectID || !sessionID) {
|
|
220
230
|
this.debug.error('OpenReplay error: Unable to build session URL');
|
|
221
231
|
return undefined;
|
|
@@ -223,7 +233,12 @@ export default class App {
|
|
|
223
233
|
const ingest = this.options.ingestPoint;
|
|
224
234
|
const isSaas = ingest === DEFAULT_INGEST_POINT;
|
|
225
235
|
const projectPath = isSaas ? ingest.replace('api', 'app') : ingest;
|
|
226
|
-
|
|
236
|
+
const url = projectPath.replace(/ingest$/, `${projectID}/session/${sessionID}`);
|
|
237
|
+
if (options === null || options === void 0 ? void 0 : options.withCurrentTime) {
|
|
238
|
+
const jumpTo = now() - timestamp;
|
|
239
|
+
return `${url}?jumpto=${jumpTo}`;
|
|
240
|
+
}
|
|
241
|
+
return url;
|
|
227
242
|
}
|
|
228
243
|
getHost() {
|
|
229
244
|
return new URL(this.options.ingestPoint).host;
|
|
@@ -266,8 +281,7 @@ export default class App {
|
|
|
266
281
|
this.sessionStorage.removeItem(this.options.session_reset_key);
|
|
267
282
|
}
|
|
268
283
|
}
|
|
269
|
-
_start(startOpts) {
|
|
270
|
-
adjustTimeOrigin();
|
|
284
|
+
_start(startOpts = {}, resetByWorker = false) {
|
|
271
285
|
if (!this.worker) {
|
|
272
286
|
return Promise.resolve(UnsuccessfulStart('No worker found: perhaps, CSP is not set.'));
|
|
273
287
|
}
|
|
@@ -275,9 +289,19 @@ export default class App {
|
|
|
275
289
|
return Promise.resolve(UnsuccessfulStart('OpenReplay: trying to call `start()` on the instance that has been started already.'));
|
|
276
290
|
}
|
|
277
291
|
this.activityState = ActivityState.Starting;
|
|
292
|
+
adjustTimeOrigin();
|
|
278
293
|
if (startOpts.sessionHash) {
|
|
279
294
|
this.session.applySessionHash(startOpts.sessionHash);
|
|
280
295
|
}
|
|
296
|
+
if (startOpts.forceNew) {
|
|
297
|
+
// Reset session metadata only if requested directly
|
|
298
|
+
this.session.reset();
|
|
299
|
+
}
|
|
300
|
+
this.session.assign({
|
|
301
|
+
// MBTODO: maybe it would make sense to `forceNew` if the `userID` was changed
|
|
302
|
+
userID: startOpts.userID,
|
|
303
|
+
metadata: startOpts.metadata,
|
|
304
|
+
});
|
|
281
305
|
const timestamp = now();
|
|
282
306
|
this.worker.postMessage({
|
|
283
307
|
type: 'start',
|
|
@@ -288,23 +312,16 @@ export default class App {
|
|
|
288
312
|
connAttemptCount: this.options.connAttemptCount,
|
|
289
313
|
connAttemptGap: this.options.connAttemptGap,
|
|
290
314
|
});
|
|
291
|
-
this.
|
|
292
|
-
// TODO: transparent "session" module logic AND explicit internal api for plugins.
|
|
293
|
-
// "updating" with old metadata in order to trigger session's UpdateCallbacks.
|
|
294
|
-
// (for the case of internal .start() calls, like on "restart" webworker signal or assistent connection in tracker-assist )
|
|
295
|
-
metadata: startOpts.metadata || this.session.getInfo().metadata,
|
|
296
|
-
userID: startOpts.userID,
|
|
297
|
-
});
|
|
298
|
-
const sReset = this.sessionStorage.getItem(this.options.session_reset_key);
|
|
315
|
+
const lsReset = this.sessionStorage.getItem(this.options.session_reset_key) !== null;
|
|
299
316
|
this.sessionStorage.removeItem(this.options.session_reset_key);
|
|
300
|
-
const
|
|
317
|
+
const needNewSessionID = startOpts.forceNew || lsReset || resetByWorker;
|
|
301
318
|
return window
|
|
302
319
|
.fetch(this.options.ingestPoint + '/v1/web/start', {
|
|
303
320
|
method: 'POST',
|
|
304
321
|
headers: {
|
|
305
322
|
'Content-Type': 'application/json',
|
|
306
323
|
},
|
|
307
|
-
body: JSON.stringify(Object.assign(Object.assign({}, this.getTrackerInfo()), { timestamp, userID: this.session.getInfo().userID, token:
|
|
324
|
+
body: JSON.stringify(Object.assign(Object.assign({}, this.getTrackerInfo()), { timestamp, userID: this.session.getInfo().userID, token: needNewSessionID ? undefined : this.session.getSessionToken(), deviceMemory,
|
|
308
325
|
jsHeapSizeLimit })),
|
|
309
326
|
})
|
|
310
327
|
.then((r) => {
|
|
@@ -324,25 +341,29 @@ export default class App {
|
|
|
324
341
|
return Promise.reject('no worker found after start request (this might not happen)');
|
|
325
342
|
}
|
|
326
343
|
if (this.activityState === ActivityState.NotActive) {
|
|
327
|
-
return Promise.reject('Tracker stopped during
|
|
344
|
+
return Promise.reject('Tracker stopped during authorization');
|
|
328
345
|
}
|
|
329
|
-
const { token, userUUID,
|
|
330
|
-
|
|
346
|
+
const { token, userUUID, projectID, beaconSizeLimit, delay, // derived from token
|
|
347
|
+
sessionID, // derived from token
|
|
348
|
+
startTimestamp, // real startTS (server time), derived from sessionID
|
|
349
|
+
} = r;
|
|
331
350
|
if (typeof token !== 'string' ||
|
|
332
351
|
typeof userUUID !== 'string' ||
|
|
333
|
-
|
|
334
|
-
|
|
352
|
+
(typeof startTimestamp !== 'number' && typeof startTimestamp !== 'undefined') ||
|
|
353
|
+
typeof sessionID !== 'string' ||
|
|
335
354
|
typeof delay !== 'number' ||
|
|
336
355
|
(typeof beaconSizeLimit !== 'number' && typeof beaconSizeLimit !== 'undefined')) {
|
|
337
356
|
return Promise.reject(`Incorrect server response: ${JSON.stringify(r)}`);
|
|
338
357
|
}
|
|
339
358
|
this.delay = delay;
|
|
340
|
-
const prevSessionID = this.session.getInfo().sessionID;
|
|
341
|
-
if (prevSessionID && prevSessionID !== sessionID) {
|
|
342
|
-
this.session.reset();
|
|
343
|
-
}
|
|
344
359
|
this.session.setSessionToken(token);
|
|
345
|
-
this.session.
|
|
360
|
+
this.session.assign({
|
|
361
|
+
sessionID,
|
|
362
|
+
timestamp: startTimestamp || timestamp,
|
|
363
|
+
projectID,
|
|
364
|
+
});
|
|
365
|
+
// (Re)send Metadata for the case of a new session
|
|
366
|
+
Object.entries(this.session.getInfo().metadata).forEach(([key, value]) => this.send(Metadata(key, value)));
|
|
346
367
|
this.localStorage.setItem(this.options.local_uuid_key, userUUID);
|
|
347
368
|
this.worker.postMessage({
|
|
348
369
|
type: 'auth',
|
|
@@ -373,16 +394,16 @@ export default class App {
|
|
|
373
394
|
return UnsuccessfulStart(START_ERROR);
|
|
374
395
|
});
|
|
375
396
|
}
|
|
376
|
-
start(
|
|
397
|
+
start(...args) {
|
|
377
398
|
if (!document.hidden) {
|
|
378
|
-
return this._start(
|
|
399
|
+
return this._start(...args);
|
|
379
400
|
}
|
|
380
401
|
else {
|
|
381
402
|
return new Promise((resolve) => {
|
|
382
403
|
const onVisibilityChange = () => {
|
|
383
404
|
if (!document.hidden) {
|
|
384
405
|
document.removeEventListener('visibilitychange', onVisibilityChange);
|
|
385
|
-
resolve(this._start(
|
|
406
|
+
resolve(this._start(...args));
|
|
386
407
|
}
|
|
387
408
|
};
|
|
388
409
|
document.addEventListener('visibilitychange', onVisibilityChange);
|
|
@@ -407,8 +428,4 @@ export default class App {
|
|
|
407
428
|
}
|
|
408
429
|
}
|
|
409
430
|
}
|
|
410
|
-
restart() {
|
|
411
|
-
this.stop(false);
|
|
412
|
-
this.start({ forceNew: false });
|
|
413
|
-
}
|
|
414
431
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as Messages from '../common/messages.gen.js';
|
|
2
|
-
export { default } from '../common/messages.gen.js';
|
|
2
|
+
export { default, Type } from '../common/messages.gen.js';
|
|
3
3
|
export declare function BatchMetadata(version: number, pageNo: number, firstIndex: number, timestamp: number, location: string): Messages.BatchMetadata;
|
|
4
4
|
export declare function PartitionedMessage(partNo: number, partTotal: number): Messages.PartitionedMessage;
|
|
5
5
|
export declare function Timestamp(timestamp: number): Messages.Timestamp;
|
|
@@ -19,11 +19,12 @@ export declare function SetInputTarget(id: number, label: string): Messages.SetI
|
|
|
19
19
|
export declare function SetInputValue(id: number, value: string, mask: number): Messages.SetInputValue;
|
|
20
20
|
export declare function SetInputChecked(id: number, checked: boolean): Messages.SetInputChecked;
|
|
21
21
|
export declare function MouseMove(x: number, y: number): Messages.MouseMove;
|
|
22
|
+
export declare function NetworkRequest(type: string, method: string, url: string, request: string, response: string, status: number, timestamp: number, duration: number): Messages.NetworkRequest;
|
|
22
23
|
export declare function ConsoleLog(level: string, value: string): Messages.ConsoleLog;
|
|
23
24
|
export declare function PageLoadTiming(requestStart: number, responseStart: number, responseEnd: number, domContentLoadedEventStart: number, domContentLoadedEventEnd: number, loadEventStart: number, loadEventEnd: number, firstPaint: number, firstContentfulPaint: number): Messages.PageLoadTiming;
|
|
24
25
|
export declare function PageRenderTiming(speedIndex: number, visuallyComplete: number, timeToInteractive: number): Messages.PageRenderTiming;
|
|
25
26
|
export declare function JSExceptionDeprecated(name: string, message: string, payload: string): Messages.JSExceptionDeprecated;
|
|
26
|
-
export declare function
|
|
27
|
+
export declare function CustomEvent(name: string, payload: string): Messages.CustomEvent;
|
|
27
28
|
export declare function UserID(id: string): Messages.UserID;
|
|
28
29
|
export declare function UserAnonymousID(id: string): Messages.UserAnonymousID;
|
|
29
30
|
export declare function Metadata(key: string, value: string): Messages.Metadata;
|
package/lib/app/messages.gen.js
CHANGED
|
@@ -141,6 +141,19 @@ export function MouseMove(x, y) {
|
|
|
141
141
|
y,
|
|
142
142
|
];
|
|
143
143
|
}
|
|
144
|
+
export function NetworkRequest(type, method, url, request, response, status, timestamp, duration) {
|
|
145
|
+
return [
|
|
146
|
+
21 /* NetworkRequest */,
|
|
147
|
+
type,
|
|
148
|
+
method,
|
|
149
|
+
url,
|
|
150
|
+
request,
|
|
151
|
+
response,
|
|
152
|
+
status,
|
|
153
|
+
timestamp,
|
|
154
|
+
duration,
|
|
155
|
+
];
|
|
156
|
+
}
|
|
144
157
|
export function ConsoleLog(level, value) {
|
|
145
158
|
return [
|
|
146
159
|
22 /* ConsoleLog */,
|
|
@@ -178,9 +191,9 @@ export function JSExceptionDeprecated(name, message, payload) {
|
|
|
178
191
|
payload,
|
|
179
192
|
];
|
|
180
193
|
}
|
|
181
|
-
export function
|
|
194
|
+
export function CustomEvent(name, payload) {
|
|
182
195
|
return [
|
|
183
|
-
27 /*
|
|
196
|
+
27 /* CustomEvent */,
|
|
184
197
|
name,
|
|
185
198
|
payload,
|
|
186
199
|
];
|
|
@@ -123,7 +123,7 @@ export default class Observer {
|
|
|
123
123
|
return;
|
|
124
124
|
}
|
|
125
125
|
if (name === 'value' &&
|
|
126
|
-
hasTag(node, '
|
|
126
|
+
hasTag(node, 'input') &&
|
|
127
127
|
node.type !== 'button' &&
|
|
128
128
|
node.type !== 'reset' &&
|
|
129
129
|
node.type !== 'submit') {
|
|
@@ -133,7 +133,7 @@ export default class Observer {
|
|
|
133
133
|
this.app.send(RemoveNodeAttribute(id, name));
|
|
134
134
|
return;
|
|
135
135
|
}
|
|
136
|
-
if (name === 'style' || (name === 'href' && hasTag(node, '
|
|
136
|
+
if (name === 'style' || (name === 'href' && hasTag(node, 'link'))) {
|
|
137
137
|
this.app.send(SetNodeAttributeURLBased(id, name, value, this.app.getBaseHref()));
|
|
138
138
|
return;
|
|
139
139
|
}
|
|
@@ -143,7 +143,7 @@ export default class Observer {
|
|
|
143
143
|
this.app.send(SetNodeAttribute(id, name, value));
|
|
144
144
|
}
|
|
145
145
|
sendNodeData(id, parentElement, data) {
|
|
146
|
-
if (hasTag(parentElement, '
|
|
146
|
+
if (hasTag(parentElement, 'style')) {
|
|
147
147
|
this.app.send(SetCSSDataURLBased(id, data, this.app.getBaseHref()));
|
|
148
148
|
return;
|
|
149
149
|
}
|
|
@@ -204,7 +204,7 @@ export default class Observer {
|
|
|
204
204
|
// Disable parent check for the upper context HTMLHtmlElement, because it is root there... (before)
|
|
205
205
|
// TODO: get rid of "special" cases (there is an issue with CreateDocument altered behaviour though)
|
|
206
206
|
// TODO: Clean the logic (though now it workd fine)
|
|
207
|
-
if (!hasTag(node, '
|
|
207
|
+
if (!hasTag(node, 'html') || !this.isTopContext) {
|
|
208
208
|
if (parent === null) {
|
|
209
209
|
// Sometimes one observation contains attribute mutations for the removimg node, which gets ignored here.
|
|
210
210
|
// That shouldn't affect the visual rendering ( should it? maybe when transition applied? )
|
|
@@ -20,7 +20,7 @@ export default class TopObserver extends Observer {
|
|
|
20
20
|
}, options);
|
|
21
21
|
// IFrames
|
|
22
22
|
this.app.nodes.attachNodeCallback((node) => {
|
|
23
|
-
if (hasTag(node, '
|
|
23
|
+
if (hasTag(node, 'iframe') &&
|
|
24
24
|
((this.options.captureIFrames && !hasOpenreplayAttribute(node, 'obscured')) ||
|
|
25
25
|
hasOpenreplayAttribute(node, 'capture'))) {
|
|
26
26
|
this.handleIframe(node);
|
package/lib/app/session.d.ts
CHANGED
|
@@ -23,7 +23,7 @@ export default class Session {
|
|
|
23
23
|
constructor(app: App, options: Options);
|
|
24
24
|
attachUpdateCallback(cb: OnUpdateCallback): void;
|
|
25
25
|
private handleUpdate;
|
|
26
|
-
|
|
26
|
+
assign(newInfo: Partial<SessionInfo>): void;
|
|
27
27
|
setMetadata(key: string, value: string): void;
|
|
28
28
|
setUserID(userID: string): void;
|
|
29
29
|
private getPageNumber;
|
package/lib/app/session.js
CHANGED
|
@@ -18,11 +18,12 @@ export declare const enum Type {
|
|
|
18
18
|
SetInputValue = 18,
|
|
19
19
|
SetInputChecked = 19,
|
|
20
20
|
MouseMove = 20,
|
|
21
|
+
NetworkRequest = 21,
|
|
21
22
|
ConsoleLog = 22,
|
|
22
23
|
PageLoadTiming = 23,
|
|
23
24
|
PageRenderTiming = 24,
|
|
24
25
|
JSExceptionDeprecated = 25,
|
|
25
|
-
|
|
26
|
+
CustomEvent = 27,
|
|
26
27
|
UserID = 28,
|
|
27
28
|
UserAnonymousID = 29,
|
|
28
29
|
Metadata = 30,
|
|
@@ -162,6 +163,17 @@ export declare type MouseMove = [
|
|
|
162
163
|
number,
|
|
163
164
|
number
|
|
164
165
|
];
|
|
166
|
+
export declare type NetworkRequest = [
|
|
167
|
+
Type.NetworkRequest,
|
|
168
|
+
string,
|
|
169
|
+
string,
|
|
170
|
+
string,
|
|
171
|
+
string,
|
|
172
|
+
string,
|
|
173
|
+
number,
|
|
174
|
+
number,
|
|
175
|
+
number
|
|
176
|
+
];
|
|
165
177
|
export declare type ConsoleLog = [
|
|
166
178
|
Type.ConsoleLog,
|
|
167
179
|
string,
|
|
@@ -191,8 +203,8 @@ export declare type JSExceptionDeprecated = [
|
|
|
191
203
|
string,
|
|
192
204
|
string
|
|
193
205
|
];
|
|
194
|
-
export declare type
|
|
195
|
-
Type.
|
|
206
|
+
export declare type CustomEvent = [
|
|
207
|
+
Type.CustomEvent,
|
|
196
208
|
string,
|
|
197
209
|
string
|
|
198
210
|
];
|
|
@@ -405,5 +417,5 @@ export declare type JSException = [
|
|
|
405
417
|
string,
|
|
406
418
|
string
|
|
407
419
|
];
|
|
408
|
-
declare type Message = BatchMetadata | PartitionedMessage | Timestamp | SetPageLocation | SetViewportSize | SetViewportScroll | CreateDocument | CreateElementNode | CreateTextNode | MoveNode | RemoveNode | SetNodeAttribute | RemoveNodeAttribute | SetNodeData | SetNodeScroll | SetInputTarget | SetInputValue | SetInputChecked | MouseMove | ConsoleLog | PageLoadTiming | PageRenderTiming | JSExceptionDeprecated |
|
|
420
|
+
declare type Message = BatchMetadata | PartitionedMessage | Timestamp | SetPageLocation | SetViewportSize | SetViewportScroll | CreateDocument | CreateElementNode | CreateTextNode | MoveNode | RemoveNode | SetNodeAttribute | RemoveNodeAttribute | SetNodeData | SetNodeScroll | SetInputTarget | SetInputValue | SetInputChecked | MouseMove | NetworkRequest | ConsoleLog | PageLoadTiming | PageRenderTiming | JSExceptionDeprecated | CustomEvent | UserID | UserAnonymousID | Metadata | CSSInsertRule | CSSDeleteRule | Fetch | Profiler | OTable | StateAction | Redux | Vuex | MobX | NgRx | GraphQL | PerformanceTrack | ResourceTiming | ConnectionInformation | SetPageVisibility | LoadFontFace | SetNodeFocus | LongTask | SetNodeAttributeURLBased | SetCSSDataURLBased | TechnicalInfo | CustomIssue | CSSInsertRuleURLBased | MouseClick | CreateIFrameDocument | AdoptedSSReplaceURLBased | AdoptedSSInsertRuleURLBased | AdoptedSSDeleteRule | AdoptedSSAddOwner | AdoptedSSRemoveOwner | Zustand | JSException;
|
|
409
421
|
export default Message;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"program":{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../src/common/messages.gen.ts","../../src/common/interaction.ts","../../node_modules/@types/estree/index.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/globals.global.d.ts","../../node_modules/@types/node/index.d.ts","../../node_modules/@types/minimatch/index.d.ts","../../node_modules/@types/glob/index.d.ts","../../node_modules/@types/json-schema/index.d.ts","../../node_modules/@types/resolve/index.d.ts"],"fileInfos":[{"version":"ca3c1cd7464b613bf148a1422cb3201fe083e08565a02dc99eaad0d2977c16a7","affectsGlobalScope":true,"impliedFormat":1},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84","e21c071ca3e1b4a815d5f04a7475adcaeea5d64367e840dd0154096d705c3940",{"version":"d8996609230d17e90484a2dd58f22668f9a05a3bfe00bfb1d6271171e54a31fb","affectsGlobalScope":true,"impliedFormat":1},{"version":"43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true,"impliedFormat":1},{"version":"4378fc8122ec9d1a685b01eb66c46f62aba6b239ca7228bb6483bcf8259ee493","affectsGlobalScope":true,"impliedFormat":1},{"version":"0d5f52b3174bee6edb81260ebcd792692c32c81fd55499d69531496f3f2b25e7","affectsGlobalScope":true,"impliedFormat":1},{"version":"810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357","affectsGlobalScope":true,"impliedFormat":1},{"version":"62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6","affectsGlobalScope":true,"impliedFormat":1},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true,"impliedFormat":1},{"version":"75ec0bdd727d887f1b79ed6619412ea72ba3c81d92d0787ccb64bab18d261f14","affectsGlobalScope":true,"impliedFormat":1},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true,"impliedFormat":1},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true,"impliedFormat":1},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true,"impliedFormat":1},{"version":"12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d","affectsGlobalScope":true,"impliedFormat":1},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true,"impliedFormat":1},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true,"impliedFormat":1},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true,"impliedFormat":1},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true,"impliedFormat":1},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true,"impliedFormat":1},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true,"impliedFormat":1},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true,"impliedFormat":1},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true,"impliedFormat":1},{"version":"1b3fe904465430e030c93239a348f05e1be80640d91f2f004c3512c2c2c89f34","affectsGlobalScope":true,"impliedFormat":1},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true,"impliedFormat":1},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true,"impliedFormat":1},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true,"impliedFormat":1},{"version":"ca06fa264234f5895ebfe13ec1f578ee1c18a0d02219a54c3cdad296686251cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"10bbdc1981b8d9310ee75bfac28ee0477bb2353e8529da8cff7cb26c409cb5e8","affectsGlobalScope":true,"impliedFormat":1},"6e4591fbdda1e3267af1b30837f3f1ed63a433a012ac26ab0b306130c5cfa779","d823dfc1284a4a9d3ce9775f2b84a2ecf07d89ceb3c354cef144bb1fae485fa9","89ccbe04e737ce613f5f04990271cfa84901446350b8551b0555ddf19319723b","9122ed7070e054b73ebab37c2373a196def2d90e7d1a9a7fcd9d46b0e51fae78","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"77f0b5c6a193a699c9f7d7fb0578e64e562d271afa740783665d2a827104a873","affectsGlobalScope":true,"impliedFormat":1},"21a167fec8f933752fb8157f06d28fab6817af3ad9b0bdb1908a10762391eab9",{"version":"3e4624c306340ad303cc536a07004e81336c3f088308a9e4a9f4c957a3cda2fd","affectsGlobalScope":true,"impliedFormat":1},"0c0cee62cb619aed81133b904f644515ba3064487002a7da83fd8aa07b1b4abd","5a94487653355b56018122d92392beb2e5f4a6c63ba5cef83bbe1c99775ef713",{"version":"d5135ad93b33adcce80b18f8065087934cdc1730d63db58562edcf017e1aad9b","affectsGlobalScope":true,"impliedFormat":1},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","025fc13211ed47d2798269017af3ec869122a050d5431a6ad3c1997900e65c58","bb9c4ffa5e6290c6980b63c815cdd1625876dadb2efaf77edbe82984be93e55e","75ecef44f126e2ae018b4abbd85b6e8a2e2ba1638ebec56cc64274643ce3567b","f30bb836526d930a74593f7b0f5c1c46d10856415a8f69e5e2fc3db80371e362","14b5aa23c5d0ae1907bc696ac7b6915d88f7d85799cc0dc2dcf98fbce2c5a67c","5c439dafdc09abe4d6c260a96b822fa0ba5be7203c71a63ab1f1423cd9e838ea",{"version":"249a2b90439cdfd51709539fbfa4dfe0791cbae6efce1e9b327ba8f8cd703f49","affectsGlobalScope":true,"impliedFormat":1},"2f60ac046e587e917d739f1edc77540eb0ec34f83090dae4ebd5f96c1c9578d4","a9b6b0f7b1e30359283b131ba6d1c51ee2d3601a2f12e1623141e6a1a60c92a5","aeee0090b38de0dd47ca9a79ad5c2d156e3e09d92306719b0b45a3e96098e564","7bac475dcdd9f7e4e9da934d32c305bc889c4ce3c8ac0ef45a93a8d670fff607","09416dd69576b03a3f485adf329a02f043e4a481e060ef5b208194e488d31fd9","8acf99b1c8682276a63ea5bb68433782715892726b97e4604a415e4e56bce41c",{"version":"e8b18c6385ff784228a6f369694fcf1a6b475355ba89090a88de13587a9391d5","affectsGlobalScope":true,"impliedFormat":1},"3b145a2351f5cf16abf999c8d5f4481c74dffdc54ec1e9a89992e2622e1226c5","a907bf91df26df2400858ef75f749498fb5cf00062bf90a737ac3949cc07978d","d270fd4b565eda11a0a737c181892316b7a1ace06c7988d0246219c3df11db06","4275d5f964e7fc7afc18538e26b3748c207dd772998346d17f409749aa1f3a63",{"version":"59a638a504490fecaacf0020b9814b6abee37edb66047eb1ab9f7c2274bf1da0","affectsGlobalScope":true,"impliedFormat":1},"5153a2fd150e46ce57bb3f8db1318d33f6ad3261ed70ceeff92281c0608c74a3","d1a78a3c5708807e8de3e399f91df4797c62e44b02195eefc2209b2e713e54ee","8c4c1a64db28930732033c31418f817dcb9d09d706766707ae6d38f23faf0c53","25846d43937c672bab7e8195f3d881f93495df712ee901860effc109918938cc","12a70315c8281e46d65696086dd25827408e967b305a22276ae2779fe519e0fe","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff",{"version":"806ef4cac3b3d9fa4a48d849c8e084d7c72fcd7b16d76e06049a9ed742ff79c0","affectsGlobalScope":true,"impliedFormat":1},"44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","23b89798789dffbd437c0c423f5d02d11f9736aea73d6abf16db4f812ff36eda","29d613c3964ea75b2b4e0d17098245c34529282e9cc72b7e4eeb2a7b12c27cb7",{"version":"970a90f76d4d219ad60819d61f5994514087ba94c985647a3474a5a3d12714ed","affectsGlobalScope":true,"impliedFormat":1},"664d8f2d59164f2e08c543981453893bc7e003e4dfd29651ce09db13e9457980","a381f079c4804442f179d742fdb2e495fe28d67a47cac673485f75ae2e77aeca","3c13ef48634e7b5012fcf7e8fce7496352c2d779a7201389ca96a2a81ee4314d","5d0a25ec910fa36595f85a67ac992d7a53dd4064a1ba6aea1c9f14ab73a023f2",{"version":"bfe39beb986d2a2e512c091cbe924f1c415bc65de54de0e2f6a0dc6f84c183d9","affectsGlobalScope":true,"impliedFormat":1},"2af17363f8a062e3a8cd1b26030af0058b3f86e783f4fc6aa9f57247f240ebaa","06d7c42d256f0ce6afe1b2b6cfbc97ab391f29dadb00dd0ae8e8f23f5bc916c3","dfe08140492cdc135fb7fd9c4a652c05207b61a436906079b87da1d3111314bf","e59a892d87e72733e2a9ca21611b9beb52977be2696c7ba4b216cbbb9a48f5aa","089e1f8603cbc35ab977c8dcc662eb754b82fca32ed1dfb16bd682726c2d5432","8a300fa9b698845a1f9c41ecbe2c5966634582a8e2020d51abcace9b55aa959e",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true,"impliedFormat":1},"82fc37849846a3a0264047621d5beb6ce2ddeb2f83bdee2c79523af3c3282d97","8841e2aa774b89bd23302dede20663306dc1b9902431ac64b24be8b8d0e3f649","fd326577c62145816fe1acc306c734c2396487f76719d3785d4e825b34540b33","f3e604694b624fa3f83f6684185452992088f5efb2cf136b62474aa106d6f1b6","8a19491eba2108d5c333c249699f40aff05ad312c04a17504573b27d91f0aede"],"options":{"composite":true,"declaration":true,"module":5,"noImplicitAny":true,"noImplicitThis":true,"outDir":"..","rootDir":"../../src","strictNullChecks":true,"target":2},"fileIdsList":[[86],[57,58,86,93,94],[42,86],[45,86],[46,51,86],[47,57,58,65,74,85,86],[47,48,57,65,86],[49,86],[50,51,58,66,86],[51,74,82,86],[52,54,57,65,86],[53,86],[54,55,86],[56,57,86],[57,86],[57,58,59,74,85,86],[57,58,59,74,77,86],[86,90],[60,65,74,85,86],[57,58,60,61,65,74,82,85,86],[60,62,74,82,85,86],[42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92],[57,63,86],[64,85,86],[54,57,65,74,86],[66,86],[67,86],[45,68,86],[69,84,86,90],[70,86],[71,86],[57,72,86],[72,73,86,88],[57,74,75,76,77,86],[74,76,86],[74,75,86],[77,86],[78,86],[57,80,81,86],[80,81,86],[51,65,74,82,86],[83,86],[65,84,86],[46,60,71,85,86],[51,86],[74,86,87],[86,88],[86,89],[46,51,57,59,68,74,85,86,88,90],[74,86,91],[86,93],[39,86]],"referencedMap":[[41,1],[95,2],[96,1],[94,1],[42,3],[43,3],[45,4],[46,5],[47,6],[48,7],[49,8],[50,9],[51,10],[52,11],[53,12],[54,13],[55,13],[56,14],[57,15],[58,16],[59,17],[44,18],[92,1],[60,19],[61,20],[62,21],[93,22],[63,23],[64,24],[65,25],[66,26],[67,27],[68,28],[69,29],[70,30],[71,31],[72,32],[73,33],[74,34],[76,35],[75,36],[77,37],[78,38],[79,1],[80,39],[81,40],[82,41],[83,42],[84,43],[85,44],[86,45],[87,46],[88,47],[89,48],[90,49],[91,50],[97,51],[9,1],[8,1],[2,1],[10,1],[11,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[3,1],[4,1],[21,1],[18,1],[19,1],[20,1],[22,1],[23,1],[24,1],[5,1],[25,1],[26,1],[27,1],[28,1],[6,1],[29,1],[30,1],[31,1],[32,1],[7,1],[37,1],[33,1],[34,1],[35,1],[36,1],[1,1],[38,1],[40,52],[39,1]],"exportedModulesMap":[[41,1],[95,2],[96,1],[94,1],[42,3],[43,3],[45,4],[46,5],[47,6],[48,7],[49,8],[50,9],[51,10],[52,11],[53,12],[54,13],[55,13],[56,14],[57,15],[58,16],[59,17],[44,18],[92,1],[60,19],[61,20],[62,21],[93,22],[63,23],[64,24],[65,25],[66,26],[67,27],[68,28],[69,29],[70,30],[71,31],[72,32],[73,33],[74,34],[76,35],[75,36],[77,37],[78,38],[79,1],[80,39],[81,40],[82,41],[83,42],[84,43],[85,44],[86,45],[87,46],[88,47],[89,48],[90,49],[91,50],[97,51],[9,1],[8,1],[2,1],[10,1],[11,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[3,1],[4,1],[21,1],[18,1],[19,1],[20,1],[22,1],[23,1],[24,1],[5,1],[25,1],[26,1],[27,1],[28,1],[6,1],[29,1],[30,1],[31,1],[32,1],[7,1],[37,1],[33,1],[34,1],[35,1],[36,1],[1,1],[38,1],[40,52],[39,1]],"semanticDiagnosticsPerFile":[41,95,96,94,42,43,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,44,92,60,61,62,93,63,64,65,66,67,68,69,70,71,72,73,74,76,75,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,97,9,8,2,10,11,12,13,14,15,16,17,3,4,21,18,19,20,22,23,24,5,25,26,27,28,6,29,30,31,32,7,37,33,34,35,36,1,38,40,39]},"version":"4.6.0-dev.20211126"}
|
|
1
|
+
{"program":{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../src/common/messages.gen.ts","../../src/common/interaction.ts","../../node_modules/@types/estree/index.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/globals.global.d.ts","../../node_modules/@types/node/index.d.ts","../../node_modules/@types/minimatch/index.d.ts","../../node_modules/@types/glob/index.d.ts","../../node_modules/@types/json-schema/index.d.ts","../../node_modules/@types/resolve/index.d.ts"],"fileInfos":[{"version":"ca3c1cd7464b613bf148a1422cb3201fe083e08565a02dc99eaad0d2977c16a7","affectsGlobalScope":true,"impliedFormat":1},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84","e21c071ca3e1b4a815d5f04a7475adcaeea5d64367e840dd0154096d705c3940",{"version":"d8996609230d17e90484a2dd58f22668f9a05a3bfe00bfb1d6271171e54a31fb","affectsGlobalScope":true,"impliedFormat":1},{"version":"43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true,"impliedFormat":1},{"version":"4378fc8122ec9d1a685b01eb66c46f62aba6b239ca7228bb6483bcf8259ee493","affectsGlobalScope":true,"impliedFormat":1},{"version":"0d5f52b3174bee6edb81260ebcd792692c32c81fd55499d69531496f3f2b25e7","affectsGlobalScope":true,"impliedFormat":1},{"version":"810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357","affectsGlobalScope":true,"impliedFormat":1},{"version":"62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6","affectsGlobalScope":true,"impliedFormat":1},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true,"impliedFormat":1},{"version":"75ec0bdd727d887f1b79ed6619412ea72ba3c81d92d0787ccb64bab18d261f14","affectsGlobalScope":true,"impliedFormat":1},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true,"impliedFormat":1},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true,"impliedFormat":1},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true,"impliedFormat":1},{"version":"12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d","affectsGlobalScope":true,"impliedFormat":1},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true,"impliedFormat":1},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true,"impliedFormat":1},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true,"impliedFormat":1},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true,"impliedFormat":1},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true,"impliedFormat":1},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true,"impliedFormat":1},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true,"impliedFormat":1},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true,"impliedFormat":1},{"version":"1b3fe904465430e030c93239a348f05e1be80640d91f2f004c3512c2c2c89f34","affectsGlobalScope":true,"impliedFormat":1},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true,"impliedFormat":1},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true,"impliedFormat":1},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true,"impliedFormat":1},{"version":"ca06fa264234f5895ebfe13ec1f578ee1c18a0d02219a54c3cdad296686251cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"10bbdc1981b8d9310ee75bfac28ee0477bb2353e8529da8cff7cb26c409cb5e8","affectsGlobalScope":true,"impliedFormat":1},"4b805f3253df012c1c8191b21f5abdc7b235c43414f9ab42af15140693c79fc9","d823dfc1284a4a9d3ce9775f2b84a2ecf07d89ceb3c354cef144bb1fae485fa9","89ccbe04e737ce613f5f04990271cfa84901446350b8551b0555ddf19319723b","9122ed7070e054b73ebab37c2373a196def2d90e7d1a9a7fcd9d46b0e51fae78","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"77f0b5c6a193a699c9f7d7fb0578e64e562d271afa740783665d2a827104a873","affectsGlobalScope":true,"impliedFormat":1},"21a167fec8f933752fb8157f06d28fab6817af3ad9b0bdb1908a10762391eab9",{"version":"3e4624c306340ad303cc536a07004e81336c3f088308a9e4a9f4c957a3cda2fd","affectsGlobalScope":true,"impliedFormat":1},"0c0cee62cb619aed81133b904f644515ba3064487002a7da83fd8aa07b1b4abd","5a94487653355b56018122d92392beb2e5f4a6c63ba5cef83bbe1c99775ef713",{"version":"d5135ad93b33adcce80b18f8065087934cdc1730d63db58562edcf017e1aad9b","affectsGlobalScope":true,"impliedFormat":1},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","34ec1daf3566f26c43dbab380af0de1aac29166e57e4f9ef379a2f154e0cb290","bb9c4ffa5e6290c6980b63c815cdd1625876dadb2efaf77edbe82984be93e55e","75ecef44f126e2ae018b4abbd85b6e8a2e2ba1638ebec56cc64274643ce3567b","f30bb836526d930a74593f7b0f5c1c46d10856415a8f69e5e2fc3db80371e362","14b5aa23c5d0ae1907bc696ac7b6915d88f7d85799cc0dc2dcf98fbce2c5a67c","5c439dafdc09abe4d6c260a96b822fa0ba5be7203c71a63ab1f1423cd9e838ea",{"version":"249a2b90439cdfd51709539fbfa4dfe0791cbae6efce1e9b327ba8f8cd703f49","affectsGlobalScope":true,"impliedFormat":1},"2f60ac046e587e917d739f1edc77540eb0ec34f83090dae4ebd5f96c1c9578d4","a9b6b0f7b1e30359283b131ba6d1c51ee2d3601a2f12e1623141e6a1a60c92a5","aeee0090b38de0dd47ca9a79ad5c2d156e3e09d92306719b0b45a3e96098e564","7bac475dcdd9f7e4e9da934d32c305bc889c4ce3c8ac0ef45a93a8d670fff607","09416dd69576b03a3f485adf329a02f043e4a481e060ef5b208194e488d31fd9","8acf99b1c8682276a63ea5bb68433782715892726b97e4604a415e4e56bce41c",{"version":"e8b18c6385ff784228a6f369694fcf1a6b475355ba89090a88de13587a9391d5","affectsGlobalScope":true,"impliedFormat":1},"3b145a2351f5cf16abf999c8d5f4481c74dffdc54ec1e9a89992e2622e1226c5","a907bf91df26df2400858ef75f749498fb5cf00062bf90a737ac3949cc07978d","d270fd4b565eda11a0a737c181892316b7a1ace06c7988d0246219c3df11db06","4275d5f964e7fc7afc18538e26b3748c207dd772998346d17f409749aa1f3a63",{"version":"59a638a504490fecaacf0020b9814b6abee37edb66047eb1ab9f7c2274bf1da0","affectsGlobalScope":true,"impliedFormat":1},"5153a2fd150e46ce57bb3f8db1318d33f6ad3261ed70ceeff92281c0608c74a3","d1a78a3c5708807e8de3e399f91df4797c62e44b02195eefc2209b2e713e54ee","8c4c1a64db28930732033c31418f817dcb9d09d706766707ae6d38f23faf0c53","25846d43937c672bab7e8195f3d881f93495df712ee901860effc109918938cc","556bf5c36deb62cffa1bf697c1789fe008ec82db0273025001db66732714e9d9","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff",{"version":"806ef4cac3b3d9fa4a48d849c8e084d7c72fcd7b16d76e06049a9ed742ff79c0","affectsGlobalScope":true,"impliedFormat":1},"44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","23b89798789dffbd437c0c423f5d02d11f9736aea73d6abf16db4f812ff36eda","653968fc1b35c5eb3d273d36fac1c1dc66f9537edf28f33485b8776bd956e23d",{"version":"970a90f76d4d219ad60819d61f5994514087ba94c985647a3474a5a3d12714ed","affectsGlobalScope":true,"impliedFormat":1},"664d8f2d59164f2e08c543981453893bc7e003e4dfd29651ce09db13e9457980","a381f079c4804442f179d742fdb2e495fe28d67a47cac673485f75ae2e77aeca","3c13ef48634e7b5012fcf7e8fce7496352c2d779a7201389ca96a2a81ee4314d","5d0a25ec910fa36595f85a67ac992d7a53dd4064a1ba6aea1c9f14ab73a023f2",{"version":"bfe39beb986d2a2e512c091cbe924f1c415bc65de54de0e2f6a0dc6f84c183d9","affectsGlobalScope":true,"impliedFormat":1},"2af17363f8a062e3a8cd1b26030af0058b3f86e783f4fc6aa9f57247f240ebaa","06d7c42d256f0ce6afe1b2b6cfbc97ab391f29dadb00dd0ae8e8f23f5bc916c3","dfe08140492cdc135fb7fd9c4a652c05207b61a436906079b87da1d3111314bf","e59a892d87e72733e2a9ca21611b9beb52977be2696c7ba4b216cbbb9a48f5aa","089e1f8603cbc35ab977c8dcc662eb754b82fca32ed1dfb16bd682726c2d5432","8a300fa9b698845a1f9c41ecbe2c5966634582a8e2020d51abcace9b55aa959e",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true,"impliedFormat":1},"64d5585e08ad1ab194b18bf4e851f22a626eae33ac7312ca4ba90bb7ea7daf64","8841e2aa774b89bd23302dede20663306dc1b9902431ac64b24be8b8d0e3f649","fd326577c62145816fe1acc306c734c2396487f76719d3785d4e825b34540b33","f3e604694b624fa3f83f6684185452992088f5efb2cf136b62474aa106d6f1b6","8a19491eba2108d5c333c249699f40aff05ad312c04a17504573b27d91f0aede"],"options":{"composite":true,"declaration":true,"module":5,"noImplicitAny":true,"noImplicitThis":true,"outDir":"..","rootDir":"../../src","strictNullChecks":true,"target":2},"fileIdsList":[[86],[57,58,86,93,94],[42,86],[45,86],[46,51,86],[47,57,58,65,74,85,86],[47,48,57,65,86],[49,86],[50,51,58,66,86],[51,74,82,86],[52,54,57,65,86],[53,86],[54,55,86],[56,57,86],[57,86],[57,58,59,74,85,86],[57,58,59,74,77,86],[86,90],[60,65,74,85,86],[57,58,60,61,65,74,82,85,86],[60,62,74,82,85,86],[42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92],[57,63,86],[64,85,86],[54,57,65,74,86],[66,86],[67,86],[45,68,86],[69,84,86,90],[70,86],[71,86],[57,72,86],[72,73,86,88],[57,74,75,76,77,86],[74,76,86],[74,75,86],[77,86],[78,86],[57,80,81,86],[80,81,86],[51,65,74,82,86],[83,86],[65,84,86],[46,60,71,85,86],[51,86],[74,86,87],[86,88],[86,89],[46,51,57,59,68,74,85,86,88,90],[74,86,91],[86,93],[39,86]],"referencedMap":[[41,1],[95,2],[96,1],[94,1],[42,3],[43,3],[45,4],[46,5],[47,6],[48,7],[49,8],[50,9],[51,10],[52,11],[53,12],[54,13],[55,13],[56,14],[57,15],[58,16],[59,17],[44,18],[92,1],[60,19],[61,20],[62,21],[93,22],[63,23],[64,24],[65,25],[66,26],[67,27],[68,28],[69,29],[70,30],[71,31],[72,32],[73,33],[74,34],[76,35],[75,36],[77,37],[78,38],[79,1],[80,39],[81,40],[82,41],[83,42],[84,43],[85,44],[86,45],[87,46],[88,47],[89,48],[90,49],[91,50],[97,51],[9,1],[8,1],[2,1],[10,1],[11,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[3,1],[4,1],[21,1],[18,1],[19,1],[20,1],[22,1],[23,1],[24,1],[5,1],[25,1],[26,1],[27,1],[28,1],[6,1],[29,1],[30,1],[31,1],[32,1],[7,1],[37,1],[33,1],[34,1],[35,1],[36,1],[1,1],[38,1],[40,52],[39,1]],"exportedModulesMap":[[41,1],[95,2],[96,1],[94,1],[42,3],[43,3],[45,4],[46,5],[47,6],[48,7],[49,8],[50,9],[51,10],[52,11],[53,12],[54,13],[55,13],[56,14],[57,15],[58,16],[59,17],[44,18],[92,1],[60,19],[61,20],[62,21],[93,22],[63,23],[64,24],[65,25],[66,26],[67,27],[68,28],[69,29],[70,30],[71,31],[72,32],[73,33],[74,34],[76,35],[75,36],[77,37],[78,38],[79,1],[80,39],[81,40],[82,41],[83,42],[84,43],[85,44],[86,45],[87,46],[88,47],[89,48],[90,49],[91,50],[97,51],[9,1],[8,1],[2,1],[10,1],[11,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[3,1],[4,1],[21,1],[18,1],[19,1],[20,1],[22,1],[23,1],[24,1],[5,1],[25,1],[26,1],[27,1],[28,1],[6,1],[29,1],[30,1],[31,1],[32,1],[7,1],[37,1],[33,1],[34,1],[35,1],[36,1],[1,1],[38,1],[40,52],[39,1]],"semanticDiagnosticsPerFile":[41,95,96,94,42,43,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,44,92,60,61,62,93,63,64,65,66,67,68,69,70,71,72,73,74,76,75,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,97,9,8,2,10,11,12,13,14,15,16,17,3,4,21,18,19,20,22,23,24,5,25,26,27,28,6,29,30,31,32,7,37,33,34,35,36,1,38,40,39]},"version":"4.6.0-dev.20211126"}
|
package/lib/index.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ import type { Options as ExceptionOptions } from './modules/exception.js';
|
|
|
9
9
|
import type { Options as InputOptions } from './modules/input.js';
|
|
10
10
|
import type { Options as PerformanceOptions } from './modules/performance.js';
|
|
11
11
|
import type { Options as TimingOptions } from './modules/timing.js';
|
|
12
|
+
import type { Options as NetworkOptions } from './modules/network.js';
|
|
12
13
|
import type { StartOptions } from './app/index.js';
|
|
13
14
|
import type { StartPromiseReturn } from './app/index.js';
|
|
14
15
|
export declare type Options = Partial<AppOptions & ConsoleOptions & ExceptionOptions & InputOptions & PerformanceOptions & TimingOptions> & {
|
|
@@ -17,6 +18,7 @@ export declare type Options = Partial<AppOptions & ConsoleOptions & ExceptionOpt
|
|
|
17
18
|
sessionToken?: string;
|
|
18
19
|
respectDoNotTrack?: boolean;
|
|
19
20
|
autoResetOnWindowOpen?: boolean;
|
|
21
|
+
network?: NetworkOptions;
|
|
20
22
|
__DISABLE_SECURE_MODE?: boolean;
|
|
21
23
|
};
|
|
22
24
|
export default class API {
|
|
@@ -30,7 +32,9 @@ export default class API {
|
|
|
30
32
|
getSessionToken(): string | null | undefined;
|
|
31
33
|
getSessionID(): string | null | undefined;
|
|
32
34
|
sessionID(): string | null | undefined;
|
|
33
|
-
getSessionURL(
|
|
35
|
+
getSessionURL(options?: {
|
|
36
|
+
withCurrentTime?: boolean;
|
|
37
|
+
}): string | undefined;
|
|
34
38
|
setUserID(id: string): void;
|
|
35
39
|
userID(id: string): void;
|
|
36
40
|
setUserAnonymousID(id: string): void;
|
package/lib/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import App, { DEFAULT_INGEST_POINT } from './app/index.js';
|
|
2
2
|
export { default as App } from './app/index.js';
|
|
3
|
-
import { UserAnonymousID,
|
|
3
|
+
import { UserAnonymousID, CustomEvent, CustomIssue } from './app/messages.gen.js';
|
|
4
4
|
import * as _Messages from './app/messages.gen.js';
|
|
5
5
|
export const Messages = _Messages;
|
|
6
6
|
export { SanitizeLevel } from './app/sanitizer.js';
|
|
@@ -17,6 +17,7 @@ import Viewport from './modules/viewport.js';
|
|
|
17
17
|
import CSSRules from './modules/cssrules.js';
|
|
18
18
|
import Focus from './modules/focus.js';
|
|
19
19
|
import Fonts from './modules/fonts.js';
|
|
20
|
+
import Network from './modules/network.js';
|
|
20
21
|
import ConstructedStyleSheets from './modules/constructedStyleSheets.js';
|
|
21
22
|
import { IN_BROWSER, deprecationWarn, DOCS_HOST } from './utils.js';
|
|
22
23
|
const DOCS_SETUP = '/installation/setup-or';
|
|
@@ -109,6 +110,7 @@ export default class API {
|
|
|
109
110
|
Scroll(app);
|
|
110
111
|
Focus(app);
|
|
111
112
|
Fonts(app);
|
|
113
|
+
Network(app, options.network);
|
|
112
114
|
window.__OPENREPLAY__ = this;
|
|
113
115
|
if (options.autoResetOnWindowOpen) {
|
|
114
116
|
const wOpen = window.open;
|
|
@@ -133,7 +135,7 @@ export default class API {
|
|
|
133
135
|
// no-cors issue only with text/plain or not-set Content-Type
|
|
134
136
|
// req.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
|
|
135
137
|
req.send(JSON.stringify({
|
|
136
|
-
trackerVersion: '4.1.
|
|
138
|
+
trackerVersion: '4.1.9-beta.2',
|
|
137
139
|
projectKey: options.projectKey,
|
|
138
140
|
doNotTrack,
|
|
139
141
|
// TODO: add precise reason (an exact API missing)
|
|
@@ -183,11 +185,11 @@ export default class API {
|
|
|
183
185
|
deprecationWarn("'sessionID' method", "'getSessionID' method", '/');
|
|
184
186
|
return this.getSessionID();
|
|
185
187
|
}
|
|
186
|
-
getSessionURL() {
|
|
188
|
+
getSessionURL(options) {
|
|
187
189
|
if (this.app === null) {
|
|
188
190
|
return undefined;
|
|
189
191
|
}
|
|
190
|
-
return this.app.getSessionURL();
|
|
192
|
+
return this.app.getSessionURL(options);
|
|
191
193
|
}
|
|
192
194
|
setUserID(id) {
|
|
193
195
|
if (typeof id === 'string' && this.app !== null) {
|
|
@@ -228,7 +230,7 @@ export default class API {
|
|
|
228
230
|
catch (e) {
|
|
229
231
|
return;
|
|
230
232
|
}
|
|
231
|
-
this.app.send(
|
|
233
|
+
this.app.send(CustomEvent(key, payload));
|
|
232
234
|
}
|
|
233
235
|
}
|
|
234
236
|
}
|
package/lib/modules/cssrules.js
CHANGED
|
@@ -75,7 +75,7 @@ export default function (app) {
|
|
|
75
75
|
patchContext(window);
|
|
76
76
|
app.observer.attachContextCallback(patchContext);
|
|
77
77
|
app.nodes.attachNodeCallback((node) => {
|
|
78
|
-
if (!(hasTag(node, '
|
|
78
|
+
if (!(hasTag(node, 'style')) || !node.sheet) {
|
|
79
79
|
return;
|
|
80
80
|
}
|
|
81
81
|
if (node.textContent !== null && node.textContent.trim().length > 0) {
|
package/lib/modules/focus.js
CHANGED
|
@@ -9,7 +9,7 @@ export default function (app) {
|
|
|
9
9
|
}
|
|
10
10
|
let blurred = false;
|
|
11
11
|
app.nodes.attachNodeCallback((node) => {
|
|
12
|
-
if (!hasTag(node, '
|
|
12
|
+
if (!hasTag(node, 'body')) {
|
|
13
13
|
return;
|
|
14
14
|
}
|
|
15
15
|
app.nodes.attachNodeListener(node, 'focus', (e) => {
|
|
@@ -32,7 +32,7 @@ export default function (app) {
|
|
|
32
32
|
});
|
|
33
33
|
app.attachStartCallback(() => {
|
|
34
34
|
let elem = document.activeElement;
|
|
35
|
-
while (elem && hasTag(elem, '
|
|
35
|
+
while (elem && hasTag(elem, 'iframe') && elem.contentDocument) {
|
|
36
36
|
elem = elem.contentDocument.activeElement;
|
|
37
37
|
}
|
|
38
38
|
if (elem && elem !== elem.ownerDocument.body) {
|