Summary
The interceptor captures all request and response headers verbatim, including security-sensitive values like Authorization: Bearer <token>, Cookie: session=..., and X-Api-Key: .... These are stored in NetworkRequestStorage, emitted to JavaScript, and rendered in the floating monitor UI — visible to anyone viewing the screen or reading device logs.
Proposed solution
Default redact list
The following headers are masked as [redacted] by default:
Authorization
Cookie
Set-Cookie
X-Api-Key
X-Auth-Token
X-Access-Token
Proxy-Authorization
Configuration via NetworkMonitorProvider
<NetworkMonitorProvider
redactHeaders={['Authorization', 'X-Api-Key']} // override default list
additionalRedactHeaders={['X-Custom-Secret']} // extend default list
revealRedactedHeaders={false} // disallow tap-to-reveal (default: true)
>
Native side — redact at capture time
Apply redaction inside NetworkToolsInterceptor so no sensitive value ever reaches the JS store or event emitter:
private fun captureHeaders(request: Request, redactList: Set<String>): Map<String, String> {
return request.headers.toMap().mapValues { (key, value) ->
if (redactList.any { it.equals(key, ignoreCase = true) }) "[redacted]" else value
}
}
Detail view UX
- Redacted values shown as
[redacted] in grey italic
- Tap to reveal in-memory only (never re-stored) when
revealRedactedHeaders = true
Acceptance criteria
Summary
The interceptor captures all request and response headers verbatim, including security-sensitive values like
Authorization: Bearer <token>,Cookie: session=..., andX-Api-Key: .... These are stored inNetworkRequestStorage, emitted to JavaScript, and rendered in the floating monitor UI — visible to anyone viewing the screen or reading device logs.Proposed solution
Default redact list
The following headers are masked as
[redacted]by default:Configuration via
NetworkMonitorProviderNative side — redact at capture time
Apply redaction inside
NetworkToolsInterceptorso no sensitive value ever reaches the JS store or event emitter:Detail view UX
[redacted]in grey italicrevealRedactedHeaders = trueAcceptance criteria
NetworkMonitorProvideracceptsredactHeadersandadditionalRedactHeadersprops[redacted]with tap-to-reveal toggleAuthorizationheader → stored value is[redacted]redactHeadersoverrides defaults correctly