WebSocket Protocol

Vask speaks the Pusher Channels WebSocket protocol over native WebSockets.

wss://wss.vask.dev/app/{app_key}?protocol=7&client=js&version=8.4.0

Fallback transports such as SockJS, HTTP streaming, and long polling are intentionally not part of Vask's WebSocket parity scope.

#Connection established

After the WebSocket handshake, Vask sends:

{
    "event": "pusher:connection_established",
    "data": "{\"socket_id\":\"1234.5678\",\"activity_timeout\":120}"
}

Use socket_id when signing private, presence, encrypted, and user authentication requests.

#Heartbeats

Clients may send:

{
    "event": "pusher:ping",
    "data": {}
}

Vask replies:

{
    "event": "pusher:pong",
    "data": {}
}

SDKs usually handle this automatically.

#Subscribe

Public channel:

{
    "event": "pusher:subscribe",
    "data": {
        "channel": "public-feed"
    }
}

Private channel:

{
    "event": "pusher:subscribe",
    "data": {
        "channel": "private-dashboard.42",
        "auth": "app_key:hmac_signature"
    }
}

Presence channel:

{
    "event": "pusher:subscribe",
    "data": {
        "channel": "presence-room.42",
        "auth": "app_key:hmac_signature",
        "channel_data": "{\"user_id\":\"user-123\",\"user_info\":{\"name\":\"Ada\"}}"
    }
}

Successful subscriptions emit pusher_internal:subscription_succeeded.

#Unsubscribe

{
    "event": "pusher:unsubscribe",
    "data": {
        "channel": "presence-room.42"
    }
}

Presence channels emit member removal events when the last connection for a user_id leaves.

#User sign-in

{
    "event": "pusher:signin",
    "data": {
        "auth": "app_key:hmac_signature",
        "user_data": "{\"id\":\"user-123\",\"name\":\"Ada\"}"
    }
}

Vask replies with pusher:signin_success or pusher:error.

#Client events

Client events must start with client- and include a subscribed private or presence channel.

{
    "event": "client-typing",
    "channel": "private-room.42",
    "data": "{\"is_typing\":true}"
}

#Close codes

Code Meaning
4001 Unknown app.
4003 App disabled.
4004 Connection quota exceeded.
4005 Unknown WebSocket path.
4009 Unauthorized connection or command.
4200 Signed-in user connection terminated by API.
4201 Heartbeat timeout.

#Unsupported transport scope

Vask is a WebSocket service. Configure browser SDKs to use ws and wss transports.

const pusher = new Pusher('app_key', {
    wsHost: 'wss.vask.dev',
    wsPort: 443,
    forceTLS: true,
    enabledTransports: ['ws', 'wss'],
});

Prefer raw markdown? View this page as markdown.