jwt-autorefresh-fix

0.2.13 • Public • Published

jwt-autorefresh-fix

Extremely lightweight and tested universal refresh token scheduler. Ensures access tokens are always refreshed in advance of their expiration automatically and integrates with any third party api / persistence architecture.

NPM

Install

npm i -S jwt-autorefresh-fix

How to use

import autorefresh from 'jwt-autorefresh-fix'
import { onAuthorize, onDeauthorize } from './events'
 
/** Function that returns a promise which will resolve to a simple jwt access_token (you handle the persistence mechanism) */
const refresh = () => {
  const init =  { method: 'POST'
                , headers: { 'Content-Type': `application/x-www-form-urlencoded` }
                , body: `refresh_token=${localStorage.refresh_token}&grant_type=refresh_token`
                }
  return fetch('/oauth/token', init)
    .then(res => res.json())
    .then(({ token_type, access_token, expires_in, refresh_token }) => {
      localStorage.access_token = access_token
      localStorage.refresh_token = refresh_token
      return access_token
    })
}
 
/** You supply a leadSeconds number or function that generates a number of seconds that the refresh should occur prior to the access token expiring */
const leadSeconds = () => {
  /** Generate random additional seconds (up to 30 in this case) to append to the lead time to ensure multiple clients dont schedule simultaneous refresh */
  const jitter = Math.floor(Math.random() * 30)
 
  /** Schedule autorefresh to occur 60 to 90 seconds prior to token expiration */
  return 60 + jitter
}
 
let start = autorefresh({ refresh, leadSeconds })
let cancel = () => {}
onAuthorize(access_token => {
  cancel()
  cancel = start(access_token)
})
 
onDeauthorize(() => cancel())

let 'delayFunc' to undefined will use inner default function:

const delayFunc = ({exp, iat, nbf, lead}) => {
  return exp - iat - lead;
}

or you can use delayFunc to calculate the final delay time yourself

// delayFunc return milliSeconds
const delayFunc = ({exp, iat, nbf, lead}) => {
  return (exp - iat) / 2 - lead;
}
let start = autorefresh({ refresh, leadSeconds, delayFunc })
...

Package Sidebar

Install

npm i jwt-autorefresh-fix

Weekly Downloads

1

Version

0.2.13

License

MIT

Unpacked Size

23.8 kB

Total Files

7

Last publish

Collaborators

  • huangzhenjie