Skip to content

nfroidure/jwt-service

Repository files navigation

jwt-service

A simple wrapper for a simpler JWT surface API

GitHub license

This wrapper is directly usable with Knifecycle.

Overriding

Let's say you wanna create a sub-service of this one with custom inputs, for say, refresh tokens in a Whook project, here is how you would do:

import initJWT, { JWTServiceConfig } from 'jwt_service';
import { inject } from 'knifecycle';

export type RefreshJWTServiceConfig = {
  ENV: JWTServiceConfig['ENV'];
  REFRESH_JWT_SECRET_ENV_NAME: JWTServiceConfig['JWT_SECRET_ENV_NAME'];
  REFRESH_JWT: JWTServiceConfig['JWT'];
};

export default inject(
  [
    '?JWT_SECRET_ENV_NAME>REFRESH_JWT_SECRET_ENV_NAME',
    'JWT>REFRESH_JWT',
    '?ENV',
    '?log',
    '?time',
  ],
  initJWT,
);

API

Functions

initJWT(services)Promise.<JWTService>

Instantiate the JWT service

Typedefs

JWTService

initJWT(services) ⇒ Promise.<JWTService>

Instantiate the JWT service

Kind: global function
Returns: Promise.<JWTService> - A promise of the jwt service

Param Type Description
services Object The services to inject
[services.JWT_SECRET_ENV_NAME] function The environment variable name in which to pick-up the JWT secret
[services.ENV] Object An environment object
services.JWT function The JWT service configuration object
[services.log] function A logging function
[services.time] function A function returning the current timestamp

Example

import initJWTService from 'jwt-service';

const jwt = await initJWTService({
  JWT: {
    secret: 'secret',
    duration: '2d',
    tolerance: '2h',
    algorithms: ['HS256'],
  },
  log: console.log.bind(console),
  time: Date.now.bind(Date),
});

const token = await jwt.sign({ my: 'payload' });

JWTService

Kind: global typedef

JWTService.sign(payload, [algorithm]) ⇒ Promise.<JWTSignResult>

Sign the given payload

Kind: static method of JWTService
Returns: Promise.<JWTSignResult> - A promise to be resolved with the signed token.

Param Type Description
payload Object The payload to sign
[algorithm] String The signing algorithm

Example

const token = await jwt.sign({ my: 'payload' });

JWTService.verify([token]) ⇒ Promise.<Object>

Verify and decode the given token

Kind: static method of JWTService
Returns: Promise.<Object> - A promise to be resolved with the token payload.

Param Type Description
[token] String The token to decode

Example

const payload = await jwt.verify('my.jwt.token');

Authors

License

MIT