You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 03efc8f
Browse filesBrowse the repository at this point in the historyBrowse files
feat(e2e): run the browser tier in a real Chromium and the OTel bridge end to end
Two harnesses that did not exist, and three defects only they could find.
browser.e2e.ts boots @bugsee/browser inside a real headless Chromium via Playwright,
serves the page from its OWN origin so the upload is genuinely cross-origin, and
asserts the bundle that arrives: console, a real fetch, a real window.onerror crash
with a structured crash.json, a real rrweb replay, and real IndexedDB persistence.
Every browser-tier suite until now ran under jsdom — replay.e2e.ts names the gap in
its own header.
opentelemetry.e2e.ts runs a real @opentelemetry/sdk-trace-base provider in a real
node process with Bugsee's SpanProcessor registered on it, and asserts both
directions on the wire: the consumed trace as a Bugsee transaction (root + parented
child) and the same trace teed to an OTLP endpoint.
What they found:
- The mock collector sent no CORS headers and answered no preflight, so no harness
could ever drive the SDK from a real browser. The real collector must send them;
the browser SDK is always cross-origin with the page.
- assertNoSecrets scanned raw bytes and was therefore BLIND to replay.bin, which is
gzipped. Measured, not theorised: with masking off, a typed password sat in
plaintext inside replay.bin and the shared secret scan passed it. It now inflates
gzip entries. Its one binary test used an uncompressed replay.bin — a property the
shipped file never has.
- The performance uploader delivered ONLY on its 30s interval. client.flush() drained
reports but not transactions, and stop() dropped them, so any process ending between
ticks — a serverless invocation, a CLI, a test, a closing tab — uploaded no APM data
at all. The umbrella now composes the extension drain into both.
The mock collector also had no /v2/performance/transactions route, so every APM batch
in every previous e2e 404'd into onError unseen.
0 commit comments