open-index/open-npm huggingface dataset:
npm package: @gr2m/http-interceptor
Description: Intercept and mock outgoing http/https requests
Author: Gregor Martynus
Latest version: 1.0.0

# `@gr2m/http-interceptor`

[![Test](https://github.com/gr2m/node-http-interceptor/actions/workflows/test.yml/badge.svg)](https://github.com/gr2m/node-http-interceptor/actions/workflows/test.yml)

> Intercept and mock outgoing http/https requests

## Install

```
npm install @gr2m/http-interceptor
```

## Usage

```js
import httpInterceptor from "@gr2m/http-interceptor";

httpInterceptor.start();
httpInterceptor.on("connect", (socket, options, bypass) => {
  // call bypass() to continue the unintercepted request
  if (options.host === "db.example.com") return bypass();
});

httpInterceptor.on("request", (request, response) => {
  response.end("Hello World!");
});
```

## API

`httpInterceptor` is a singleton API.

### `httpInterceptor.start()`

Hooks into the request life cycle and emits `connect` events for each request that connects to a server as well as `request` events for all intercepted requests.

### `httpInterceptor.stop()`

Stops intercepting. No `connect` or `request` events will be emitted.

### `httpInterceptor.addListener(event, listener)`

#### `connect` event

The `listener` callback is called with 3 arguments

- `socket`: the intercepted net or TLS socket
- `options`: socket options: `{port, /* host, localAddress, localPort, family, allowHalfOpen */}`
- `bypass`: a function to call to continue the unintercepted connection

#### `request` event

The `listener` callback is called with 2 arguments

- `request`: `Http.IncomingMessage`
- `response`: `Http.ServerResponse`

It's the same arguments as e.g. `http.createServer(listener)` receives.

### `httpInterceptor.removeListener(event, listener)`

Remove an event listener.

### `httpInterceptor.removeAllListeners(event)`

Removes all event listeners for the given event. Or when called without the `event` argument, remove all listeners for all events.

## How it works

`@gr2m/http-interceptor` is using [`@gr2m/net-interceptor`](https://github.com/gr2m/node-net-interceptor/#readme) to intercept TCP/TLS connections, and to permit to bypass the interception.

`@gr2m/http-interceptor` also hooks into `http.ClientRequest.prototype.onSocket` which is called in the `http.ClientRequest` constructor. Each time `http.ClientRequest` is instantiated with a socket, we check if the socket is intercepted and if so, emit the `request` event with a `request`/`response` pair for mocking.

## Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md)

## Credits

`@gr2m/http-interceptor` is built upon code and concepts from [moll/node-mitm](https://github.com/moll/node-mitm) by [Andri Möll](http://themoll.com). [Monday Calendar](https://mondayapp.com) supported that engineering work.

**[Gregor Martynus](https://github.com/gr2m)** removed all `http(s)`-related code and made its focus on intercepting connections that use the lower-level `net` and `tls` modules.

## License

[LGPL](LICENSE.md)
npm package: @gr2m/pika-plugin-bundle-web
Description: A @pika/pack plugin: Adds a bundled Web distribution to your package, built & optimized to run in most web browsers (and bundlers).
Latest version: 0.3.16-patch-issue-46-6

# @pika/plugin-bundle-web

> A [@pika/pack](https://github.com/pikapkg/pack) build plugin.
> Adds a bundled Web distribution to your package, built & optimized to run in most web browsers (and bundlers). Useful for hosting on a CDN like UNPKG and/or when package dependencies aren't written to run natively on the web.


## Install

```sh
# npm:
npm install @pika/plugin-bundle-web --save-dev
# yarn:
yarn add @pika/plugin-bundle-web --dev
```


## Usage

```js
{
  "name": "example-package-json",
  "version": "1.0.0",
  "@pika/pack": {
    "pipeline": [
      ["@pika/plugin-standard-pkg"],
      ["@pika/plugin-build-web"],
      ["@pika/plugin-bundle-web", { /* options (optional) */ }]
    ]
  }
}
```

For more information about @pika/pack & help getting started, [check out the main project repo](https://github.com/pikapkg/pack).

## Options

- `"browser"` (Default: `false`): If true, this plugin will respect the "browser" field in bundled dependencies over the usual "main" Node-specific entrypoint. This may be required for some dependencies, but may cause problems with others. YMMV.


## Result

1. Adds a web bundled distribution to your built package: `dist-web/index.bundled.js`
  1. ES Module (ESM) Syntax
  1. Transpiled to run on all browsers where ES Module syntax is supported.
  1. All dependencies inlined into this file.

Note that this does not add or modify the "module" entrypoint to your package.json. Bundles should continue to use the "module" entrypoint, while this build can be loaded directly in the browser (from a CDN like UNPKG).