1.1.2 • Published 1 year ago

relay-jwt v1.1.2

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

relay-jwt

Tools for constructing and parsing the subject field for the Badger Relay Server JWT

Install

$ npm install jsonwebtoken
$ npm install relay-jwt

Installing jsonwebtoken will install jwa, which is a necessary requirement for this module.

Usage

Example:

const jwt = require('jsonwebtoken');
const jwa = require('jwa');
const crypto = require('crypto');
const { 
    decodeSubjectChain,
    encodeSubject, 
    calculateGross,
    calculateNet
} = require("relay-jwt");

// Set algorithm
const algorithm = 'ES256';
// create jwa object
const ecdsa = jwa(algorithm);

// Parameters for the relays, with Relay 0 at the 0 index
const chainParams = [
    {
        type: 0,
        amount: 50
    },
    {
        type: 1,
        amount: 5000
    },
    {
        type: 0,
        amount: 80
    }
];

let subject = '';
let privateKey;
let publicKey;

for (let i = 0; i < chainParams.length; i++ ) {
// Generate a new random keypair in PEM format
    const keyPair = crypto.generateKeyPairSync( 'ec', {
        namedCurve: 'secp256k1',
        'publicKeyEncoding': {
            'type': 'spki',
            'format': 'pem'
        },
        'privateKeyEncoding': {
            'type': 'pkcs8',
            'format': 'pem'
        }
    });

    privateKey = keyPair.privateKey;
    publicKey = keyPair.publicKey;

    // Create base fee subject
    const subParams = {
        version: 1, // Int - 1 is standard
        type: chainParams[i].type, // 0 = percentage, 1 = fixed
        amount: chainParams[i].amount, // Int - If percentage, amount/1000 / if fixed, base units
        publicKey, // PEM encoded string
        previous: subject
    };

    subject = encodeSubject(subParams, privateKey, ecdsa.sign).toString("base64");
}

// Do the token
// generate token with relay jwt subject
const token = jwt.sign({}, privateKey, { 
    algorithm,
    subject
});
// decode token
const decoded = jwt.decode(token)
// Decode subject chain. Returns array of subParams objects as above
// Index 0 represents first fee to be added (first relay server to receive request)
// Last index represents BUX API (Relay 0)
const decodedChain = decodeSubjectChain(decoded.sub, ecdsa.verify);
console.log("decodedChain", decodedChain);
// First public key in subject must match public key for token
const verified = jwt.verify(token, decodedChain[0].publicKey);
console.log("jwt verified?", verified ? true : false);

// Do some fee calculations
// Calculate the total amount paid if the merchant submits 10
const gross = calculateGross(10, decodedChain, 4);
console.log("gross", gross);
// Calculate the amount the merchant must submit for the customer to pay 10
const net = calculateNet(10, decodedChain, 4);
console.log("net", net);
1.1.2

1 year ago

1.1.1

1 year ago

1.1.0

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago