# n-user-api-client 

A client to access the [User API on the FT Membership Platform](https://developer.ft.com/portal/docs-membership-platform-api)

[![npm version](https://badge.fury.io/js/%40financial-times%2Fn-user-api-client.svg)](https://badge.fury.io/js/%40financial-times%2Fn-user-api-client)

[![CircleCI](https://circleci.com/gh/Financial-Times/n-user-api-client.svg?style=shield)](https://circleci.com/gh/Financial-Times/n-user-api-client)
[![Dependencies](https://david-dm.org/Financial-Times/n-user-api-client.svg)](https://david-dm.org/Financial-Times/n-user-api-client)
[![devDependencies](https://david-dm.org/Financial-Times/n-user-api-client/dev-status.svg)](https://david-dm.org/Financial-Times/n-user-api-client?type=dev)

## Installation

```sh
npm i @financial-times/n-user-api-client --save
```

## Usage example

```js
import { getUserIdAndSessionData } from '@financial-times/n-user-api-client';

await getUserIdAndSessionData({
    session: 'abc123',
    apiHost: process.env['MEMBERSHIP_API_HOST_PROD'],
    apiKey: process.env['MEMBERSHIP_API_KEY_PROD']
})

```

## Public methods

### getUserIdAndSessionData

#### Arguments

session (string) - a valid user session ID. If stale (> 30 minutes old) then the returned user data will be redacted, some fields including address will be null

apiHost, apiKey - the consumer app should pass these in, based on Vault env vars

#### Return value

A user ID (string)

### loginUser
#### Arguments

email (string)

password (string)

remoteIp (string) - the IP of the user

countryCode (string) - the country the user is located in

userAgent (string) - the User-Agent header of the user

apiHost, apiKey - the consumer app should pass these in, based on Vault env vars

appName - the name of the app using `n-user-api-client`


#### Return value

[fresh session data](https://developer.ft.com/portal/docs-membership-platform-api-post-login) will be returned.


## Build

The module is written in typescript - compile to the dist/ folder with:

```sh
make build
```

## Releasing

To release a new version of the client, draft a new release in Github. There's no need to update package.json.
