Plan

See crypto

PKI FSM Demo


js
import {PKIServer, PKIClient, MessageBus} from './websocket-fsm.js'

// Demonstration of secure communication using PKI and FSM
function runDemo() {
    logMessage('Demo: Started');
    const bus = new MessageBus();

    const server = new PKIServer(bus, logMessage);
    const alice = new PKIClient('Alice', bus, logMessage);
    const bob = new PKIClient('Bob', bus, logMessage);

    alice.on('authenticated', () => {
        logMessage('Demo: Alice authenticated');

        // its safer to poll  because bob may already be authenticated
        const checkInterval = setInterval(() => {
            if (bob.state === 'authenticated') {
                clearInterval(checkInterval);
                alice.sendMessage('Hello Bob, this is Alice!', bob.publicKeyB64);
            }
        }, 100);
    });

    bob.on('message', (message) => {
        logMessage(`Bob received message from ${message.from}: ${message.content}`);
        bob.sendMessage('Hello Alice, this is Bob!', alice.publicKeyB64);

    });

    alice.on('message', (message) => {
        logMessage(`Alice received message from ${message.from}: ${message.content}`);
    });

    // Connect clients
    alice.connect();
    bob.connect();

    // Return cleanup function
    return () => {
        alice.disconnect();
        bob.disconnect();
        server.shutdown();
    };
}

function logMessage(message) {
    const container = document.getElementById('message-container');
    if (container) {
        const messageElement = document.createElement('div');
        messageElement.textContent = message;
        container.appendChild(messageElement);
    }
    console.log(message);
}

document.getElementById('run-demo').addEventListener('click', () => {
    const cleanup = runDemo();
    // Cleanup after 5 seconds for demo purposes
    setTimeout(cleanup, 5000);
});

© 2026 simpatico