@openreplay/tracker 14.0.7 → 14.0.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 (39) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/bun.lockb +0 -0
  3. package/cjs/app/index.js +5 -1
  4. package/cjs/index.js +1 -1
  5. package/cjs/modules/network.js +4 -2
  6. package/lib/app/index.js +5 -1
  7. package/lib/common/tsconfig.tsbuildinfo +1 -1
  8. package/lib/index.js +1 -1
  9. package/lib/modules/network.js +4 -2
  10. package/package.json +2 -1
  11. package/tsconfig-base.json +2 -2
  12. package/cjs/modules/Network/beaconProxy.d.ts +0 -16
  13. package/cjs/modules/Network/beaconProxy.js +0 -87
  14. package/cjs/modules/Network/fetchProxy.d.ts +0 -34
  15. package/cjs/modules/Network/fetchProxy.js +0 -309
  16. package/cjs/modules/Network/index.d.ts +0 -3
  17. package/cjs/modules/Network/index.js +0 -28
  18. package/cjs/modules/Network/networkMessage.d.ts +0 -49
  19. package/cjs/modules/Network/networkMessage.js +0 -87
  20. package/cjs/modules/Network/types.d.ts +0 -13
  21. package/cjs/modules/Network/types.js +0 -3
  22. package/cjs/modules/Network/utils.d.ts +0 -11
  23. package/cjs/modules/Network/utils.js +0 -216
  24. package/cjs/modules/Network/xhrProxy.d.ts +0 -39
  25. package/cjs/modules/Network/xhrProxy.js +0 -249
  26. package/lib/modules/Network/beaconProxy.d.ts +0 -16
  27. package/lib/modules/Network/beaconProxy.js +0 -79
  28. package/lib/modules/Network/fetchProxy.d.ts +0 -34
  29. package/lib/modules/Network/fetchProxy.js +0 -280
  30. package/lib/modules/Network/index.d.ts +0 -3
  31. package/lib/modules/Network/index.js +0 -22
  32. package/lib/modules/Network/networkMessage.d.ts +0 -49
  33. package/lib/modules/Network/networkMessage.js +0 -83
  34. package/lib/modules/Network/types.d.ts +0 -13
  35. package/lib/modules/Network/types.js +0 -2
  36. package/lib/modules/Network/utils.d.ts +0 -11
  37. package/lib/modules/Network/utils.js +0 -204
  38. package/lib/modules/Network/xhrProxy.d.ts +0 -39
  39. package/lib/modules/Network/xhrProxy.js +0 -221
@@ -1,39 +0,0 @@
1
- /**
2
- * I took inspiration in few stack exchange posts
3
- * and Tencent vConsole library (MIT)
4
- * by wrapping the XMLHttpRequest object in a Proxy
5
- * we can intercept the network requests
6
- * in not-so-hacky way
7
- * */
8
- import NetworkMessage from './networkMessage.js';
9
- import { RequestResponseData } from './types.js';
10
- import { NetworkRequest } from '../../common/messages.gen.js';
11
- export declare class XHRProxyHandler<T extends XMLHttpRequest> implements ProxyHandler<T> {
12
- private readonly ignoredHeaders;
13
- private readonly setSessionTokenHeader;
14
- private readonly sanitize;
15
- private readonly sendMessage;
16
- private readonly isServiceUrl;
17
- private readonly tokenUrlMatcher?;
18
- XMLReq: XMLHttpRequest;
19
- item: NetworkMessage;
20
- constructor(XMLReq: XMLHttpRequest, ignoredHeaders: boolean | string[], setSessionTokenHeader: (cb: (name: string, value: string) => void) => void, sanitize: (data: RequestResponseData) => RequestResponseData | null, sendMessage: (message: NetworkRequest) => void, isServiceUrl: (url: string) => boolean, tokenUrlMatcher?: ((url: string) => boolean) | undefined);
21
- get(target: T, key: string): any;
22
- set(target: T, key: string, value: (args: any[]) => any): boolean;
23
- onReadyStateChange(): void;
24
- onAbort(): void;
25
- onTimeout(): void;
26
- protected getOpen(target: T): (...args: any[]) => any;
27
- protected getSend(target: T): (...args: any[]) => any;
28
- protected getSetRequestHeader(target: T): (...args: any[]) => any;
29
- protected setOnReadyStateChange(target: T, key: string, orscFunction: (args: any[]) => any): boolean;
30
- protected setOnAbort(target: T, key: string, oaFunction: (args: any[]) => any): boolean;
31
- protected setOnTimeout(target: T, key: string, otFunction: (args: any[]) => any): boolean;
32
- /**
33
- * Update item's properties according to readyState.
34
- */
35
- protected updateItemByReadyState(): void;
36
- }
37
- export default class XHRProxy {
38
- static create(ignoredHeaders: boolean | string[], setSessionTokenHeader: (cb: (name: string, value: string) => void) => void, sanitize: (data: RequestResponseData) => RequestResponseData | null, sendMessage: (data: NetworkRequest) => void, isServiceUrl: (url: string) => boolean, tokenUrlMatcher?: (url: string) => boolean): any;
39
- }
@@ -1,221 +0,0 @@
1
- /**
2
- * I took inspiration in few stack exchange posts
3
- * and Tencent vConsole library (MIT)
4
- * by wrapping the XMLHttpRequest object in a Proxy
5
- * we can intercept the network requests
6
- * in not-so-hacky way
7
- * */
8
- import NetworkMessage, { RequestState } from './networkMessage.js';
9
- import { genGetDataByUrl, formatByteSize, genStringBody, getStringResponseByType } from './utils.js';
10
- export class XHRProxyHandler {
11
- constructor(XMLReq, ignoredHeaders, setSessionTokenHeader, sanitize, sendMessage, isServiceUrl, tokenUrlMatcher) {
12
- this.ignoredHeaders = ignoredHeaders;
13
- this.setSessionTokenHeader = setSessionTokenHeader;
14
- this.sanitize = sanitize;
15
- this.sendMessage = sendMessage;
16
- this.isServiceUrl = isServiceUrl;
17
- this.tokenUrlMatcher = tokenUrlMatcher;
18
- this.XMLReq = XMLReq;
19
- this.XMLReq.onreadystatechange = () => {
20
- this.onReadyStateChange();
21
- };
22
- this.XMLReq.onabort = () => {
23
- this.onAbort();
24
- };
25
- this.XMLReq.ontimeout = () => {
26
- this.onTimeout();
27
- };
28
- this.item = new NetworkMessage(ignoredHeaders, setSessionTokenHeader, sanitize);
29
- this.item.requestType = 'xhr';
30
- }
31
- get(target, key) {
32
- switch (key) {
33
- case 'open':
34
- return this.getOpen(target);
35
- case 'send':
36
- this.setSessionTokenHeader((name, value) => {
37
- if (this.tokenUrlMatcher !== undefined) {
38
- if (!this.tokenUrlMatcher(this.item.url)) {
39
- return;
40
- }
41
- }
42
- target.setRequestHeader(name, value);
43
- });
44
- return this.getSend(target);
45
- case 'setRequestHeader':
46
- return this.getSetRequestHeader(target);
47
- default:
48
- // eslint-disable-next-line no-case-declarations
49
- const value = Reflect.get(target, key);
50
- if (typeof value === 'function') {
51
- return value.bind(target);
52
- }
53
- else {
54
- return value;
55
- }
56
- }
57
- }
58
- set(target, key, value) {
59
- switch (key) {
60
- case 'onreadystatechange':
61
- return this.setOnReadyStateChange(target, key, value);
62
- case 'onabort':
63
- return this.setOnAbort(target, key, value);
64
- case 'ontimeout':
65
- return this.setOnTimeout(target, key, value);
66
- default:
67
- // not tracked methods
68
- }
69
- return Reflect.set(target, key, value);
70
- }
71
- onReadyStateChange() {
72
- if (this.item.url && this.isServiceUrl(this.item.url))
73
- return;
74
- this.item.readyState = this.XMLReq.readyState;
75
- this.item.responseType = this.XMLReq.responseType;
76
- this.item.endTime = performance.now();
77
- this.item.duration = this.item.endTime - this.item.startTime;
78
- this.updateItemByReadyState();
79
- setTimeout(() => {
80
- this.item.response = getStringResponseByType(this.item.responseType, this.item.response);
81
- }, 0);
82
- if (this.XMLReq.readyState === RequestState.DONE) {
83
- const msg = this.item.getMessage();
84
- if (msg) {
85
- this.sendMessage(msg);
86
- }
87
- }
88
- }
89
- onAbort() {
90
- this.item.cancelState = 1;
91
- this.item.statusText = 'Abort';
92
- const msg = this.item.getMessage();
93
- if (msg) {
94
- this.sendMessage(msg);
95
- }
96
- }
97
- onTimeout() {
98
- this.item.cancelState = 3;
99
- this.item.statusText = 'Timeout';
100
- const msg = this.item.getMessage();
101
- if (msg) {
102
- this.sendMessage(msg);
103
- }
104
- }
105
- getOpen(target) {
106
- const targetFunction = Reflect.get(target, 'open');
107
- return (...args) => {
108
- const method = args[0];
109
- const url = args[1];
110
- this.item.method = method ? method.toUpperCase() : 'GET';
111
- this.item.url = url.toString?.() || '';
112
- this.item.name = this.item.url?.replace(new RegExp('/*$'), '').split('/').pop() ?? '';
113
- this.item.getData = genGetDataByUrl(this.item.url, {});
114
- return targetFunction.apply(target, args);
115
- };
116
- }
117
- getSend(target) {
118
- const targetFunction = Reflect.get(target, 'send');
119
- return (...args) => {
120
- const data = args[0];
121
- this.item.requestData = genStringBody(data);
122
- return targetFunction.apply(target, args);
123
- };
124
- }
125
- getSetRequestHeader(target) {
126
- const targetFunction = Reflect.get(target, 'setRequestHeader');
127
- return (...args) => {
128
- if (!this.item.requestHeader) {
129
- this.item.requestHeader = {};
130
- }
131
- // @ts-ignore
132
- this.item.requestHeader[args[0]] = args[1];
133
- return targetFunction.apply(target, args);
134
- };
135
- }
136
- setOnReadyStateChange(target, key, orscFunction) {
137
- return Reflect.set(target, key, (...args) => {
138
- this.onReadyStateChange();
139
- orscFunction?.apply(target, args);
140
- });
141
- }
142
- setOnAbort(target, key, oaFunction) {
143
- return Reflect.set(target, key, (...args) => {
144
- this.onAbort();
145
- oaFunction.apply(target, args);
146
- });
147
- }
148
- setOnTimeout(target, key, otFunction) {
149
- return Reflect.set(target, key, (...args) => {
150
- this.onTimeout();
151
- otFunction.apply(target, args);
152
- });
153
- }
154
- /**
155
- * Update item's properties according to readyState.
156
- */
157
- updateItemByReadyState() {
158
- switch (this.XMLReq.readyState) {
159
- case RequestState.UNSENT:
160
- case RequestState.OPENED:
161
- this.item.status = RequestState.UNSENT;
162
- this.item.statusText = 'Pending';
163
- if (!this.item.startTime) {
164
- this.item.startTime = performance.now();
165
- }
166
- break;
167
- case RequestState.HEADERS_RECEIVED:
168
- this.item.status = this.XMLReq.status;
169
- this.item.statusText = 'Loading';
170
- this.item.header = {};
171
- // eslint-disable-next-line no-case-declarations
172
- const header = this.XMLReq.getAllResponseHeaders() || '', headerArr = header.split('\n');
173
- // extract plain text to key-value format
174
- for (let i = 0; i < headerArr.length; i++) {
175
- const line = headerArr[i];
176
- if (!line) {
177
- continue;
178
- }
179
- const arr = line.split(': ');
180
- const key = arr[0];
181
- this.item.header[key] = arr.slice(1).join(': ');
182
- }
183
- break;
184
- case RequestState.LOADING:
185
- this.item.status = this.XMLReq.status;
186
- this.item.statusText = 'Loading';
187
- if (!!this.XMLReq.response && this.XMLReq.response.length) {
188
- this.item.responseSize = this.XMLReq.response.length;
189
- this.item.responseSizeText = formatByteSize(this.item.responseSize);
190
- }
191
- break;
192
- case RequestState.DONE:
193
- // `XMLReq.abort()` will change `status` from 200 to 0, so use previous value in this case
194
- this.item.status = this.XMLReq.status || this.item.status || 0;
195
- // show status code when request completed
196
- this.item.statusText = String(this.item.status);
197
- this.item.endTime = performance.now();
198
- this.item.duration = this.item.endTime - (this.item.startTime || this.item.endTime);
199
- this.item.response = this.XMLReq.response;
200
- if (!!this.XMLReq.response && this.XMLReq.response.length) {
201
- this.item.responseSize = this.XMLReq.response.length;
202
- this.item.responseSizeText = formatByteSize(this.item.responseSize);
203
- }
204
- break;
205
- default:
206
- this.item.status = this.XMLReq.status;
207
- this.item.statusText = 'Unknown';
208
- break;
209
- }
210
- }
211
- }
212
- export default class XHRProxy {
213
- static create(ignoredHeaders, setSessionTokenHeader, sanitize, sendMessage, isServiceUrl, tokenUrlMatcher) {
214
- return new Proxy(XMLHttpRequest, {
215
- construct(original) {
216
- const XMLReq = new original();
217
- return new Proxy(XMLReq, new XHRProxyHandler(XMLReq, ignoredHeaders, setSessionTokenHeader, sanitize, sendMessage, isServiceUrl, tokenUrlMatcher));
218
- },
219
- });
220
- }
221
- }