refactor(gateway): share broadcast function types

This commit is contained in:
Peter Steinberger
2026-02-15 13:39:59 +00:00
parent 0d47bea3bf
commit c1cc28a4e1
3 changed files with 37 additions and 56 deletions

View File

@@ -15,6 +15,29 @@ const EVENT_SCOPE_GUARDS: Record<string, string[]> = {
"node.pair.resolved": [PAIRING_SCOPE],
};
export type GatewayBroadcastStateVersion = {
presence?: number;
health?: number;
};
export type GatewayBroadcastOpts = {
dropIfSlow?: boolean;
stateVersion?: GatewayBroadcastStateVersion;
};
export type GatewayBroadcastFn = (
event: string,
payload: unknown,
opts?: GatewayBroadcastOpts,
) => void;
export type GatewayBroadcastToConnIdsFn = (
event: string,
payload: unknown,
connIds: ReadonlySet<string>,
opts?: GatewayBroadcastOpts,
) => void;
function hasEventScope(client: GatewayWsClient, event: string): boolean {
const required = EVENT_SCOPE_GUARDS[event];
if (!required) {
@@ -37,10 +60,7 @@ export function createGatewayBroadcaster(params: { clients: Set<GatewayWsClient>
const broadcastInternal = (
event: string,
payload: unknown,
opts?: {
dropIfSlow?: boolean;
stateVersion?: { presence?: number; health?: number };
},
opts?: GatewayBroadcastOpts,
targetConnIds?: ReadonlySet<string>,
) => {
if (params.clients.size === 0) {
@@ -97,24 +117,10 @@ export function createGatewayBroadcaster(params: { clients: Set<GatewayWsClient>
}
};
const broadcast = (
event: string,
payload: unknown,
opts?: {
dropIfSlow?: boolean;
stateVersion?: { presence?: number; health?: number };
},
) => broadcastInternal(event, payload, opts);
const broadcast: GatewayBroadcastFn = (event, payload, opts) =>
broadcastInternal(event, payload, opts);
const broadcastToConnIds = (
event: string,
payload: unknown,
connIds: ReadonlySet<string>,
opts?: {
dropIfSlow?: boolean;
stateVersion?: { presence?: number; health?: number };
},
) => {
const broadcastToConnIds: GatewayBroadcastToConnIdsFn = (event, payload, connIds, opts) => {
if (connIds.size === 0) {
return;
}