packages feed

async-refresh-tokens-0.2.0.0: README.md

# async-refresh-tokens [![Hackage version](https://img.shields.io/hackage/v/async-refresh-tokens.svg?label=Hackage)](https://hackage.haskell.org/package/async-refresh-tokens) [![Stackage version](https://www.stackage.org/package/async-refresh-tokens/badge/lts?label=Stackage)](https://www.stackage.org/package/async-refresh-tokens) [![Build Status](https://travis-ci.org/mtesseract/async-refresh-tokens.svg?branch=master)](https://travis-ci.org/mtesseract/async-refresh-tokens)

### About

This is Haskell library built on top of the async-refresh package
implementing the logic for refreshing of expiring access tokens.

### Usage

- Create new token types.

- Make the tokens be instances of the `IsToken` type classes by
  defining the `tokenScopes` method and (optionally) `tokenName` (a
  human readable label for this token).

- Use `newEmptyTokenStore` to create a new token stores (token stores
  are basically `TVar`s containing the tokens wrapped in `Either
  SomeException`).

- Create a new configuration by adjusting `defaultTokenConf` using the
  functions `tokenConfAddRequest` and `tokenConfSetFactor`. The
  function `tokenConfAddRequest` expects values of type `RequestToken`
  — these values encapsulate the token stores together with a
  token-refreshing action.

- Use `newTokenRefresher` to initiate token refreshing for each
  registered token refreshing request.

- To use the current token, extract it from the `TVar` using
  `readTVar` (and pattern matching on `Right`).

### Example

```
{-# LANGUAGE OverloadedStrings   #-}

data TokenFoo

instance IsToken TokenFoo where
  tokenScopes _ = ["foo.read", "foo.write"]

createTokenStoreFoo :: LoggingT IO (TokenStore TokenFoo)
createTokenStoreFoo = do
  tokenFoo <- newEmptyTokenStore (Proxy :: Proxy TokenFoo)
  let conf = defaultTokenConf
             & tokenConfAddRequest (RequestToken tokenFoo actionFoo)
  _ <- newTokenRefresher conf
  return tokenFoo

  where actionFoo :: (MonadIO m, IsToken t) => m (RefreshResult (Token t))
        actionFoo =
          return $ RefreshResult (Token "secret-foo-token") Nothing
```