@openreplay/tracker 16.4.9 → 16.4.10-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/entry.js +109 -134
- package/dist/cjs/entry.js.map +1 -1
- package/dist/cjs/index.js +109 -134
- package/dist/cjs/index.js.map +1 -1
- package/dist/lib/entry.js +109 -134
- package/dist/lib/entry.js.map +1 -1
- package/dist/lib/index.js +109 -134
- package/dist/lib/index.js.map +1 -1
- package/package.json +2 -2
package/dist/cjs/entry.js
CHANGED
|
@@ -5276,7 +5276,7 @@ class App {
|
|
|
5276
5276
|
this.stopCallbacks = [];
|
|
5277
5277
|
this.commitCallbacks = [];
|
|
5278
5278
|
this.activityState = ActivityState.NotActive;
|
|
5279
|
-
this.version = '16.4.
|
|
5279
|
+
this.version = '16.4.10-beta.0'; // TODO: version compatability check inside each plugin.
|
|
5280
5280
|
this.socketMode = false;
|
|
5281
5281
|
this.compressionThreshold = 24 * 1000;
|
|
5282
5282
|
this.bc = null;
|
|
@@ -8767,15 +8767,6 @@ class BeaconProxy {
|
|
|
8767
8767
|
}
|
|
8768
8768
|
}
|
|
8769
8769
|
|
|
8770
|
-
var RequestState;
|
|
8771
|
-
(function (RequestState) {
|
|
8772
|
-
RequestState[RequestState["UNSENT"] = 0] = "UNSENT";
|
|
8773
|
-
RequestState[RequestState["OPENED"] = 1] = "OPENED";
|
|
8774
|
-
RequestState[RequestState["HEADERS_RECEIVED"] = 2] = "HEADERS_RECEIVED";
|
|
8775
|
-
RequestState[RequestState["LOADING"] = 3] = "LOADING";
|
|
8776
|
-
RequestState[RequestState["DONE"] = 4] = "DONE";
|
|
8777
|
-
})(RequestState || (RequestState = {}));
|
|
8778
|
-
|
|
8779
8770
|
/**
|
|
8780
8771
|
* I took inspiration in few stack exchange posts
|
|
8781
8772
|
* and Tencent vConsole library (MIT)
|
|
@@ -8787,19 +8778,19 @@ class ResponseProxyHandler {
|
|
|
8787
8778
|
constructor(resp, item) {
|
|
8788
8779
|
this.resp = resp;
|
|
8789
8780
|
this.item = item;
|
|
8790
|
-
this.mockReader();
|
|
8791
8781
|
}
|
|
8792
8782
|
set(target, key, value) {
|
|
8793
8783
|
return Reflect.set(target, key, value);
|
|
8794
8784
|
}
|
|
8795
8785
|
get(target, key) {
|
|
8796
8786
|
const value = Reflect.get(target, key);
|
|
8787
|
+
if (key === "arrayBuffer" || key === "blob") {
|
|
8788
|
+
return typeof value === "function" ? value.bind(target) : value;
|
|
8789
|
+
}
|
|
8797
8790
|
switch (key) {
|
|
8798
|
-
case
|
|
8799
|
-
case
|
|
8800
|
-
case
|
|
8801
|
-
case 'json':
|
|
8802
|
-
case 'text':
|
|
8791
|
+
case "formData":
|
|
8792
|
+
case "json":
|
|
8793
|
+
case "text":
|
|
8803
8794
|
return () => {
|
|
8804
8795
|
this.item.responseType = key.toLowerCase();
|
|
8805
8796
|
// @ts-ignore
|
|
@@ -8809,74 +8800,13 @@ class ResponseProxyHandler {
|
|
|
8809
8800
|
});
|
|
8810
8801
|
};
|
|
8811
8802
|
}
|
|
8812
|
-
if (typeof value ===
|
|
8803
|
+
if (typeof value === "function") {
|
|
8813
8804
|
return value.bind(target);
|
|
8814
8805
|
}
|
|
8815
8806
|
else {
|
|
8816
8807
|
return value;
|
|
8817
8808
|
}
|
|
8818
8809
|
}
|
|
8819
|
-
mockReader() {
|
|
8820
|
-
let readerReceivedValue;
|
|
8821
|
-
if (!this.resp.body) {
|
|
8822
|
-
// some browsers do not return `body` in some cases, like `OPTIONS` method
|
|
8823
|
-
return;
|
|
8824
|
-
}
|
|
8825
|
-
if (typeof this.resp.body.getReader !== 'function') {
|
|
8826
|
-
return;
|
|
8827
|
-
}
|
|
8828
|
-
const clonedResp = this.resp.clone();
|
|
8829
|
-
const _getReader = clonedResp.body.getReader;
|
|
8830
|
-
// @ts-ignore
|
|
8831
|
-
clonedResp.body.getReader = () => {
|
|
8832
|
-
const reader = _getReader.apply(this.resp.body);
|
|
8833
|
-
// when readyState is already 4,
|
|
8834
|
-
// it's not a chunked stream, or it had already been read.
|
|
8835
|
-
// so should not update status.
|
|
8836
|
-
if (this.item.readyState === RequestState.DONE) {
|
|
8837
|
-
return reader;
|
|
8838
|
-
}
|
|
8839
|
-
const _read = reader.read;
|
|
8840
|
-
const _cancel = reader.cancel;
|
|
8841
|
-
this.item.responseType = 'arraybuffer';
|
|
8842
|
-
// @ts-ignore
|
|
8843
|
-
reader.read = () => {
|
|
8844
|
-
return _read.apply(reader).then((result) => {
|
|
8845
|
-
if (!readerReceivedValue) {
|
|
8846
|
-
// @ts-ignore
|
|
8847
|
-
readerReceivedValue = new Uint8Array(result.value);
|
|
8848
|
-
}
|
|
8849
|
-
else {
|
|
8850
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
8851
|
-
const newValue = new Uint8Array(readerReceivedValue.length + result.value.length);
|
|
8852
|
-
newValue.set(readerReceivedValue);
|
|
8853
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
8854
|
-
newValue.set(result.value, readerReceivedValue.length);
|
|
8855
|
-
readerReceivedValue = newValue;
|
|
8856
|
-
}
|
|
8857
|
-
this.item.endTime = performance.now();
|
|
8858
|
-
this.item.duration = this.item.endTime - (this.item.startTime || this.item.endTime);
|
|
8859
|
-
this.item.readyState = result.done ? 4 : 3;
|
|
8860
|
-
this.item.statusText = result.done ? String(this.item.status) : 'Loading';
|
|
8861
|
-
this.item.responseSize = readerReceivedValue.length;
|
|
8862
|
-
this.item.responseSizeText = formatByteSize(this.item.responseSize);
|
|
8863
|
-
if (result.done) {
|
|
8864
|
-
this.item.response = getStringResponseByType(this.item.responseType, readerReceivedValue);
|
|
8865
|
-
}
|
|
8866
|
-
return result;
|
|
8867
|
-
});
|
|
8868
|
-
};
|
|
8869
|
-
reader.cancel = (...args) => {
|
|
8870
|
-
this.item.cancelState = 2;
|
|
8871
|
-
this.item.statusText = 'Cancel';
|
|
8872
|
-
this.item.endTime = performance.now();
|
|
8873
|
-
this.item.duration = this.item.endTime - (this.item.startTime || this.item.endTime);
|
|
8874
|
-
this.item.response = getStringResponseByType(this.item.responseType, readerReceivedValue);
|
|
8875
|
-
return _cancel.apply(reader, args);
|
|
8876
|
-
};
|
|
8877
|
-
return reader;
|
|
8878
|
-
};
|
|
8879
|
-
}
|
|
8880
8810
|
}
|
|
8881
8811
|
class FetchProxyHandler {
|
|
8882
8812
|
constructor(ignoredHeaders, setSessionTokenHeader, sanitize, sendMessage, isServiceUrl, tokenUrlMatcher) {
|
|
@@ -8892,10 +8822,10 @@ class FetchProxyHandler {
|
|
|
8892
8822
|
const init = argsList[1];
|
|
8893
8823
|
if (!input ||
|
|
8894
8824
|
// @ts-ignore
|
|
8895
|
-
(typeof input !==
|
|
8825
|
+
(typeof input !== "string" && !(input === null || input === void 0 ? void 0 : input.url))) {
|
|
8896
8826
|
return target.apply(window, argsList);
|
|
8897
8827
|
}
|
|
8898
|
-
const isORUrl = input instanceof URL || typeof input ===
|
|
8828
|
+
const isORUrl = input instanceof URL || typeof input === "string"
|
|
8899
8829
|
? this.isServiceUrl(String(input))
|
|
8900
8830
|
: this.isServiceUrl(String(input.url));
|
|
8901
8831
|
if (isORUrl) {
|
|
@@ -8940,33 +8870,33 @@ class FetchProxyHandler {
|
|
|
8940
8870
|
});
|
|
8941
8871
|
}
|
|
8942
8872
|
beforeFetch(item, input, init) {
|
|
8943
|
-
let url, method =
|
|
8873
|
+
let url, method = "GET", requestHeader = {};
|
|
8944
8874
|
// handle `input` content
|
|
8945
|
-
if (typeof input ===
|
|
8875
|
+
if (typeof input === "string") {
|
|
8946
8876
|
// when `input` is a string
|
|
8947
|
-
method = (init === null || init === void 0 ? void 0 : init.method) ||
|
|
8877
|
+
method = (init === null || init === void 0 ? void 0 : init.method) || "GET";
|
|
8948
8878
|
url = getURL(input);
|
|
8949
8879
|
requestHeader = (init === null || init === void 0 ? void 0 : init.headers) || {};
|
|
8950
8880
|
}
|
|
8951
8881
|
else {
|
|
8952
8882
|
// when `input` is a `Request` object
|
|
8953
|
-
method = input.method ||
|
|
8883
|
+
method = input.method || "GET";
|
|
8954
8884
|
url = getURL(input.url);
|
|
8955
8885
|
requestHeader = input.headers;
|
|
8956
8886
|
}
|
|
8957
8887
|
item.method = method;
|
|
8958
|
-
item.requestType =
|
|
8888
|
+
item.requestType = "fetch";
|
|
8959
8889
|
item.requestHeader = requestHeader;
|
|
8960
8890
|
item.url = url.toString();
|
|
8961
|
-
item.name = (url.pathname.split(
|
|
8891
|
+
item.name = (url.pathname.split("/").pop() || "") + url.search;
|
|
8962
8892
|
item.status = 0;
|
|
8963
|
-
item.statusText =
|
|
8893
|
+
item.statusText = "Pending";
|
|
8964
8894
|
item.readyState = 1;
|
|
8965
8895
|
if (!item.startTime) {
|
|
8966
8896
|
// UNSENT
|
|
8967
8897
|
item.startTime = performance.now();
|
|
8968
8898
|
}
|
|
8969
|
-
if (Object.prototype.toString.call(requestHeader) ===
|
|
8899
|
+
if (Object.prototype.toString.call(requestHeader) === "[object Headers]") {
|
|
8970
8900
|
item.requestHeader = {};
|
|
8971
8901
|
for (const [key, value] of requestHeader) {
|
|
8972
8902
|
item.requestHeader[key] = value;
|
|
@@ -8997,7 +8927,8 @@ class FetchProxyHandler {
|
|
|
8997
8927
|
item.header = {};
|
|
8998
8928
|
for (const [key, value] of resp.headers) {
|
|
8999
8929
|
item.header[key] = value;
|
|
9000
|
-
isChunked =
|
|
8930
|
+
isChunked =
|
|
8931
|
+
value.toLowerCase().indexOf("chunked") > -1 ? true : isChunked;
|
|
9001
8932
|
}
|
|
9002
8933
|
if (isChunked) {
|
|
9003
8934
|
// when `transfer-encoding` is chunked, the response is a stream which is under loading,
|
|
@@ -9012,7 +8943,9 @@ class FetchProxyHandler {
|
|
|
9012
8943
|
this.handleResponseBody(resp.clone(), item)
|
|
9013
8944
|
.then((responseValue) => {
|
|
9014
8945
|
item.responseSize =
|
|
9015
|
-
typeof responseValue ===
|
|
8946
|
+
typeof responseValue === "string"
|
|
8947
|
+
? responseValue.length
|
|
8948
|
+
: responseValue.byteLength;
|
|
9016
8949
|
item.responseSizeText = formatByteSize(item.responseSize);
|
|
9017
8950
|
item.response = getStringResponseByType(item.responseType, responseValue);
|
|
9018
8951
|
const msg = item.getMessage();
|
|
@@ -9021,28 +8954,32 @@ class FetchProxyHandler {
|
|
|
9021
8954
|
}
|
|
9022
8955
|
})
|
|
9023
8956
|
.catch((e) => {
|
|
9024
|
-
if (e.name !==
|
|
8957
|
+
if (e.name !== "AbortError") {
|
|
9025
8958
|
throw e;
|
|
9026
8959
|
}
|
|
9027
8960
|
});
|
|
9028
8961
|
}
|
|
9029
|
-
|
|
8962
|
+
const ct = (resp.headers.get("content-type") || "").toLowerCase();
|
|
8963
|
+
const isTextLike = ct.includes("application/json") || ct.startsWith("text/");
|
|
8964
|
+
return isTextLike
|
|
8965
|
+
? new Proxy(resp, new ResponseProxyHandler(resp, item))
|
|
8966
|
+
: resp;
|
|
9030
8967
|
};
|
|
9031
8968
|
}
|
|
9032
8969
|
handleResponseBody(resp, item) {
|
|
9033
8970
|
// parse response body by Content-Type
|
|
9034
|
-
const contentType = resp.headers.get(
|
|
9035
|
-
if (contentType && contentType.includes(
|
|
9036
|
-
item.responseType =
|
|
8971
|
+
const contentType = resp.headers.get("content-type");
|
|
8972
|
+
if (contentType && contentType.includes("application/json")) {
|
|
8973
|
+
item.responseType = "json";
|
|
9037
8974
|
return resp.text();
|
|
9038
8975
|
}
|
|
9039
8976
|
else if (contentType &&
|
|
9040
|
-
(contentType.includes(
|
|
9041
|
-
item.responseType =
|
|
8977
|
+
(contentType.includes("text/html") || contentType.includes("text/plain"))) {
|
|
8978
|
+
item.responseType = "text";
|
|
9042
8979
|
return resp.text();
|
|
9043
8980
|
}
|
|
9044
8981
|
else {
|
|
9045
|
-
item.responseType =
|
|
8982
|
+
item.responseType = "arraybuffer";
|
|
9046
8983
|
return resp.arrayBuffer();
|
|
9047
8984
|
}
|
|
9048
8985
|
}
|
|
@@ -9053,6 +8990,15 @@ class FetchProxy {
|
|
|
9053
8990
|
}
|
|
9054
8991
|
}
|
|
9055
8992
|
|
|
8993
|
+
var RequestState;
|
|
8994
|
+
(function (RequestState) {
|
|
8995
|
+
RequestState[RequestState["UNSENT"] = 0] = "UNSENT";
|
|
8996
|
+
RequestState[RequestState["OPENED"] = 1] = "OPENED";
|
|
8997
|
+
RequestState[RequestState["HEADERS_RECEIVED"] = 2] = "HEADERS_RECEIVED";
|
|
8998
|
+
RequestState[RequestState["LOADING"] = 3] = "LOADING";
|
|
8999
|
+
RequestState[RequestState["DONE"] = 4] = "DONE";
|
|
9000
|
+
})(RequestState || (RequestState = {}));
|
|
9001
|
+
|
|
9056
9002
|
/**
|
|
9057
9003
|
* I took inspiration in few stack exchange posts
|
|
9058
9004
|
* and Tencent vConsole library (MIT)
|
|
@@ -9079,28 +9025,29 @@ class XHRProxyHandler {
|
|
|
9079
9025
|
this.onTimeout();
|
|
9080
9026
|
};
|
|
9081
9027
|
this.item = new NetworkMessage(ignoredHeaders, setSessionTokenHeader, sanitize);
|
|
9082
|
-
this.item.requestType =
|
|
9028
|
+
this.item.requestType = "xhr";
|
|
9083
9029
|
}
|
|
9084
9030
|
get(target, key) {
|
|
9085
9031
|
switch (key) {
|
|
9086
|
-
case
|
|
9032
|
+
case "open":
|
|
9087
9033
|
return this.getOpen(target);
|
|
9088
|
-
case
|
|
9034
|
+
case "send":
|
|
9089
9035
|
this.setSessionTokenHeader((name, value) => {
|
|
9090
9036
|
if (this.tokenUrlMatcher !== undefined) {
|
|
9091
9037
|
if (!this.tokenUrlMatcher(this.item.url)) {
|
|
9092
9038
|
return;
|
|
9093
9039
|
}
|
|
9094
9040
|
}
|
|
9095
|
-
target.
|
|
9041
|
+
if (target.readyState === 1)
|
|
9042
|
+
target.setRequestHeader(name, value);
|
|
9096
9043
|
});
|
|
9097
9044
|
return this.getSend(target);
|
|
9098
|
-
case
|
|
9045
|
+
case "setRequestHeader":
|
|
9099
9046
|
return this.getSetRequestHeader(target);
|
|
9100
9047
|
default:
|
|
9101
9048
|
// eslint-disable-next-line no-case-declarations
|
|
9102
9049
|
const value = Reflect.get(target, key);
|
|
9103
|
-
if (typeof value ===
|
|
9050
|
+
if (typeof value === "function") {
|
|
9104
9051
|
return value.bind(target);
|
|
9105
9052
|
}
|
|
9106
9053
|
else {
|
|
@@ -9110,11 +9057,11 @@ class XHRProxyHandler {
|
|
|
9110
9057
|
}
|
|
9111
9058
|
set(target, key, value) {
|
|
9112
9059
|
switch (key) {
|
|
9113
|
-
case
|
|
9060
|
+
case "onreadystatechange":
|
|
9114
9061
|
return this.setOnReadyStateChange(target, key, value);
|
|
9115
|
-
case
|
|
9062
|
+
case "onabort":
|
|
9116
9063
|
return this.setOnAbort(target, key, value);
|
|
9117
|
-
case
|
|
9064
|
+
case "ontimeout":
|
|
9118
9065
|
return this.setOnTimeout(target, key, value);
|
|
9119
9066
|
// not tracked methods
|
|
9120
9067
|
}
|
|
@@ -9128,9 +9075,12 @@ class XHRProxyHandler {
|
|
|
9128
9075
|
this.item.endTime = performance.now();
|
|
9129
9076
|
this.item.duration = this.item.endTime - this.item.startTime;
|
|
9130
9077
|
this.updateItemByReadyState();
|
|
9131
|
-
|
|
9132
|
-
|
|
9133
|
-
|
|
9078
|
+
const rt = this.item.responseType || "";
|
|
9079
|
+
if (rt === "" || rt === "text" || rt === "json") {
|
|
9080
|
+
setTimeout(() => {
|
|
9081
|
+
this.item.response = getStringResponseByType(rt, this.XMLReq.response);
|
|
9082
|
+
}, 0);
|
|
9083
|
+
}
|
|
9134
9084
|
if (this.XMLReq.readyState === RequestState.DONE) {
|
|
9135
9085
|
const msg = this.item.getMessage();
|
|
9136
9086
|
if (msg) {
|
|
@@ -9140,7 +9090,7 @@ class XHRProxyHandler {
|
|
|
9140
9090
|
}
|
|
9141
9091
|
onAbort() {
|
|
9142
9092
|
this.item.cancelState = 1;
|
|
9143
|
-
this.item.statusText =
|
|
9093
|
+
this.item.statusText = "Abort";
|
|
9144
9094
|
const msg = this.item.getMessage();
|
|
9145
9095
|
if (msg) {
|
|
9146
9096
|
this.sendMessage(msg);
|
|
@@ -9148,27 +9098,28 @@ class XHRProxyHandler {
|
|
|
9148
9098
|
}
|
|
9149
9099
|
onTimeout() {
|
|
9150
9100
|
this.item.cancelState = 3;
|
|
9151
|
-
this.item.statusText =
|
|
9101
|
+
this.item.statusText = "Timeout";
|
|
9152
9102
|
const msg = this.item.getMessage();
|
|
9153
9103
|
if (msg) {
|
|
9154
9104
|
this.sendMessage(msg);
|
|
9155
9105
|
}
|
|
9156
9106
|
}
|
|
9157
9107
|
getOpen(target) {
|
|
9158
|
-
const targetFunction = Reflect.get(target,
|
|
9108
|
+
const targetFunction = Reflect.get(target, "open");
|
|
9159
9109
|
return (...args) => {
|
|
9160
9110
|
var _a, _b, _c;
|
|
9161
9111
|
const method = args[0];
|
|
9162
9112
|
const url = args[1];
|
|
9163
|
-
this.item.method = method ? method.toUpperCase() :
|
|
9164
|
-
this.item.url = ((_a = url.toString) === null || _a === void 0 ? void 0 : _a.call(url)) ||
|
|
9165
|
-
this.item.name =
|
|
9113
|
+
this.item.method = method ? method.toUpperCase() : "GET";
|
|
9114
|
+
this.item.url = ((_a = url.toString) === null || _a === void 0 ? void 0 : _a.call(url)) || "";
|
|
9115
|
+
this.item.name =
|
|
9116
|
+
(_c = (_b = this.item.url) === null || _b === void 0 ? void 0 : _b.replace(new RegExp("/*$"), "").split("/").pop()) !== null && _c !== void 0 ? _c : "";
|
|
9166
9117
|
this.item.getData = genGetDataByUrl(this.item.url, {});
|
|
9167
9118
|
return targetFunction.apply(target, args);
|
|
9168
9119
|
};
|
|
9169
9120
|
}
|
|
9170
9121
|
getSend(target) {
|
|
9171
|
-
const targetFunction = Reflect.get(target,
|
|
9122
|
+
const targetFunction = Reflect.get(target, "send");
|
|
9172
9123
|
return (...args) => {
|
|
9173
9124
|
const data = args[0];
|
|
9174
9125
|
this.item.requestData = genStringBody(data);
|
|
@@ -9176,7 +9127,7 @@ class XHRProxyHandler {
|
|
|
9176
9127
|
};
|
|
9177
9128
|
}
|
|
9178
9129
|
getSetRequestHeader(target) {
|
|
9179
|
-
const targetFunction = Reflect.get(target,
|
|
9130
|
+
const targetFunction = Reflect.get(target, "setRequestHeader");
|
|
9180
9131
|
return (...args) => {
|
|
9181
9132
|
if (!this.item.requestHeader) {
|
|
9182
9133
|
this.item.requestHeader = {};
|
|
@@ -9212,34 +9163,44 @@ class XHRProxyHandler {
|
|
|
9212
9163
|
case RequestState.UNSENT:
|
|
9213
9164
|
case RequestState.OPENED:
|
|
9214
9165
|
this.item.status = RequestState.UNSENT;
|
|
9215
|
-
this.item.statusText =
|
|
9166
|
+
this.item.statusText = "Pending";
|
|
9216
9167
|
if (!this.item.startTime) {
|
|
9217
9168
|
this.item.startTime = performance.now();
|
|
9218
9169
|
}
|
|
9219
9170
|
break;
|
|
9220
9171
|
case RequestState.HEADERS_RECEIVED:
|
|
9221
9172
|
this.item.status = this.XMLReq.status;
|
|
9222
|
-
this.item.statusText =
|
|
9173
|
+
this.item.statusText = "Loading";
|
|
9223
9174
|
this.item.header = {};
|
|
9224
9175
|
// eslint-disable-next-line no-case-declarations
|
|
9225
|
-
const header = this.XMLReq.getAllResponseHeaders() ||
|
|
9176
|
+
const header = this.XMLReq.getAllResponseHeaders() || "", headerArr = header.split("\n");
|
|
9226
9177
|
// extract plain text to key-value format
|
|
9227
9178
|
for (let i = 0; i < headerArr.length; i++) {
|
|
9228
9179
|
const line = headerArr[i];
|
|
9229
9180
|
if (!line) {
|
|
9230
9181
|
continue;
|
|
9231
9182
|
}
|
|
9232
|
-
const arr = line.split(
|
|
9183
|
+
const arr = line.split(": ");
|
|
9233
9184
|
const key = arr[0];
|
|
9234
|
-
this.item.header[key] = arr.slice(1).join(
|
|
9185
|
+
this.item.header[key] = arr.slice(1).join(": ");
|
|
9235
9186
|
}
|
|
9236
9187
|
break;
|
|
9237
9188
|
case RequestState.LOADING:
|
|
9238
9189
|
this.item.status = this.XMLReq.status;
|
|
9239
|
-
this.item.statusText =
|
|
9240
|
-
|
|
9241
|
-
|
|
9242
|
-
|
|
9190
|
+
this.item.statusText = "Loading";
|
|
9191
|
+
const response = this.XMLReq.response;
|
|
9192
|
+
if (response) {
|
|
9193
|
+
const respSize = typeof response === "string"
|
|
9194
|
+
? response.length
|
|
9195
|
+
: response instanceof ArrayBuffer
|
|
9196
|
+
? response.byteLength
|
|
9197
|
+
: typeof Blob !== "undefined" && response instanceof Blob
|
|
9198
|
+
? response.size
|
|
9199
|
+
: 0;
|
|
9200
|
+
if (respSize) {
|
|
9201
|
+
this.item.responseSize = respSize;
|
|
9202
|
+
this.item.responseSizeText = formatByteSize(this.item.responseSize);
|
|
9203
|
+
}
|
|
9243
9204
|
}
|
|
9244
9205
|
break;
|
|
9245
9206
|
case RequestState.DONE:
|
|
@@ -9248,16 +9209,30 @@ class XHRProxyHandler {
|
|
|
9248
9209
|
// show status code when request completed
|
|
9249
9210
|
this.item.statusText = String(this.item.status);
|
|
9250
9211
|
this.item.endTime = performance.now();
|
|
9251
|
-
this.item.duration =
|
|
9252
|
-
|
|
9253
|
-
|
|
9254
|
-
|
|
9255
|
-
|
|
9212
|
+
this.item.duration =
|
|
9213
|
+
this.item.endTime - (this.item.startTime || this.item.endTime);
|
|
9214
|
+
const resp = this.XMLReq.response;
|
|
9215
|
+
const respType = this.XMLReq.responseType || "";
|
|
9216
|
+
if (respType === "" || respType === "text" || respType === "json") {
|
|
9217
|
+
this.item.response = resp;
|
|
9218
|
+
}
|
|
9219
|
+
if (resp) {
|
|
9220
|
+
const respSize = typeof resp === "string"
|
|
9221
|
+
? resp.length
|
|
9222
|
+
: resp instanceof ArrayBuffer
|
|
9223
|
+
? resp.byteLength
|
|
9224
|
+
: typeof Blob !== "undefined" && resp instanceof Blob
|
|
9225
|
+
? resp.size
|
|
9226
|
+
: 0;
|
|
9227
|
+
if (respSize) {
|
|
9228
|
+
this.item.responseSize = respSize;
|
|
9229
|
+
this.item.responseSizeText = formatByteSize(respSize);
|
|
9230
|
+
}
|
|
9256
9231
|
}
|
|
9257
9232
|
break;
|
|
9258
9233
|
default:
|
|
9259
9234
|
this.item.status = this.XMLReq.status;
|
|
9260
|
-
this.item.statusText =
|
|
9235
|
+
this.item.statusText = "Unknown";
|
|
9261
9236
|
break;
|
|
9262
9237
|
}
|
|
9263
9238
|
}
|
|
@@ -9675,7 +9650,7 @@ class API {
|
|
|
9675
9650
|
this.signalStartIssue = (reason, missingApi) => {
|
|
9676
9651
|
const doNotTrack = this.checkDoNotTrack();
|
|
9677
9652
|
console.log("Tracker couldn't start due to:", JSON.stringify({
|
|
9678
|
-
trackerVersion: '16.4.
|
|
9653
|
+
trackerVersion: '16.4.10-beta.0',
|
|
9679
9654
|
projectKey: this.options.projectKey,
|
|
9680
9655
|
doNotTrack,
|
|
9681
9656
|
reason: missingApi.length ? `missing api: ${missingApi.join(',')}` : reason,
|