Server : nginx/1.18.0 System : Linux localhost 6.14.3-x86_64-linode168 #1 SMP PREEMPT_DYNAMIC Mon Apr 21 19:47:55 EDT 2025 x86_64 User : www-data ( 33) PHP Version : 8.0.16 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/ecommerce/node_modules/laravel-echo/src/channel/ |
import { EventFormatter } from '../util';
import { Channel } from './channel';
/**
* This class represents a Pusher channel.
*/
export class PusherChannel extends Channel {
/**
* The Pusher client instance.
*/
pusher: any;
/**
* The name of the channel.
*/
name: any;
/**
* Channel options.
*/
options: any;
/**
* The event formatter.
*/
eventFormatter: EventFormatter;
/**
* The subscription of the channel.
*/
subscription: any;
/**
* Create a new class instance.
*/
constructor(pusher: any, name: any, options: any) {
super();
this.name = name;
this.pusher = pusher;
this.options = options;
this.eventFormatter = new EventFormatter(this.options.namespace);
this.subscribe();
}
/**
* Subscribe to a Pusher channel.
*/
subscribe(): any {
this.subscription = this.pusher.subscribe(this.name);
}
/**
* Unsubscribe from a Pusher channel.
*/
unsubscribe(): void {
this.pusher.unsubscribe(this.name);
}
/**
* Listen for an event on the channel instance.
*/
listen(event: string, callback: Function): PusherChannel {
this.on(this.eventFormatter.format(event), callback);
return this;
}
/**
* Listen for all events on the channel instance.
*/
listenToAll(callback: Function): PusherChannel {
this.subscription.bind_global((event, data) => {
if (event.startsWith('pusher:')) {
return;
}
let namespace = this.options.namespace.replace(/\./g, '\\');
let formattedEvent = event.startsWith(namespace) ? event.substring(namespace.length + 1) : '.' + event;
callback(formattedEvent, data);
});
return this;
}
/**
* Stop listening for an event on the channel instance.
*/
stopListening(event: string, callback?: Function): PusherChannel {
if (callback) {
this.subscription.unbind(this.eventFormatter.format(event), callback);
} else {
this.subscription.unbind(this.eventFormatter.format(event));
}
return this;
}
/**
* Stop listening for all events on the channel instance.
*/
stopListeningToAll(callback?: Function): PusherChannel {
if (callback) {
this.subscription.unbind_global(callback);
} else {
this.subscription.unbind_global();
}
return this;
}
/**
* Register a callback to be called anytime a subscription succeeds.
*/
subscribed(callback: Function): PusherChannel {
this.on('pusher:subscription_succeeded', () => {
callback();
});
return this;
}
/**
* Register a callback to be called anytime a subscription error occurs.
*/
error(callback: Function): PusherChannel {
this.on('pusher:subscription_error', (status) => {
callback(status);
});
return this;
}
/**
* Bind a channel to an event.
*/
on(event: string, callback: Function): PusherChannel {
this.subscription.bind(event, callback);
return this;
}
}