Skip to content

A tiny library to sign and verify JWT tokens using Rust bindings for pure performance.

Notifications You must be signed in to change notification settings

dan-online/jwtrust

Repository files navigation

npm version

JWTRust

A tiny library to sign and verify JWT tokens using Rust bindings for pure performance.

JWTRust Benchmark commencing, runs set at 100000 and 16 payload length.

 Benchmarking complete!
┌──────────────┬──────────────┬───────────────────┬───────────┐
   (index)     Average (ms)  Operations (op/s)  Total (s) 
├──────────────┼──────────────┼───────────────────┼───────────┤
   JWTRust       '0.010'         '104,020'       '0.96'   
   fast-jwt      '0.018'         '55,056'        '1.82'   
 jsonwebtoken    '0.022'         '45,488'        '2.20'   
└──────────────┴──────────────┴───────────────────┴───────────┘

Benchmark run on Ryzen 3600X (6 cores, 12 threads) with 32GB RAM

Table of contents

Getting Started

Installation

To install and set up the library, run:

$ yarn add jwtrust

Or if you still for some reason prefer npm:

$ npm i jwtrust

API

construct

const { JWTR } = require('jwtrust');

const jwtrust = new JWTR('secret');

sign

const jwtrust = new JWTR('secret');

const token = jwtrust.sign({ hello: 'world' });

Supported options and result fields for the sign method are listed below.

Parameters

payload

Type Default value
unknown required

The payload to sign. This is JSON serialized before signing.

options

Option Default value Description
exp 7 days Expiry date in UTC timestamp for example: Date.now() / 1000 + (60 * 60)
iat (Date.now() / 1000) Issued at time in UTC format

To aid expiry date, a helper is exported named convertTime:

const { convertTime } = require('jwtrust');

const exp = convertTime('1y');
const exp = convertTime('6h');
const exp = convertTime('2s');

Example:

const token = jwtrust.sign({ hello: 'world' }, { exp: convertTime('1y'), iat: Date.now() });

verify

const jwtrust = new JWTR('secret');

const payload = jwtrust.verify(token);

Supported options and result fields for the verify method are listed below.

Parameters

token

Type Default value
string required

The token to verify and decode.

Typescript

This library is written in Typescript and includes type definitions. Here is an example that will be typed correctly:

import { JWTR, convertTime } from 'jwtrust';

type Payload = { hello: string }

const jwtrust = new JWTR<Payload>('secret');

const token = jwtrust.sign({ hello: 'world' });

const decoded: Payload = jwtrust.verify(token);

Development

Prerequisites

This project requires NodeJS (version 16 or later) and yarn. Node and NPM are really easy to install. To make sure you have them available on your machine, try running the following command.

$ yarn -v && node -v && rustc --version
3.3.0
v16.18.0
rustc 1.65.0

Building the entire package

Requirement: Rust is installed on your machine.

$ yarn build

This task will create a distribution version of the project inside your local dist/ folder and output a binary in native/

Running benchmarks

$ yarn benchmark

Contributing

  1. Fork it!
  2. Create your feature branch: git checkout -b my-new-feature
  3. Add your changes: git add .
  4. Commit your changes: git commit -am 'Add some feature'
  5. Push to the branch: git push origin my-new-feature
  6. Submit a pull request 😎

Built With

  • Neon
  • VSCode
  • TypeScript
  • Rust

Versioning

We use SemVer for versioning. For the versions available, see the tags on this repository.

Authors

License

MIT License © DanCodes