@netology-group/account
Version:
account client
114 lines (81 loc) • 2.76 kB
Markdown
Account client
[](https://www.jsdelivr.com/package/npm/@netology-group/account)


## How to use
### Import module
```javascript
import { Account, IdP as Provider } from 'account'
```
### Initialize
```javascript
const config = {
label: '<account_label>'
}
const provider = new Provider({
endpoint: 'http://domain.name'
})
// You can write your own provider or use default IdP provider
const account = new Account(config, provider, window.localStorage)
// You can bypass any storage provider which implements [Provider](./src/identity-provider.js.flow#14) interface
```
### Modes
`Account` supports two modes: `id` & `label`.
These modes are pretty the same. Main difference is that in `id` mode `Account` [uses `audience`](./test/account/account.test.js#L105-L131) suffix at any request.
#### Clarify label
`id` & `label` modes require a label to be known. But you actually may not.
There is special `fetchLabel` method which allows to request actual `label` for the account.
It uses `me` placeholer for the request's URL. For instance:
```javascript
Account.fetchLabel(
{ refresh_token: '<token>' },
new IdP(/* idp config */),
/* here you may use your own placeholder. `me` by default */
).then(({ id: acc_label }) => {
/* do stuff here */
})
```
#### Request access token
- `access_token` will be automatically refreshed if applicable.
```javascript
account.tokenData()
.then((_: /*: TokenData */) => { /* do something */ })
```
#### Revoke refresh token
```javascript
account.revokeRefreshToken()
.then((_: /*: TokenData */) => { /* do something */ })
```
#### Store token
```javascript
const tokenData /*: TokenData */ = {}
account
.store(tokenData)
.then((_ /*: TokenData */) => { /* do something */ })
```
#### Load token
```javascript
account
.load()
.then((_ /*: TokenData */) => { /* do something */ })
```
#### Remove token
```javascript
account
.remove()
.then((_ /*: TokenData */) => { /* do something */ })
```
## Utilities
### TokenProvider
`TokenProvider` is used to provide an interface to access the valid token on each request. Valid `refresh_token` is needed to initialize `TokenProvider` properly.
```javascript
const { Account, TokenProvider } = Account
const account = new Account(/* proper configuration */)
let provider = new TokenProvider({ refresh_token: '<refresh_token>' }, account)
// or
provider = new TokenProvider({ refresh_token: '<refresh_token>' })
provider
.iEngine(account)
.initialize()
provider.token().then(access_token => {/* do smth */})
```