UNPKG

vhook-js

Version:

Verifyable Webhooks

106 lines (84 loc) 3.26 kB
// 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-----')); }); }); });