Rusty JWT is a Rust-based, optionally cached JSON Web Token (JWT) implementation for Node.js, designed for efficient signing and verification of JWTs. It utilizes the @node-rs/jsonwebtoken
library, providing Rust-level performance, and includes optional caching via an LRU cache for frequently used JWTs.
- Rust-based performance: Uses the
@node-rs/jsonwebtoken
library for faster token processing. - LRU Caching: Optional LRU cache for JWT verification results, enhancing performance for repeated verifications.
- Flexible Algorithms: Supports various signing algorithms (e.g., RS256, HS256).
- TypeScript Support: Written in TypeScript for strong type safety.
- Custom Expiration: Allows setting custom expiration times for tokens.
Install the package using npm:
npm install rusty-jwt
Or, using yarn:
yarn add rusty-jwt
Here's a simple example of how to use the Rusty JWT library:
import { RustJWT, JWTPayload } from 'rusty-jwt';
const jwt = new RustJWT({
algorithm: 'RS256',
privateKey: '<your_private_key>',
publicKey: '<your_public_key>',
expiresIn: '1h',
cache: true,
cacheTTL: 300000, // 5 minutes
cacheSize: 1000
});
// Signing a token
const payload: JWTPayload = { userId: 123, role: 'admin' };
const token = jwt.sign(payload);
console.log('Generated Token:', token);
// Verifying a token
try {
const verifiedPayload = jwt.verify(token);
console.log('Verified Payload:', verifiedPayload);
} catch (error) {
console.error('Verification Failed:', error.message);
}
The RustJWT
class accepts the following configuration options:
Option | Type | Default | Description |
---|---|---|---|
algorithm |
Algorithm |
Required | JWT signing algorithm (e.g., 'RS256', 'HS256'). |
privateKey |
string \ Uint8Array |
Required | Private key for signing the JWT. |
publicKey |
string \ Uint8Array |
Required | Public key for verifying the JWT. |
expiresIn |
string \ number |
'1d' | Token expiration time (e.g., '1h', '2d', or a number in ms). |
cache |
boolean |
false | Enables or disables the LRU cache for verification results. |
cacheTTL |
number |
0 | Cache TTL in milliseconds. |
cacheSize |
number |
1000 | Maximum number of entries in the LRU cache. |
The Rusty JWT library supports optional caching using an LRU cache. Caching can improve verification performance by storing the results of recently verified tokens. When caching is enabled, tokens will be cached based on their exp
claim and the configured cacheTTL
.
To enable caching, set the cache
option to true
when initializing the RustJWT
instance. You can also set the cache size and TTL using the cacheSize
and cacheTTL
options.
Creates a new instance of the RustJWT class.
- Parameters:
options
(object): Configuration options for the JWT instance (see Configuration Options).
Signs a given payload and returns the JWT as a string.
- Parameters:
payload
(object): The payload to sign.
Verifies a given JWT and returns the decoded payload.
-
Parameters:
token
(string): The JWT to verify.
-
Throws:
Error
if verification fails or the token is invalid.
Contributions are welcome! Please follow these steps to contribute:
- Fork the repository.
- Create a new branch (
git checkout -b feature/your-feature
). - Make your changes.
- Commit your changes (
git commit -m 'Add your feature'
). - Push to the branch (
git push origin feature/your-feature
). - Create a Pull Request.
This project is licensed under the Apache-2.0 License. See the LICENSE file for details.
For more information, visit the GitHub Repository.