Intercept outgoing network TCP/TLS connections
npm install @gr2m/net-interceptor
import netInterceptor from "@gr2m/net-interceptor";
netInterceptor.start();
netInterceptor.on("connect", (socket, options, bypass) => {
// call bypass() to continue the unintercepted connection
if (options.host === "db.example.com") return bypass();
});
netInterceptor.on("connection", (socket) => {
// do something with the socket
socket.write("Hello from @gr2m/net-interceptor!");
});
netInterceptor
is a singleton API.
Hooks into the request life cycle and emits connect
events for each socket that connects to a server as well as connection
events for all intercepted sockets.
Stops interceptiong. No connect
or connection
events will be emitted.
The listener
callback is called with 3 arguments
socket
: the intercepted net or TLS socketoptions
: socket options:{port, /* host, localAddress, localPort, family, allowHalfOpen */}
bypass
: a function to call to continue the unintercepted connection
The listener
callback is called with 2 arguments
socket
: the response net or TLS socketoptions
: socket options:{port, /* host, localAddress, localPort, family, allowHalfOpen */}
Remove an event listener.
Removes all event listeners for the given event. Or when called without the event
argument, remove all listeners for all events.
import { kRemote } from "@gr2m/net-interceptor";
requestSocket[kRemote]; // response socket
kRemote
is a symbol that can be used to access the response socket from the request socket when handling intercepted requests.
@gr2m/http-interceptor
- Intercept and mock outgoing http/https requests@gr2m/http-recorder
- Library agnostic in-process recording of http(s) requests and responses
Once started, netInterceptor
hooks itself into the net.connect
and the tls.connect
methods
When a socket is intercepted, we
- we create a mock net/TLS socket
- emit the
connect
event with the mock socket - if
bypass()
was called in theconnect
event listener, we let the socket continue unintercepted - if
bypass()
was not called- we create another mock socket for the response and emit the "connection" event
- we emit
connect
on both mock sockets
and then emit a record
event with the request
, response
, requestBody
and responseBody
options.
See CONTRIBUTING.md
@gr2m/net-interceptor
is built upon code and concepts from moll/node-mitm by Andri Möll. Monday Calendar supported that engineering work.
Gregor Martynus removed all http(s)
-related code and made its focus on intercepting connections that use the lower-level net
and tls
modules.