1.0.2 • Published 2 years ago

@apihero/interceptors-js v1.0.2

Weekly downloads
-
License
MIT
Repository
-
Last release
2 years ago

@apihero/interceptors-js

Low-level HTTP/HTTPS/fetch request interception library for Node.js and Fetch platforms

Motivation

This library was inspired by @mswjs/interceptors, but is not for mocking. Instead, this library allows requests to be intercepted and altered before they are sent, in a way that does not require an extra request fetching library.

Usage

npm install @apihero/interceptors-js

Fetch Intercepting

import { FetchInterceptor } from "@apihero/interceptors-js/lib/interceptors/fetch";

const interceptor = new FetchInterceptor();
interceptor.apply();

interceptor.on("request", (request) => {
  console.log(`request ${request.method}: ${request.url.href}`);
});

Modifying requests

Use request.requestWith() to modify a request before it is executed.

import { FetchInterceptor } from "@apihero/interceptors-js/lib/interceptors/fetch";

const interceptor = new FetchInterceptor();
interceptor.apply();

interceptor.on("request", (request) => {
  // Use a different url for the request, and override a header
  request.requestWith({
    url: new URL(request.url.pathname, "https://proxy.url"),
    headers: {
      "x-override": "this is a new header",
    },
  });
});

If you want to modify the host of a ClientRequest, make sure to also listen to the connect event and respond with the request.connectWith callback:

import { ClientRequestInterceptor } from "@apihero/interceptors-js/lib/interceptors/ClientRequest";

const interceptor = new ClientRequestInterceptor();
interceptor.apply();

interceptor.on("connect", (request) => {
  // Connect to a different host
  request.connectWith({
    url: new URL(request.url.pathname, "https://proxy.url"),
  });
});

interceptor.on("request", (request) => {
  // Also override a header
  request.requestWith({
    headers: {
      "x-override": "this is a new header",
    },
  });
});