[BTAPI-68] Present a real browser TLS and HTTP/2 fingerprint to Wealthsimple #79
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feature/BTAPI-68"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ticket
BTAPI-68 Present a real browser TLS and HTTP/2 fingerprint to Wealthsimple
Summary
WsTransportseam behindwsFetch(server/lib/wealthsimple/request/transport), so the browser-identity header policy (BTAPI-66) is untouched and the transport is swappable — the default remains undici'sfetch.WS_IMPERSONATE=true(shipped enabled in.env.example) routes requests through acurl-impersonateChrome binary instead, presenting a real browser TLS ClientHello (GREASE in cipher/extension lists) and negotiating HTTP/2 — verified by a test that parses the actual handshake bytes, and live againsttls.peet.ws.-H @filerather than argv, keeping the live bearer token and session cookies out of/proc/<pid>/cmdline.lexiforest/curl-impersonate(the actively-maintained fork) at a checksummed release, currently tracking Chrome 150 — a 1-version gap to the request headers' Chromium 151, down from lwthiker's abandoned Chrome 116 build.fetchwith a one-time warning if the binary is missing, so a broken/absent binary degrades gracefully rather than breaking sync.server/lib/wealthsimple/CLAUDE.mddocuments the transport, the flag, and how to detect/fix a stale impersonation profile going forward.Follow-up (not in this PR)
USER_AGENT/sec-ch-uapinned to Chromium 151 inrequest/index.ts) has no refresh mechanism and will itself go stale independently of the transport — noted on the ticket, tracked separately.