vhook-js
Version:
Verifyable Webhooks
106 lines (84 loc) • 3.26 kB
JavaScript
// test/vhook.test.js
const assert = require('assert');
const vhook = require('../vhook.js');
const jwt = require('jsonwebtoken');
describe('VHook Readme examples', function () {
let keys;
let privateKey;
let publicKey;
let token;
let payload;
let now;
let my_vhook;
before(async function () {
// Generate key pair before running tests
keys = await vhook.create_vhook_keypair();
privateKey = keys.privateKey.pem;
publicKey = keys.publicKey.pem;
now = Math.floor(Date.now()/1000);
});
describe('create a vhook', function () {
it('Readme example 1 works', function () {
// Load your private key (PEM format)
//const privateKey = fs.readFileSync('private.pem', 'utf8');
// Create the VHook payload
payload = {
issuer: 'https://yourservice.com',
audience: 'https://receiving-service.com/webhook-endpoint',
expiration: Math.floor(Date.now() / 1000) + 3600, // Expires in 1 hour
issued_at: Math.floor(Date.now() / 1000),
origin: 'order',
event: 'order.created',
data: {
order_id: '98765',
amount: 150.00,
currency: 'USD',
},
};
// Create the VHook (signed JWT)
my_vhook = vhook.create_vhook(payload, privateKey);
//console.log('VHook:', my_vhook);
const decoded = jwt.decode(my_vhook);
assert.ok(decoded.jti);
assert.deepStrictEqual(decoded.data, payload.data);
});
});
describe('decode a vhook', function() {
it('Readme decode example works', function() {
// Load the sender's public key (PEM format)
//const publicKey = fs.readFileSync('public.pem', 'utf8');
// Assume you have received a VHook
const received_vhook = my_vhook // '...'; // The VHook string received
let decodedPayload;
try {
// Decode and verify the VHook
decodedPayload = vhook.decode_vhook(received_vhook, publicKey);
//console.log('Verified VHook Payload:', decodedPayload);
// Proceed with processing the payload
} catch (err) {
console.error('Failed to verify VHook:', err.message);
}
assert.deepStrictEqual(decodedPayload.data, payload.data);
assert.deepStrictEqual(decodedPayload.issuer, payload.issuer);
assert.deepStrictEqual(decodedPayload.audience, payload.audience);
});
});
describe('create a keypair', function() {
it('readme keypair creation example works', async function() {
// Generate a key pair (defaults to RSA 2048 bits)
const keys = await vhook.create_vhook_keypair();
// Save the private key to a file
//fs.writeFileSync('private.pem', keys.privateKey.pem);
// Save the public key to a file
//fs.writeFileSync('public.pem', keys.publicKey.pem);
//console.log('Key pair generated and saved to disk.', keys);
assert.ok(keys.privateKey);
assert.ok(keys.publicKey);
assert.ok(keys.privateKey.pem);
assert.ok(keys.publicKey.pem);
// Check that keys are in PEM format
assert.ok(keys.privateKey.pem.includes('-----BEGIN RSA PRIVATE KEY-----'));
assert.ok(keys.publicKey.pem.includes('-----BEGIN PUBLIC KEY-----'));
});
});
});