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
To install and set up the library, run:
$ yarn add jwtrust
Or if you still for some reason prefer npm:
$ npm i jwtrust
const { JWTR } = require('jwtrust');
const jwtrust = new JWTR('secret');
const jwtrust = new JWTR('secret');
const token = jwtrust.sign({ hello: 'world' });
Supported options and result fields for the sign
method are listed below.
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() });
const jwtrust = new JWTR('secret');
const payload = jwtrust.verify(token);
Supported options and result fields for the verify
method are listed below.
token
Type | Default value |
---|---|
string | required |
The token to verify and decode.
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);
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
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/
$ yarn benchmark
- Fork it!
- Create your feature branch:
git checkout -b my-new-feature
- Add your changes:
git add .
- Commit your changes:
git commit -am 'Add some feature'
- Push to the branch:
git push origin my-new-feature
- Submit a pull request 😎
- Neon
- VSCode
- TypeScript
- Rust
We use SemVer for versioning. For the versions available, see the tags on this repository.
- DanCodes - @dan-online - [email protected]
MIT License © DanCodes