# @paypal/paypalhttp

> A library for integrating with PayPalHttp.

Latest version **1.0.1** (published 2021-09-21) · MIT license · 0 weekly downloads

## Install

```sh
npm install @paypal/paypalhttp
pnpm add @paypal/paypalhttp
yarn add @paypal/paypalhttp
bun add @paypal/paypalhttp
```

## Health

**Score 23/100 (F)** — status: abandoned.

Positive: has types package; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.1 |
| Published | 2021-09-21 |
| First published | 2019-11-19 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | separate (@types/paypal__paypalhttp) |
| Module format | CommonJS |
| Node | >=4 |
| Dependencies | 0 |
| Unpacked size | 74 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 6 |
| Author | PayPal |
| Maintainers | karthickpp, hlahlou, sioked, westeezy, sdk-integrations-npm, frnuzzi, paypal-user, bluepnume, bladebarringer, braintree, rajarampadmanathan, joshbeam, bryanjenningz, zhillb, weihou, seavenly, tifzhou, rpalanikumar, songz, merlinpatt, jfurman, ravishekhar00, visheei94, gregjopa, mstuart, antre, mnicpt, elizabethmv, nbierdeman, shrkapoor, amyegan, chetanjk, shrutikapoor08, remotevision, dturgumbaev, rygilbert_paypal |
| Keywords | paypalhttp, payments |

## Links

- npm: https://www.npmjs.com/package/@paypal/paypalhttp
- Repository: https://github.com/paypal/paypalhttp_node
- Issues: https://github.com/paypal/paypalhttp_node/issues
- npm.io page: https://npm.io/package/@paypal/paypalhttp

## Recent versions

- 1.0.1 (latest) — 2021-09-21
- 1.0.0 — 2019-11-19

## README

## PayPal HttpClient

PayPalHttp is a generic HTTP Client.

In it's simplest form, an [`HttpClient`](lib/paypalhttp/http_client.js) exposes an `#execute` method which takes an `HttpRequest`, executes it against the domain described in an `Environment`, and returns a Promise.

### Environment

An [`Environment`](lib/paypalhttp/environment.js) describes a domain that hosts a REST API, against which an `HttpClient` will make requests. `Environment` is a simple class that contains one property, `baseUrl`.

```js
let env = new Environment('https://example.com');
```

### Requests

HTTP requests contain all the information needed to make an HTTP request against the REST API. Specifically, one request describes a path, a verb, any path/query/form parameters, headers, attached files for upload, and body data. In Javascript, an HttpRequest is simply an object literal with `path`, `verb`, and optionally, `requestBody`, and `headers` populated.

### Responses

HTTP responses contain information returned by a server in response to a request as described above. They are simple objects which contain a `statusCode`, `headers`, and a `result`, which represents any data returned by the server.

```js
let req = {
  path: "/path/to/resource",
  verb: "GET",
  headers: {
    "X-Custom-Header": "custom value"
  }
}

client.execute(req)
  .then((resp) => {
    let statusCode = resp.statusCode;
    let headers = resp.headers;
    let responseData = resp.result;
  });
```

### Injectors

Injectors are closures that can be used for executing arbitrary pre-flight logic, such as modifying a request or logging data. Injectors are attached to an `HttpClient` using the `#addInjector` method. They must take one argument (a request), and may return nothing, or a Promise.

The `HttpClient` executes its injectors in a first-in, first-out order, before each request.

```js
let client = new HttpClient(env);
client.addInjector((req) => {
  console.log(req);
});

client.addInjector((req) => {
  req.headers['Request-Id'] = 'abcd';
});

...
```

### Error Handling

The Promise returned by `HttpClient#execute` maybe be rejected if something went wrong during the course of execution. If the server returned a non-200 response, this error will be an object that contains a status code, headers, and any data that was returned for debugging.

```js
client.execute(req)
  .then((resp) => {
    let statusCode = resp.statusCode;
    let headers = resp.headers;
    let responseData = resp.result;
  })
  .catch((err) => {
    if (err.statusCode) {
      let statusCode = err.statusCode;
      let headers = err.headers;
      let message = err.message;
    } else {
      // Something else went wrong
      console.err(err);
    }
  });
```

### Serializer
(De)Serialization of request and response data is done by instances of [`Encoder`](lib/paypalhttp/encoder.js). PayPalHttp currently supports `json` encoding out of the box.

## License
PayPalHttp-Node is open source and available under the MIT license. See the [LICENSE](./LICENSE) file for more info.

## Contributing
Pull requests and issues are welcome. Please see [CONTRIBUTING.md](./CONTRIBUTING.md) for more details.

---
_Source: https://npm.io/package/@paypal/paypalhttp · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
