Skip to main content
zerotal

Documentation


Documentation / @zerotal/broadcasting / BroadcastManager

Class: BroadcastManager

Defined in: broadcasting/src/BroadcastManager.ts:30

Extended by

Constructors

Constructor

new BroadcastManager(): BroadcastManager

Returns

BroadcastManager

Properties

_conns

protected _conns: Map<string, WS>

Defined in: broadcasting/src/BroadcastManager.ts:32

connectionId → live WebSocket


_subs

protected _subs: Map<string, Set<string>>

Defined in: broadcasting/src/BroadcastManager.ts:34

channelName → Set


_members

protected _members: Map<string, Map<string, PresenceMember>>

Defined in: broadcasting/src/BroadcastManager.ts:36

presence channelName → Map<connectionId, PresenceMember>


_authSecret

protected _authSecret: string | undefined = undefined

Defined in: broadcasting/src/BroadcastManager.ts:42

Secret for per-subscription HMAC signatures (the app's APP_KEY).

Accessors

wsHandlers

Get Signature

get wsHandlers(): object

Defined in: broadcasting/src/BroadcastManager.ts:246

Returns

object

open

open: (ws) => void

Parameters
ws

WS

Returns

void

message

message: (ws, msg) => undefined

Parameters
ws

WS

msg

string | Uint8Array<ArrayBufferLike>

Returns

undefined

close

close: (ws) => void

Parameters
ws

WS

Returns

void

Methods

setAuthSecret()

setAuthSecret(secret): void

Defined in: broadcasting/src/BroadcastManager.ts:51

Set the secret used to sign/verify per-subscription auth tokens. Wired from the app's APP_KEY by BroadcastProvider. Without it the signed-auth path is disabled and the server falls back to the connection-level authorize callbacks.

Parameters

secret

string

Returns

void


signAuth()

signAuth(socketId, channel, channelData?): string

Defined in: broadcasting/src/BroadcastManager.ts:59

Sign a socket_id / channel pair (and, for presence, its channelData) — the token POST /broadcasting/auth hands back to the client, which echoes it in subscribe.

Parameters

socketId

string

channel

string

channelData?

string

Returns

string


verifyAuth()

verifyAuth(socketId, channel, auth, channelData?): boolean

Defined in: broadcasting/src/BroadcastManager.ts:74

Constant-time check that auth is a valid signature for this socket/channel(/data).

Parameters

socketId

string

channel

string

auth

string

channelData?

string

Returns

boolean


authorizeWith()

authorizeWith(fn): void

Defined in: broadcasting/src/BroadcastManager.ts:95

Register an authorization callback for private/presence channels. Return true to allow subscription, false to deny.

Parameters

fn

ChannelAuthFn

Returns

void

Example

broadcast.authorizeWith(async (channel, ws) => {
  if (!ws.data.userId) return false;
  if (channel.startsWith('private-orders.')) {
    const id = channel.split('.')[1];
    return await Order.findOwner(id) === ws.data.userId;
  }
  return true;
});

authorizePresenceWith()

authorizePresenceWith(fn): void

Defined in: broadcasting/src/BroadcastManager.ts:111

Register a presence channel auth callback. Return a PresenceMember object to grant access and track the member, or false to deny.

Parameters

fn

PresenceAuthFn

Returns

void

Example

manager.authorizePresenceWith(async (channel, ws) => {
  const user = await User.find(ws.data.userId);
  if (!user) return false;
  return { id: user.id, info: { name: user.name, avatar: user.avatar } };
});

getMembers()

getMembers(channel): PresenceMember[]

Defined in: broadcasting/src/BroadcastManager.ts:122

Return all members currently subscribed to a presence channel.

Parameters

channel

string

Returns

PresenceMember[]

Example

const members = manager.getMembers('presence-chat.room');
// [{ id: 1, info: { name: 'Alice' } }, ...]

handleOpen()

handleOpen(ws): void

Defined in: broadcasting/src/BroadcastManager.ts:128

Parameters

ws

WS

Returns

void


handleMessage()

handleMessage(ws, raw): Promise<void>

Defined in: broadcasting/src/BroadcastManager.ts:133

Parameters

ws

WS

raw

string | Uint8Array<ArrayBufferLike>

Returns

Promise<void>


handleClose()

handleClose(ws): void

Defined in: broadcasting/src/BroadcastManager.ts:166

Parameters

ws

WS

Returns

void


to()

to(channel, eventName, data?, opts?): void

Defined in: broadcasting/src/BroadcastManager.ts:192

Broadcast a raw event to all subscribers of channel.

Parameters

channel

string

eventName

string

data?

unknown = {}

opts?
exceptSocketId?

string

Returns

void

Example

broadcast.to('posts', 'PostCreated', { id: 99 });

send()

send(event, opts?): void

Defined in: broadcasting/src/BroadcastManager.ts:214

Dispatch a BroadcastEvent to all its declared channels.

Parameters

event

BroadcastEvent

opts?
exceptSocketId?

string

Returns

void

Example

broadcast.send(new PostUpdated(post));

subscriptionsFor()

subscriptionsFor(connectionId): string[]

Defined in: broadcasting/src/BroadcastManager.ts:226

Returns the list of channels a connection is subscribed to.

Parameters

connectionId

string

Returns

string[]


subscriberCount()

subscriberCount(channel): number

Defined in: broadcasting/src/BroadcastManager.ts:235

Returns the number of subscribers on a channel.

Parameters

channel

string

Returns

number


connectionCount()

connectionCount(): number

Defined in: broadcasting/src/BroadcastManager.ts:240

Total open connections.

Returns

number


_onHandlerError()

protected _onHandlerError(ws, error): void

Defined in: broadcasting/src/BroadcastManager.ts:267

Last-resort handler for a rejection escaping handleMessage.

Logs and, where possible, tells the offending client. Never rethrows: the whole point is that one client's bad frame must not terminate the process serving everyone else.

Parameters

ws

WS

error

unknown

Returns

void


upgradeData()

upgradeData(req): Record<string, unknown>

Defined in: broadcasting/src/BroadcastManager.ts:278

Factory for upgradeData passed to app.withWebSocket().

Parameters

req

Request

Returns

Record<string, unknown>