Pusher Channels JavaScript library for browsers, React Native, NodeJS and web workers
npx @tessl/cli install tessl/npm-pusher-js@8.4.0Pusher Channels JavaScript library enables real-time bidirectional communication between clients and servers through WebSocket connections with automatic fallback to HTTP polling. It provides pub/sub messaging, presence channels, user authentication, and client-side event triggering across web browsers, React Native, Node.js, and web workers.
npm install pusher-jsimport Pusher from "pusher-js";
import { Channel, PresenceChannel, Members } from "pusher-js";For CommonJS:
const Pusher = require("pusher-js");For Node.js specifically:
const Pusher = require("pusher-js/dist/node/pusher");import Pusher from "pusher-js";
// Initialize Pusher client
const pusher = new Pusher("your-app-key", {
cluster: "us2",
forceTLS: true
});
// Subscribe to a channel
const channel = pusher.subscribe("my-channel");
// Bind to events
channel.bind("my-event", (data) => {
console.log("Received data:", data);
});
// Global event binding
pusher.bind("connection_established", () => {
console.log("Connected to Pusher");
});
// Connect and disconnect
pusher.connect();
// pusher.disconnect();Pusher-js is built around several key components:
Core Pusher client functionality for establishing connections, managing global events, and controlling the overall WebSocket connection lifecycle.
class Pusher {
constructor(app_key: string, options: Options);
connect(): void;
disconnect(): void;
bind(event_name: string, callback: Function, context?: any): Pusher;
unbind(event_name?: string, callback?: Function, context?: any): Pusher;
bind_global(callback: Function): Pusher;
unbind_global(callback?: Function): Pusher;
unbind_all(callback?: Function): Pusher;
send_event(event_name: string, data: any, channel?: string): boolean;
signin(): void;
shouldUseTLS(): boolean;
}
interface Options {
cluster: string;
authEndpoint?: string;
authTransport?: AuthTransport;
channelAuthorization?: ChannelAuthorizationOptions;
userAuthentication?: UserAuthenticationOptions;
forceTLS?: boolean;
enableStats?: boolean;
disabledTransports?: Transport[];
enabledTransports?: Transport[];
activityTimeout?: number;
pongTimeout?: number;
unavailableTimeout?: number;
wsHost?: string;
wsPort?: number;
wssPort?: number;
httpHost?: string;
httpPort?: number;
httpsPort?: number;
nacl?: any;
}Channel-based pub/sub messaging system supporting public channels, private authenticated channels, and presence channels with member tracking.
subscribe(channel_name: string): Channel;
unsubscribe(channel_name: string): void;
channel(name: string): Channel;
allChannels(): Channel[];
class Channel {
constructor(name: string, pusher: Pusher);
bind(event: string, callback: Function, context?: any): Channel;
unbind(event?: string, callback?: Function, context?: any): Channel;
trigger(event: string, data: any): boolean;
subscribe(): void;
unsubscribe(): void;
}
class PresenceChannel extends Channel {
members: Members;
}
class Members {
count: number;
myID: any;
me: any;
get(id: string): any;
each(callback: Function): void;
}Authentication and authorization system for private channels, presence channels, and user authentication with customizable auth handlers.
interface ChannelAuthorizationOptions {
transport: 'ajax' | 'jsonp';
endpoint: string;
params?: any;
headers?: any;
paramsProvider?: () => any;
headersProvider?: () => any;
customHandler?: ChannelAuthorizationHandler;
}
interface UserAuthenticationOptions {
transport: 'ajax' | 'jsonp';
endpoint: string;
params?: any;
headers?: any;
paramsProvider?: () => any;
headersProvider?: () => any;
customHandler?: UserAuthenticationHandler;
}
type ChannelAuthorizationHandler = (
params: ChannelAuthorizationRequestParams,
callback: ChannelAuthorizationCallback
) => void;
type UserAuthenticationHandler = (
params: UserAuthenticationRequestParams,
callback: UserAuthenticationCallback
) => void;Low-level connection management with WebSocket handling, automatic reconnection, transport fallback, and connection state monitoring.
class ConnectionManager {
state: string;
connection: Connection;
socket_id: string;
connect(): void;
disconnect(): void;
send(data: any): boolean;
send_event(name: string, data: any, channel?: string): boolean;
isUsingTLS(): boolean;
}
interface ConnectionCallbacks {
message?: (event: any) => void;
ping?: () => void;
pong?: () => void;
error?: (error: any) => void;
closed?: () => void;
}class BadEventName extends Error {
constructor(msg?: string);
}
class BadChannelName extends Error {
constructor(msg?: string);
}
class HTTPAuthError extends Error {
status: number;
constructor(status: number, msg?: string);
}
class RequestTimedOut extends Error {
constructor(msg?: string);
}
class TransportClosed extends Error {
constructor(msg?: string);
}
class UnsupportedFeature extends Error {
constructor(msg?: string);
}Pusher-js supports multiple JavaScript environments:
Each platform has optimized transport layers and runtime-specific features while maintaining the same core API.