bs-jsonwebtoken
A small library for interacting with the jsonwebtoken npm package.
Status
The package is in an extremely early state however there's really only 3 functions you want, sign
, decode
, and verify
, and the bindings for those functions are present and should work as they would in a javascript project. I want to provide better types for the actual options for decode
and verify
later but the options record for sign
should allow you to do everything you would in javascript land.
Example
open JsonWebToken;
open Json_encode;
// emptyOptions is provided to allow you to set only the options you care about
let signingOptions = Some({ ...emptyOptions, algorithm: HS256, notBefore: "2 days"});
// allows for you to provide a string, buffer, jsonewebtoken secret object
let secret = `string("secret");
type testPayload = {
foo: string
};
let encodeTestPayload = (payload: testPayload) => {
object_([("foo", string(payload.foo))]);
};
// it's expected that you will json encode your payload before passing it in to sign
// I recommend using @glennsl/bs-json to do your json encoding as I have here
let testPayload = { foo: "bar"};
let payload = `json(encodeTestPayload(testPayload));
let jwtToken = sign(~secret, ~options, payload);
// Verify the token with your secret and recieve the json typed token
// if your token uses a public/private key pair this will also take the public key
// results from both verify and decode require you to json decode,
// again @glennsl/bs-json can handle this.
let payloadFromVerify = verify(jwtToken, secret)
// Decod the token if already verified.
let payloadFromDecode = decode(jwtToekn)
Installation
npm i @beem812/bs-jsonwebtoken
Then add @beem812/bs-jsonwebtokent
to bs-dependencies
in your bsconfig.json
:
{
...
"bs-dependencies": ["@beem812/bs-jsonwebtoken"]
}