# nestjs-paypal-payouts

NestJS injectable https://github.com/paypal/Payouts-NodeJS-SDK module and client.

## Installation

```js
yarn add nestjs-paypal-payouts
```

## Configuration
`some-paypal.module.ts`

```js
@Module({
  imports: [
    NestjsPaypalPayoutsModule.register({
      environment: process.env.PAYPAL_ENVIRONMENT as 'sandbox' | 'live',
      clientId: process.env.PAYPAL_CLIENT_ID,
      clientSecret: process.env.PAYPAL_CLIENT_SECRET,
    }),
  ],
})
```

_You may also use registerAsync._

## Usage
`some-paypal.service.ts`

```js
constructor(
    @InjectPaypalClient()
    private readonly paypalClient,
    @InjectPaypal()
    private readonly paypal,
  ) {}

async payout() {
  const request = this.paypal.payouts.PayoutsPostRequest();

  request.requestBody({
    sender_batch_header: {
      recipient_type: "EMAIL",
      email_message: "SDK payouts test txn",
      note: "Enjoy your Payout!!",
      sender_batch_id: "Test_sdk_1",
      email_subject: "This is a test transaction from SDK"
    },
    items: [{
      note: "Your 5$ Payout!",
      amount: {
        currency: "USD",
        value: "1.00"
      },
      receiver: "payout-sdk-1@paypal.com",
      sender_item_id: "Test_txn_1"
    }]
  });

  let response = await this.paypalClient.execute(request);
  console.log(`Response: ${JSON.stringify(response)}`);
  // If call returns body in response, you can get the deserialized version from the result attribute of the response.
  console.log(`Payouts Create Response: ${JSON.stringify(response.result)}`);
}
```

## Inspiration

[nestjs-stripe](https://github.com/dhaspden/nestjs-stripe) by dhaspden  
[this post](https://dev.to/nestjs/advanced-nestjs-how-to-build-completely-dynamic-nestjs-modules-1370) and others by John Biundo

<h1 align="center"></h1>

<div align="center">
  <a href="http://nestjs.com/" target="_blank">
    <img src="https://nestjs.com/img/logo_text.svg" width="150" alt="Nest Logo" />
  </a>
</div>

<h3 align="center">NestjsPaypalPayouts -- generated by @nestjsplus/dyn-schematics</h3>

<div align="center">
  <a href="https://nestjs.com" target="_blank">
    <img src="https://img.shields.io/badge/built%20with-NestJs-red.svg" alt="Built with NestJS">
  </a>
  <a href="https://github.com/nestjsplus/dyn-schematics" target="_blank">
    <img src="https://img.shields.io/badge/Built%20with-%40nestjsplus%2Fdyn--schematics-brightgreen" alt="Built with @nestjsplus/dyn-schematics">
  </a>
</div>

This dynamic module was generated with [Nest Dynamic Package Generator Schematics](https://github.com/nestjsplus/dyn-schematics). You can read more about using the generator [here](https://github.com/nestjsplus/dyn-schematics).

### Installation

To install this generated project:

```bash
npm install
```

(or yarn equivalent)

### Running

If you selected `yes` for the question `Generate a testing client?`, a small testing module was automatically generated
called NestjsPaypalPayoutsClientModule. You can test that the template was properly generated by running

```bash
npm run start:dev
```

Then connect to [http://localhost:3000](http://localhost:3000).

### Customizing

The files in the project have comments that should help guide you.

You can also refer to [this article](https://dev.to/nestjs/advanced-nestjs-how-to-build-completely-dynamic-nestjs-modules-1370) for details on the concepts behind this module pattern.

You can read more about using the generator [here](https://github.com/nestjsplus/dyn-schematics).

### About @nestjsplus/dyn-schematics

[Nest Dynamic Package Generator Schematics](https://github.com/nestjsplus/dyn-schematics) generates a starter template for building NestJS dynamic packages. It uses the `@nestjs/cli` core package, and provides customized schematics for generating modular NestJS applications. See [here](https://github.com/nestjsplus/dyn-schematics) for the full set of available schematics, and documentation.
