Skip to content

Conversation

@ap0nia
Copy link
Contributor

@ap0nia ap0nia commented Aug 18, 2024

Summary

EdenWS has the wrong event.data type for all subscription-related listeners.

Expected

When defining a response for the message, Eden should show that same type in the event.data for the callback argument in EdenWS.on, EdenWS.subscribe, and EdenWS.addEventListener.

Solution

  • Expects to receive the actual data type as the second generic here
  • Currently, it is being provided the entire response here
  • To fix this, the EdenWS class should provided Schema['response'][200] as the data type for the second generic argument in Treaty.WSEvent
type Response = {
  // 200 is the HTTP code, and string is the actual response data.
  200: string
}

type EdenWSEvent_WRONG = Treaty.WSEvent<keyof WebSocketEventMap, Response>

type EdenWSEvent_CORRECT = Treaty.WSEvent<keyof WebSocketEventMap, Response[200]>

Minimal Reproduction

import { Elysia, t } from 'elysia'
import { treaty } from '@elysiajs/eden'

const app = new Elysia().ws('/chat', {
    body: t.Object({ message: t.String() }),
    response: t.String(),
    message: async (_ws, body) => {
        body.message
    }
})

const api = treaty<typeof app>()

const subscription = api.chat.subscribe()

subscription.on('message', (event) => {
    event.data
    // ^? is { 200: { message: string } } instead of { message: string }
})

@mchao123
Copy link

I've encountered this issue too. Hasn't anyone merged this fix yet?

@SaltyAom SaltyAom merged commit 75d49a9 into elysiajs:main Oct 11, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants