# B2C Partnership Token Service

B2c Partnership service provides a token to the users which is required to use both FT and Partner service. Each function in the partner service takes partner ID as one of the params, which makes it flexible to pass different Partner ID from the other services. If you only require B2c Partnership service API functionality, you can import the module separately to the main SDK.

For example:

```javascript
const { B2cPartnershipService } = require('n-membership-sdk');
const tokenService = new B2cPartnershipService(config);
```

## Table of Contents

* [Config](#config)
	* [Which key to use](#which-key-to-use)
* [Methods](#methods)
	* [hasFreeTokens](#hasFreeTokens)
	* [bookPartnershipToken](#bookPartnershipToken)
	* [assignPartnershipToken](#assignPartnershipToken)

## Config

* See common configuration options in the [README file](./README.doc)
* `membershipPartnershipsApiKey`

```javascript
const config = new ProductionConfiguration({
	membershipPartnershipsApiKey: 'secret',
});
```

### Which key to use

Do one of the following:

1. Check in Doppler for your app to see if a API key already exists. For next-subscribe it is `MEMBERSHIP_PARTNERSHIPS_API_KEY_PROD`
2. Request a new API key through this https://apigateway.in.ft.com/key-form/system Use `B2c Partnership service` for key policy.

## Methods

### `hasFreeTokens(partnerId: string)`

```javascript
const tokensAreAvailable = tokenService.hasFreeTokens(partnerId);
```
| Parameters | Required                                           | Type              | Example                              | Description                                                                                   |
| ---------- | -------------------------------------------------- | ----------------- | ------------------------------------ | --------------------------------------------------------------------------------------------- |
| partnerId     | Yes | String            | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | The partner's ID. |
**Returns**:
- boolean


### `bookPartnershipToken(partnerId: string)`

```js
const bookedToken = tokenService.bookPartnershipToken(partnerId);
```
| Parameters | Required                                           | Type              | Example                              | Description                                                                                   |
| ---------- | -------------------------------------------------- | ----------------- | ------------------------------------ | --------------------------------------------------------------------------------------------- |
| partnerId     | Yes | String            | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | The partner's ID. |

**Returns**:

```json
{ "token" : "ABC-DEF-GHI-JKL"}
```

### `assignPartnershipToken(partnerId: string, token: string, userId: string)`

```javascript
const redeemedToken = tokenService.assignPartnershipToken(partnerId, token, userId);
```

| Parameters | Required                                           | Type              | Example                              | Description                                                                                   |
| ---------- | -------------------------------------------------- | ----------------- | ------------------------------------ | --------------------------------------------------------------------------------------------- |
| partnerId     | Yes | String            | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | The partner's ID. |
| token      | Yes                                                | String |xxx-xxx-xxx-xxx                  | The booked token to redeem                                                                           |
| userId     | Yes | String            | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | The user's ID. This can be retrieved from [graphql.getUserDetails](GRAPHQL.md#getUserDetails) |


**Returns**:

-   Returns true if successfully assigned, false if not
