Skip to content

Commit ac021b7

Browse files
committed
fix(ws-client): reject envelopes from unsupported protocol versions
isWsEnvelope accepted any numeric v, so a hypothetical v2 frame would be dispatched (or resolve a pending ack) under v1 semantics while the server parser pins v to 1 — pin the client predicate to the same literal.
1 parent d672d13 commit ac021b7

2 files changed

Lines changed: 6 additions & 1 deletion

File tree

packages/ws-client/src/protocol.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export function isWsEnvelope(value: unknown): value is WsEnvelope {
2121

2222
const candidate = value as Record<string, unknown>
2323

24-
if (typeof candidate.v !== 'number') return false
24+
if (candidate.v !== WS_PROTOCOL_VERSION) return false
2525
if (typeof candidate.event !== 'string' || candidate.event.length === 0) {
2626
return false
2727
}

packages/ws-client/test/protocol.spec.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,11 @@ describe('isWsEnvelope', () => {
6767
expect(isWsEnvelope({ v: '1', event: 'ping' })).toBe(false)
6868
})
6969

70+
it('rejects an unsupported protocol version', () => {
71+
expect(isWsEnvelope({ v: 2, event: 'ping' })).toBe(false)
72+
expect(isWsEnvelope({ v: 0, event: 'ping' })).toBe(false)
73+
})
74+
7075
it('rejects a missing or empty event', () => {
7176
expect(isWsEnvelope({ v: 1 })).toBe(false)
7277
expect(isWsEnvelope({ v: 1, event: '' })).toBe(false)

0 commit comments

Comments
 (0)