npm package: @keyro/kl-sdk
Description: Keyro Login SDK provides access to every KL public features out of the box.
Author: Keyro
Latest version: 1.0.6

# Keyro Login SDK
Keyro Login SDK provides access to every KL public features out of the box.

## Install

```bash
yarn add '@keyro/kl-sdk'
```

## Missing anything ?
We are still on a freshy-alpha release. As a keyro team member, if you need something [lemme know](https://github.com/orgs/KeyroLearning/projects/4)

## Usage

```javascript
import KLSDK from '@keyro/kl-sdk'

/**
 * Create an instance of the SDK and customize it with the following. Default configuration is hard-coded and 
 * rely on the definition of `production` option. Overriding both keyroLoginUrl and accessManagerUrl makes 
 * `production` value negligible.
 *    * `production` : use it to change default configuration.
 *    * `keyroLoginUrl` : override the default url
 *    * `accessManagerUrl` : override the default url
 */
const KL = KLSDK({
  production: true, // Default: false
  keyroLoginUrl: 'https://login-dev.keyro.fr',
  accessManagerUrl: 'https://api.login.keyro.fr'
})

/**
 * Takes you to the login page depending on your instance config.
 * @param {String} origin Url you want to be redirected after login
 */
KL.signin(`${window.location.origin}/auth/callback`)

/**
 * Takes you to the signout page depending on your instance config.
 * @param {String} origin Url you want to be redirected after login
 */
KL.signout(`${window.location.origin}/byebye`)

/**
 * Authentication expire after one hour. 15 minutes before expiration,
 * `needRefresh` will encourage a refresh.
 * 
 * Determine if you need to refresh your tokens
 * @returns {Boolean}
 */
KL.needRefresh(store.session)

/**
 * After a successful signin, Keyro Login will redirect to the origin
 * you provide in `signin` method with a bunch of url encoded params.
 * Using function `signinCallback` allow you to turn it into a proper session entity.
 * 
 * Take a queryParams object and format it into a session entity
 * @returns {Object} Session
 */
KL.signinCallback(this.$route.query)

/**
 * Invalidate all tokens of your session causing your device to
 * disconnet from all Keyro apps.
 * @param {Object} session A session entity
 */
KL.globalSignout(store.session)

/**
 * Entrust your session to be valid against the OAUTH Authorization Provider
 * Of Keyro Login.
 * @param {Object} session A session entity
 * @returns {Boolean}
 */
KL.isSessionValid(store.session)

/**
 * While your refresh token hasn't expired, you can call this method to get a new
 * AccessToken and a new IdentityToken.
 * 
 * Provide an updated Session entity with a new Access and identity tokens.
 * @param {Object} session a Session entity
 * @returns {Object} Session Entity
 */
KL.refreshSession(session)

/**
 * A good way to ensure control over your credentials data is to entrust them as a Session entity.
 * @param {Object} data representing Session entity
 * @returns {Object} Session Entity
 */
KL.makeSession(data)
```

## The session entity

To be a valid session entity a JSON structure must be of the following structure :

```json
{
  "identityToken": "(Mandatory) string",
  "accessToken": "(Mandatory) string",
  "refreshToken": "(Mandatory) string",
  "expiresIn": "(At least one) seconds integer",
  "expiresAt": "(At least one) date string"
}
```

If you pass an `expiresIn` value, kl-sdk will parse it as an `expiredAt` for you.