xhr-sniffer
v1.1.0
Published
๐จ Sniff HTTP requests making by XHR in the browser or HTTP module in Node.js
Maintainers
Readme
xhr-sniffer
๐จ Sniff HTTP requests made by XMLHttpRequest / Fetch API in the browser or the http/https module in Node.js
Preview ๐
https://piecioshka.github.io/xhr-sniffer/demo/browser/
Every intercepted request is logged to the console in a single, consistent line:
[2026-06-29 13:25:41.812] XMLHttpRequest GET OK https://example.org/ [128ms]
[2026-06-29 13:25:42.004] Fetch POST OK https://example.org/api [73ms]
[2026-06-29 13:25:42.310] http.request GET OK / [54ms]Each line contains:
- a timestamp (
YYYY-MM-DD HH:mm:ss.SSS), - the source label (
XMLHttpRequest,Fetchorhttp.request), - the HTTP method (padded to 6 characters),
- the response status text,
- the request URL (or path in Node.js),
- the request duration in milliseconds.
Features
- โ
Logs
XMLHttpRequestcalls in the DevTools console - โ
Logs
Fetch APIcalls in the DevTools console - โ
Logs
http/httpsmodule calls in Node.js - โ Zero runtime dependencies
- โ
Reversible in Node.js โ
install()/uninstall()
How it works
The library monkey-patches the relevant network primitives so that every request flows through a logging wrapper before the original implementation runs.
| Environment | Patched APIs |
| ----------- | ------------------------------------------------------------------ |
| Browser | XMLHttpRequest.prototype.open / send, window.fetch |
| Node.js | https.request (the http module routes through https as well) |
The original behaviour is preserved โ the wrappers only observe and log, then delegate to the native call.
Installation
npm install xhr-snifferUsage
Sniff requests in Node.js
Calling install() patches https.request. Use uninstall() to restore the
original implementation when you no longer need the logs.
const xhrSniffer = require('xhr-sniffer');
xhrSniffer.install();
// ...perform your HTTP requests...
xhrSniffer.uninstall();Example with the native https module:
const xhrSniffer = require('xhr-sniffer');
const { request } = require('https');
xhrSniffer.install();
request({ hostname: 'example.org', path: '/', method: 'GET' }, (res) => {
res.on('data', () => {});
}).end();[!NOTE] The Node.js entry point patches
https.request. Plainhttp://requests made through thehttpmodule are not intercepted โ usehttps(see theWARNINGnote insrc/server.js).
Sniff requests in the browser
Build the browser bundle (or use the one published in the package) and attach it
in the <head> so it patches the network APIs before your application runs:
<script src="xhr-sniffer/dist/xhr-sniffer.browser.js"></script>After that, any XMLHttpRequest or fetch() call is logged automatically. The
browser build patches the globals on load โ there is no install() step.
API
Node.js
| Method | Description |
| ------------- | ------------------------------------------------------------ |
| install() | Patches https.request and starts logging requests. |
| uninstall() | Restores the original https.request, stopping the logging. |
Browser
The browser bundle patches XMLHttpRequest and window.fetch automatically on
load; it exposes no public API.
Development
npm install # install dependencies
npm run build # bundle the browser build into dist/ via esbuild
npm test # run the unit tests (vitest)
npm run coverage # run the tests with a coverage report
npm run lint # lint src/ and demo/ with eslintThe demos under demo/ are good entry points:
demo/browser/โ openindex.htmlin a browser.demo/server/native.jsโhttpsmodule example.demo/server/lib-fetch.jsโnode-fetchexample.
License
The MIT License @ 2026
