feat(tracker): allow network sanitizer to return null (skipping msg) (#2009)

This commit is contained in:
Delirium 2024-03-28 12:29:08 +01:00 committed by GitHub
parent ed6e09ec6d
commit 19de9067e0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 36 additions and 15 deletions

View file

@ -1,3 +1,7 @@
# 12.0.6
- allow network sanitizer to return null (will ignore network req)
# 12.0.5
- patch for img.ts srcset detector

View file

@ -1,7 +1,7 @@
{
"name": "@openreplay/tracker",
"description": "The OpenReplay tracker main package",
"version": "12.0.5",
"version": "12.0.6",
"keywords": [
"logging",
"replay"

View file

@ -21,7 +21,7 @@ export class BeaconProxyHandler<T extends typeof navigator.sendBeacon> implement
constructor(
private readonly ignoredHeaders: boolean | string[],
private readonly setSessionTokenHeader: (cb: (name: string, value: string) => void) => void,
private readonly sanitize: (data: RequestResponseData) => RequestResponseData,
private readonly sanitize: (data: RequestResponseData) => RequestResponseData | null,
private readonly sendMessage: (item: NetworkRequest) => void,
private readonly isServiceUrl: (url: string) => boolean,
) {}
@ -66,7 +66,10 @@ export class BeaconProxyHandler<T extends typeof navigator.sendBeacon> implement
item.statusText = 'Unknown'
}
this.sendMessage(item.getMessage())
const msg = item.getMessage()
if (msg) {
this.sendMessage(msg)
}
return isSuccess
}
}
@ -81,7 +84,7 @@ export default class BeaconProxy {
public static create(
ignoredHeaders: boolean | string[],
setSessionTokenHeader: (cb: (name: string, value: string) => void) => void,
sanitize: (data: RequestResponseData) => RequestResponseData,
sanitize: (data: RequestResponseData) => RequestResponseData | null,
sendMessage: (item: NetworkRequest) => void,
isServiceUrl: (url: string) => boolean,
) {

View file

@ -122,7 +122,7 @@ export class FetchProxyHandler<T extends typeof fetch> implements ProxyHandler<T
constructor(
private readonly ignoredHeaders: boolean | string[],
private readonly setSessionTokenHeader: (cb: (name: string, value: string) => void) => void,
private readonly sanitize: (data: RequestResponseData) => RequestResponseData,
private readonly sanitize: (data: RequestResponseData) => RequestResponseData | null,
private readonly sendMessage: (item: NetworkRequest) => void,
private readonly isServiceUrl: (url: string) => boolean,
private readonly tokenUrlMatcher?: (url: string) => boolean,
@ -269,7 +269,10 @@ export class FetchProxyHandler<T extends typeof fetch> implements ProxyHandler<T
item.responseSizeText = formatByteSize(item.responseSize)
item.response = getStringResponseByType(item.responseType, responseValue)
this.sendMessage(item.getMessage())
const msg = item.getMessage()
if (msg) {
this.sendMessage(msg)
}
},
)
}
@ -301,7 +304,7 @@ export default class FetchProxy {
public static create(
ignoredHeaders: boolean | string[],
setSessionTokenHeader: (cb: (name: string, value: string) => void) => void,
sanitize: (data: RequestResponseData) => RequestResponseData,
sanitize: (data: RequestResponseData) => RequestResponseData | null,
sendMessage: (item: NetworkRequest) => void,
isServiceUrl: (url: string) => boolean,
tokenUrlMatcher?: (url: string) => boolean,

View file

@ -12,7 +12,7 @@ export default function setProxy(
context: typeof globalThis,
ignoredHeaders: boolean | string[],
setSessionTokenHeader: (cb: (name: string, value: string) => void) => void,
sanitize: (data: RequestResponseData) => RequestResponseData,
sanitize: (data: RequestResponseData) => RequestResponseData | null,
sendMessage: (message: NetworkRequest) => void,
isServiceUrl: (url: string) => boolean,
tokenUrlMatcher?: (url: string) => boolean,

View file

@ -44,7 +44,7 @@ export default class NetworkMessage {
constructor(
private readonly ignoredHeaders: boolean | string[] = [],
private readonly setSessionTokenHeader: (cb: (name: string, value: string) => void) => void,
private readonly sanitize: (data: RequestResponseData) => RequestResponseData,
private readonly sanitize: (data: RequestResponseData) => RequestResponseData | null,
) {}
getMessage() {
@ -63,6 +63,8 @@ export default class NetworkMessage {
response,
})
if (!messageInfo) return
return NetworkRequest(
this.requestType,
messageInfo.method,

View file

@ -19,7 +19,7 @@ export class XHRProxyHandler<T extends XMLHttpRequest> implements ProxyHandler<T
XMLReq: XMLHttpRequest,
private readonly ignoredHeaders: boolean | string[],
private readonly setSessionTokenHeader: (cb: (name: string, value: string) => void) => void,
private readonly sanitize: (data: RequestResponseData) => RequestResponseData,
private readonly sanitize: (data: RequestResponseData) => RequestResponseData | null,
private readonly sendMessage: (message: NetworkRequest) => void,
private readonly isServiceUrl: (url: string) => boolean,
private readonly tokenUrlMatcher?: (url: string) => boolean,
@ -91,7 +91,10 @@ export class XHRProxyHandler<T extends XMLHttpRequest> implements ProxyHandler<T
}, 0)
if (this.XMLReq.readyState === RequestState.DONE) {
this.sendMessage(this.item.getMessage())
const msg = this.item.getMessage()
if (msg) {
this.sendMessage(msg)
}
}
}
@ -99,14 +102,20 @@ export class XHRProxyHandler<T extends XMLHttpRequest> implements ProxyHandler<T
this.item.cancelState = 1
this.item.statusText = 'Abort'
this.sendMessage(this.item.getMessage())
const msg = this.item.getMessage()
if (msg) {
this.sendMessage(msg)
}
}
public onTimeout() {
this.item.cancelState = 3
this.item.statusText = 'Timeout'
this.sendMessage(this.item.getMessage())
const msg = this.item.getMessage()
if (msg) {
this.sendMessage(msg)
}
}
protected getOpen(target: T) {
@ -229,7 +238,7 @@ export default class XHRProxy {
public static create(
ignoredHeaders: boolean | string[],
setSessionTokenHeader: (cb: (name: string, value: string) => void) => void,
sanitize: (data: RequestResponseData) => RequestResponseData,
sanitize: (data: RequestResponseData) => RequestResponseData | null,
sendMessage: (data: NetworkRequest) => void,
isServiceUrl: (url: string) => boolean,
tokenUrlMatcher?: (url: string) => boolean,

View file

@ -45,7 +45,7 @@ function strMethod(method?: string) {
return typeof method === 'string' ? method.toUpperCase() : 'GET'
}
type Sanitizer = (data: RequestResponseData) => RequestResponseData
type Sanitizer = (data: RequestResponseData) => RequestResponseData | null
export interface Options {
sessionTokenHeader: string | boolean