pubnub-sse

PubNub SSE SDK

Downloads
394
Stars
0

PubNub SSE

Easy to use PubNub SDK with SSE enabled by default.

NPM Install

npm install pubnub-sse

Run a Quick Demo

git clone https://github.com/stephenlb/pubnub-sse.git
cd pubnub-sse
open index.html

Important Files:

  • pubnub.js PubNub SSE Streaming SDK
  • index.html Example app open to see a demo using streaming data.

Setup the SDK as follows in the example.

Subscription Async Iterator

const pubnub = PubNub({ subscribeKey: 'demo', publishKey: 'demo'});
const subscription = pubnub.subscribe({channel: 'test'});

let count = 0;
for await (const msg of subscription) {
    console.log(msg);
    if (count++ >= 2) break;
}

Subscription Callback

const pubnub = PubNub({ subscribeKey: 'demo', publishKey: 'demo'});
const subscription = pubnub.subscribe({channel: 'test', messages: reciever});

function reciever(msg) {
    console.log(msg);
}

Encryption Example

Using the crypto-js common crypto lib for encryption/decryption. With added support for Cross-Platform messaging.

const PubNub = require('pubnub-sse');    // npm install pubnub-sse
const PubNubCryptor = require('pubnub'); // npm install pubnub

const pubkey = 'demo';
const subkey = 'demo';
const authKey = 'demo-auth-key';
const userId = 'test-user-id';
const cipherKey = 'pubnubenigma';

const pubnubInstance = PubNub({
    publishKey: pubkey,
    subscribeKey: subkey,
    authKey: authKey,
    userId: userId,
});

const pubnubCryptor = new PubNubCryptor({
    subscribeKey: subkey,
    publishKey: pubkey,
    uuid: userId,
    authKey: authKey,
    cipherKey: cipherKey,
});

const message = { text: "Hello World" };
const stringData = JSON.stringify(message);
const encrypted = pubnubCryptor.encrypt(stringData);
const channel = `test-channel-${Math.random()}`;
const subscription = pubnubInstance.subscribe({channel: channel});

// Publish
setTimeout(async () => {
    await pubnubInstance.publish({ channel: channel, message: encrypted});
}, 1000);

// Subscription Stream
for await (const encryptedMessage of subscription) {
    const decrypted = pubnubCryptor.decrypt(encryptedMessage);
    expect(encryptedMessage).to.equal(encrypted);
    expect(encryptedMessage).to.be.a('string');
    expect(decrypted).to.be.an('object');
    expect(message).to.deep.equal(decrypted);
    break;
}

subscription.unsubscribe();

Example Code

<script src="pubnub.js"></script>
<script>

// PubNub Setup
const userId = 'user-id';
const authKey = 'auth-key';
const channel = 'Commands';
const pubkey = 'pub-c-a88f5e0f-af28-4847-ad52-30495d0cbcb8';
const subkey = 'sub-c-a8cbfccb-676b-4034-9681-dfed95af8d7e';
const pubnub = PubNub({
    subscribeKey: subkey,
    publishKey: pubkey,
    authKey: authKey,
    userId: userId,
});

// Subscribe to Events "Starts the Stream"
const subscription = pubnub.subscribe({
    channel: channel,
    messages: receiveEvents,
});

// End subscription
// subscription.unsubscribe();

// Event Processing
function receiveEvents(event) {
    console.log(event);
}

// Publish Events Example
let eventId = 0;
setInterval(() => {
    pubnub.publish({
        channel: channel,
        message: {
            eventId: ++eventId, 
            userId: userId,
            data: `Event ${eventId} from ${userId} at ${new Date().toISOString()}`,
        },
    });
}, 1000);

</script>