VaKeR CYBER ARMY
Logo of a company Server : Apache/2.4.41 (Ubuntu)
System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64
User : www-data ( 33)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Directory :  /var/www/html/webrtc/js/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/www/html/webrtc/js/pubnub-stream.js
(async ()=>{ 
'use strict';

const PubNub = window.PubNub = (setup) => {
    for (let key of Object.keys(setup)) PubNub[key] = setup[key];
};

const defaultSubkey  = 'demo';
const defaultPubkey  = 'demo';
const defaultChannel = 'pubnub';
const defaultOrigin  = 'ps.pndsn.com';

const subscribe = PubNub.subscribe = (setup={}) => {
    let subkey     = setup.subkey     || PubNub.subscribeKey || defaultSubkey;
    let channel    = setup.channel    || PubNub.channel      || defaultChannel;
    let origin     = setup.origin     || PubNub.origin       || defaultOrigin;
    let messages   = setup.messages   || PubNub.messages     || (a => a);
    let authkey    = setup.authkey    || PubNub.authKey      || '';
    let timetoken  = setup.timetoken  || '0';
    let params     = `${authkey?'auth='+authkey:''}`;
    let decoder    = new TextDecoder();
    let boundry    = /(?<=,"\d{17}"\])[\n,]*/;
    let resolver   = null;
    let promissory = () => new Promise(resolve => resolver = (data) => resolve(data) ); 
    let receiver   = promissory();
    let reader     = null;
    let response   = null;
    let buffer     = '';
    let subscribed = true;

    // Start Stream
    startStream();

    async function startStream() {
        let uri = `https://${origin}/stream/${subkey}/${channel}/0/${timetoken}`;
        buffer  = '';

        try      { response = await fetch(`${uri}?${params}`) }
        catch(e) { return continueStream(1000)                }

        try      { reader = response.body.getReader() }
        catch(e) { return continueStream(1000)        }

        try      { readStream()                       }
        catch(e) { return continueStream(1000)        }
    }

    function continueStream(delay) {
        if (!subscribed) return;
        setTimeout( () => startStream(), delay || 1000 );
    }

    async function readStream() {
        let chunk   = await reader.read().catch(continueStream);
        if (!chunk) return;

        buffer     += decoder.decode(chunk.value || new Uint8Array);
        let parts   = buffer.split(boundry);
        let message = parts[0];

        try {
            let jsonmsg     = JSON.parse(message);
            setup.timetoken = timetoken = jsonmsg[1];

            jsonmsg[0].forEach(m => {
                messages(m);
                resolver(m);
                receiver = promissory();
            });

            buffer = parts.slice(1).join('');
        }
        catch(error) {
            // Typically chunk is unfinished JSON in buffer.
            // console.error(error);
        }

        if (!chunk.done) readStream();
        else             continueStream(10);
    }

    // Subscription Structure
    async function* subscription() {
        while (subscribed) yield await receiver;
    }

    subscription.messages    = receiver => messages = setup.messages = receiver;
    subscription.unsubscribe = () => subscribed = false;

    return subscription;
};

const publish = PubNub.publish = async (setup={}) => {
    let pubkey    = setup.pubkey     || PubNub.publishKey   || defaultPubkey;
    let subkey    = setup.subkey     || PubNub.subscribeKey || defaultSubkey;
    let channel   = setup.channel    || PubNub.channel      || defaultChannel;
    let origin    = setup.origin     || PubNub.origin       || defaultOrigin;
    let authkey   = setup.authkey    || PubNub.authKey      || '';
    let message   = setup.message    || 'missing-message';
    let uri       = `https://${origin}/publish/${pubkey}/${subkey}/0/${channel}/0`;
    let params    = `${authkey?'auth='+authkey:''}`;
    let payload   = { method: 'POST', body: JSON.stringify(message) };

    try      { return await fetch(`${uri}?${params}`, payload) }
    catch(e) { return false }
};

})();

VaKeR 2022