Account client
import { Account, IdP as Provider } from 'account'
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
Account
supports two modes: id
& label
.
These modes are pretty the same. Main difference is that in id
mode Account
uses audience
suffix at any request.
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:
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 */
})
access_token
will be automatically refreshed if applicable.
account.tokenData()
.then((_: /*: TokenData */) => { /* do something */ })
account.revokeRefreshToken()
.then((_: /*: TokenData */) => { /* do something */ })
const tokenData /*: TokenData */ = {}
account
.store(tokenData)
.then((_ /*: TokenData */) => { /* do something */ })
account
.load()
.then((_ /*: TokenData */) => { /* do something */ })
account
.remove()
.then((_ /*: TokenData */) => { /* do something */ })
TokenProvider
is used to provide an interface to access the valid token on each request. Valid refresh_token
is needed to initialize TokenProvider
properly.
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 */})