Add ping policy

This commit is contained in:
Jon Staab
2026-01-06 21:18:15 -08:00
parent de9d137b57
commit c850ab405c
3 changed files with 40 additions and 155 deletions
+30
View File
@@ -25,6 +25,35 @@ import {Unsubscriber} from "./util.js"
*/
export type SocketPolicy = (socket: Socket) => Unsubscriber
/**
* Sends a ping message every so often to ensure connection health
* @param socket - a Socket object
* @return a cleanup function
*/
export const socketPolicyPing = (socket: Socket) => {
let lastActivity = 0
const unsubscribers = [
on(socket, SocketEvent.Send, (message: ClientMessage) => {
lastActivity = Date.now()
}),
on(socket, SocketEvent.Receive, (message: ClientMessage) => {
lastActivity = Date.now()
}),
]
const interval = setInterval(() => {
if (socket.status === SocketStatus.Open && lastActivity < Date.now() - 30_000) {
socket._ws?.send('["PING"]')
}
}, 30_000)
return () => {
unsubscribers.forEach(call)
clearInterval(interval)
}
}
/**
* Handles auth-related message management:
* - Defers sending messages when a challenge is pending
@@ -232,6 +261,7 @@ export const makeSocketPolicyAuth = (options: SocketPolicyAuthOptions) => (socke
}
export const defaultSocketPolicies = [
socketPolicyPing,
socketPolicyAuthBuffer,
socketPolicyConnectOnSend,
socketPolicyCloseInactive,