Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Supabase Edge Functions] Can't use Websockets in Edge Functions on Supabase Hosting. #22800

Open
2 tasks done
Lan-Hekary opened this issue Apr 16, 2024 · 3 comments
Open
2 tasks done
Labels
edge functions enhancement New feature or request

Comments

@Lan-Hekary
Copy link
Contributor

Bug report

  • I confirm this is a bug with Supabase, not with my own application.
  • I confirm I have searched the Docs, GitHub Discussions, and Discord.

Describe the bug

I am trying to connect to Supabase Edge Function via WebSocket.
I managed to connect to the Edge Function locally and even when I expose the local instance of the Function to the internet I can connect to it from outside.
But as soon as I Deploy the function to a Supabase Project The WebSocket Connection fails.
I am not sure if it's a Bug or it's not supported.

To Reproduce

  1. Create a Supabase function using the CLI: Supabase functions new ws

  2. Use This code is based on this article from Deno:

Deno.serve((req) => {
  console.log("got :", req)
  const upgrade = req.headers.get("upgrade") || ""
  if (upgrade.toLowerCase() != "websocket") {
    return new Response("request isn't trying to upgrade to websocket.")
  }
  const { socket, response } = Deno.upgradeWebSocket(req)
  socket.onopen = () => console.log("socket opened")
  socket.onmessage = (e) => {
    console.log("socket message:", e.data)
    socket.send(new Date().toString())
  }
  socket.onerror = (e) => console.log("socket errored:", e.message, e)
  socket.onclose = (e) => console.log("socket closed clean:", e.wasClean)
  return response
})
  1. Up to this Step if you started the function using supabase functions serve --no-verify-jwt and opened a WebSocket connection to the local instance of the edge-runtime, it will work just fine. The Bug is in the Next Step.

  2. Deploy the Function using CLI: supabase functions deploy ws --no-verify-jwt.

  3. Try to connect to the function via the Webbrowser or using https://websocketking.com/, it will fail as it can't connect, but in the logs of the function you will findout that the socket opens and immediately errors out then closes with an error message 'Unexpected EOF'

Expected behavior

It Should work in Supabase Projects as it's working in the local runtime.

Screenshots

The local CLI instance Working Properly.
image

The log in the Dashboard showing the failure.
image

System information

  • OS: Linux Arm64
  • Browser: Edge
  • Version of supabase-cli: v1.157.2
  • Version of Node.js: v18.20.2

Additional context

My Reference is this Official Video which referenced this article from Deno.

I Duplicated the Video for the Server-Side-Events, and it works as Expected both locally and on Supabase Projects.
The video talks about WebSockets briefly but does not implement it.

@Lan-Hekary Lan-Hekary added the bug Something isn't working label Apr 16, 2024
@encima
Copy link
Contributor

encima commented Apr 22, 2024

Hi @Lan-Hekary

Yes, it is currently not supported in Supabase cloud as Websockets are not enabled on the underlying provider. Will change this to an enhancement and @laktek can comment more if any progress is made

@encima encima added enhancement New feature or request edge functions and removed bug Something isn't working labels Apr 22, 2024
@geoffreygarrett
Copy link

This would be a hugely appreciated enhancement 🙏🏻

@Lan-Hekary
Copy link
Contributor Author

I agree this feature would be awesome.
Hey @laktek, do you have any estimation for it?
I'd like to use this feature to implement this feature
Sadly, I posted this like a year ago and no one noticed. So, I am trying to implement it myself.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
edge functions enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants