laravel-echo
Version:
Laravel Echo library for beautiful Pusher and Socket.IO integration
153 lines (152 loc) • 4.82 kB
TypeScript
import { Channel, NullChannel, NullEncryptedPrivateChannel, NullPresenceChannel, NullPrivateChannel, type PresenceChannel, PusherChannel, PusherEncryptedPrivateChannel, PusherPresenceChannel, PusherPrivateChannel, SocketIoChannel, SocketIoPresenceChannel, SocketIoPrivateChannel } from './channel';
import { Connector, PusherConnector, SocketIoConnector, NullConnector } from './connector';
/**
* This class is the primary API for interacting with broadcasting.
*/
export default class Echo<T extends keyof Broadcaster> {
/**
* The broadcasting connector.
*/
connector: Broadcaster[Exclude<T, 'function'>]['connector'];
/**
* The Echo options.
*/
options: EchoOptions<T>;
/**
* Create a new class instance.
*/
constructor(options: EchoOptions<T>);
/**
* Get a channel instance by name.
*/
channel(channel: string): Broadcaster[T]['public'];
/**
* Create a new connection.
*/
connect(): void;
/**
* Disconnect from the Echo server.
*/
disconnect(): void;
/**
* Get a presence channel instance by name.
*/
join(channel: string): Broadcaster[T]['presence'];
/**
* Leave the given channel, as well as its private and presence variants.
*/
leave(channel: string): void;
/**
* Leave the given channel.
*/
leaveChannel(channel: string): void;
/**
* Leave all channels.
*/
leaveAllChannels(): void;
/**
* Listen for an event on a channel instance.
*/
listen(channel: string, event: string, callback: CallableFunction): Broadcaster[T]['public'];
/**
* Get a private channel instance by name.
*/
private(channel: string): Broadcaster[T]['private'];
/**
* Get a private encrypted channel instance by name.
*/
encryptedPrivate(channel: string): Broadcaster[T]['encrypted'];
private connectorSupportsEncryptedPrivateChannels;
/**
* Get the Socket ID for the connection.
*/
socketId(): string | undefined;
/**
* Register 3rd party request interceptiors. These are used to automatically
* send a connections socket id to a Laravel app with a X-Socket-Id header.
*/
registerInterceptors(): void;
/**
* Register a Vue HTTP interceptor to add the X-Socket-ID header.
*/
registerVueRequestInterceptor(): void;
/**
* Register an Axios HTTP interceptor to add the X-Socket-ID header.
*/
registerAxiosRequestInterceptor(): void;
/**
* Register jQuery AjaxPrefilter to add the X-Socket-ID header.
*/
registerjQueryAjaxSetup(): void;
/**
* Register the Turbo Request interceptor to add the X-Socket-ID header.
*/
registerTurboRequestInterceptor(): void;
}
/**
* Export channel classes for TypeScript.
*/
export { Connector, Channel, type PresenceChannel };
export { EventFormatter } from './util';
/**
* Specifies the broadcaster
*/
export type Broadcaster = {
reverb: {
connector: PusherConnector<'reverb'>;
public: PusherChannel<'reverb'>;
private: PusherPrivateChannel<'reverb'>;
encrypted: PusherEncryptedPrivateChannel<'reverb'>;
presence: PusherPresenceChannel<'reverb'>;
};
pusher: {
connector: PusherConnector<'pusher'>;
public: PusherChannel<'pusher'>;
private: PusherPrivateChannel<'pusher'>;
encrypted: PusherEncryptedPrivateChannel<'pusher'>;
presence: PusherPresenceChannel<'pusher'>;
};
'socket.io': {
connector: SocketIoConnector;
public: SocketIoChannel;
private: SocketIoPrivateChannel;
encrypted: never;
presence: SocketIoPresenceChannel;
};
null: {
connector: NullConnector;
public: NullChannel;
private: NullPrivateChannel;
encrypted: NullEncryptedPrivateChannel;
presence: NullPresenceChannel;
};
function: {
connector: any;
public: any;
private: any;
encrypted: any;
presence: any;
};
};
type Constructor<T = {}> = new (...args: any[]) => T;
export type BroadcastDriver = Exclude<keyof Broadcaster, 'function'>;
export type EchoOptions<TBroadcaster extends keyof Broadcaster> = {
/**
* The broadcast connector.
*/
broadcaster: TBroadcaster extends 'function' ? Constructor<InstanceType<Broadcaster[TBroadcaster]['connector']>> : TBroadcaster;
auth?: {
headers: Record<string, string>;
};
authEndpoint?: string;
userAuthentication?: {
endpoint: string;
headers: Record<string, string>;
};
csrfToken?: string | null;
bearerToken?: string | null;
host?: string | null;
key?: string | null;
namespace?: string | false;
[key: string]: any;
};