diff --git a/tracker/tracker/CHANGELOG.md b/tracker/tracker/CHANGELOG.md index 716feb549..f421e83bb 100644 --- a/tracker/tracker/CHANGELOG.md +++ b/tracker/tracker/CHANGELOG.md @@ -1,3 +1,7 @@ +# 9.0.6 + +- added `tokenUrlMatcher` option to network settings, allowing to ingest session token header to custom allowed urls + # 9.0.5 - same fixes but for fetch proxy diff --git a/tracker/tracker/package.json b/tracker/tracker/package.json index 3348f387b..c63dd2b6a 100644 --- a/tracker/tracker/package.json +++ b/tracker/tracker/package.json @@ -1,7 +1,7 @@ { "name": "@openreplay/tracker", "description": "The OpenReplay tracker main package", - "version": "9.0.5", + "version": "9.0.6", "keywords": [ "logging", "replay" diff --git a/tracker/tracker/src/main/modules/Network/fetchProxy.ts b/tracker/tracker/src/main/modules/Network/fetchProxy.ts index adb9c785d..e16e62277 100644 --- a/tracker/tracker/src/main/modules/Network/fetchProxy.ts +++ b/tracker/tracker/src/main/modules/Network/fetchProxy.ts @@ -125,7 +125,7 @@ export class FetchProxyHandler implements ProxyHandler RequestResponseData, private readonly sendMessage: (item: NetworkRequest) => void, private readonly isServiceUrl: (url: string) => boolean, - private readonly tokenUrls: string[], + private readonly tokenUrlMatcher?: (url: string) => boolean, ) {} public apply(target: T, _: typeof window, argsList: [RequestInfo | URL, RequestInit]) { @@ -145,11 +145,8 @@ export class FetchProxyHandler implements ProxyHandler { - if (this.tokenUrls.length > 0) { - const isWhitelisted = this.tokenUrls.some((url) => { - return item.url.includes(url) - }) - if (!isWhitelisted) { + if (this.tokenUrlMatcher !== undefined) { + if (!this.tokenUrlMatcher(item.url)) { return } } @@ -302,7 +299,7 @@ export default class FetchProxy { sanitize: (data: RequestResponseData) => RequestResponseData, sendMessage: (item: NetworkRequest) => void, isServiceUrl: (url: string) => boolean, - tokenUrls: string[], + tokenUrlMatcher?: (url: string) => boolean, ) { return new Proxy( fetch, @@ -312,7 +309,7 @@ export default class FetchProxy { sanitize, sendMessage, isServiceUrl, - tokenUrls, + tokenUrlMatcher, ), ) } diff --git a/tracker/tracker/src/main/modules/Network/index.ts b/tracker/tracker/src/main/modules/Network/index.ts index 6f1faad31..d1a41169e 100644 --- a/tracker/tracker/src/main/modules/Network/index.ts +++ b/tracker/tracker/src/main/modules/Network/index.ts @@ -14,7 +14,7 @@ export default function setProxy( sanitize: (data: RequestResponseData) => RequestResponseData, sendMessage: (message: NetworkRequest) => void, isServiceUrl: (url: string) => boolean, - tokenUrls: string[], + tokenUrlMatcher?: (url: string) => boolean, ) { if (context.XMLHttpRequest) { context.XMLHttpRequest = XHRProxy.create( @@ -23,7 +23,7 @@ export default function setProxy( sanitize, sendMessage, isServiceUrl, - tokenUrls, + tokenUrlMatcher, ) } else { getWarning('XMLHttpRequest') @@ -35,7 +35,7 @@ export default function setProxy( sanitize, sendMessage, isServiceUrl, - tokenUrls, + tokenUrlMatcher, ) } else { getWarning('fetch') diff --git a/tracker/tracker/src/main/modules/Network/xhrProxy.ts b/tracker/tracker/src/main/modules/Network/xhrProxy.ts index 565a5d370..02f7af041 100644 --- a/tracker/tracker/src/main/modules/Network/xhrProxy.ts +++ b/tracker/tracker/src/main/modules/Network/xhrProxy.ts @@ -22,7 +22,7 @@ export class XHRProxyHandler implements ProxyHandler RequestResponseData, private readonly sendMessage: (message: NetworkRequest) => void, private readonly isServiceUrl: (url: string) => boolean, - private readonly tokenUrls: string[], + private readonly tokenUrlMatcher?: (url: string) => boolean, ) { this.XMLReq = XMLReq this.XMLReq.onreadystatechange = () => { @@ -44,11 +44,8 @@ export class XHRProxyHandler implements ProxyHandler { - if (this.tokenUrls.length > 0) { - const isWhitelisted = this.tokenUrls.some((url) => { - return this.item.url.includes(url) - }) - if (!isWhitelisted) { + if (this.tokenUrlMatcher !== undefined) { + if (!this.tokenUrlMatcher(this.item.url)) { return } } @@ -237,7 +234,7 @@ export default class XHRProxy { sanitize: (data: RequestResponseData) => RequestResponseData, sendMessage: (data: NetworkRequest) => void, isServiceUrl: (url: string) => boolean, - tokenUrls: string[], + tokenUrlMatcher?: (url: string) => boolean, ) { return new Proxy(XMLHttpRequest, { construct(original: any) { @@ -251,7 +248,7 @@ export default class XHRProxy { sanitize, sendMessage, isServiceUrl, - tokenUrls, + tokenUrlMatcher, ), ) }, diff --git a/tracker/tracker/src/main/modules/network.ts b/tracker/tracker/src/main/modules/network.ts index f968c1f86..1dba7667f 100644 --- a/tracker/tracker/src/main/modules/network.ts +++ b/tracker/tracker/src/main/modules/network.ts @@ -56,7 +56,7 @@ export interface Options { sanitizer?: Sanitizer axiosInstances?: Array useProxy?: boolean - tokenUrls?: Array + tokenUrlMatcher?: (url: string) => boolean } export default function (app: App, opts: Partial = {}) { @@ -69,7 +69,6 @@ export default function (app: App, opts: Partial = {}) { captureInIframes: true, axiosInstances: undefined, useProxy: false, - tokenUrls: [], }, opts, ) @@ -138,7 +137,7 @@ export default function (app: App, opts: Partial = {}) { sanitize, (message) => app.send(message), (url) => app.isServiceURL(url), - options.tokenUrls as string[], + options.tokenUrlMatcher, ) } /* ====== Fetch ====== */