Skip to content

feat(realtime): allow httpSend to send binary payload#2400

Merged
mandarini merged 1 commit into
masterfrom
feat/http-send-binary-payload
May 29, 2026
Merged

feat(realtime): allow httpSend to send binary payload#2400
mandarini merged 1 commit into
masterfrom
feat/http-send-binary-payload

Conversation

@edgurgel

Copy link
Copy Markdown
Member

🔍 Description

It uses the new single broadcast API to send JSON or binary payloads.

I had to pin the realtime version for now until CLI has updated the realtime version.

What changed?

Why was this change needed?

Closes #(issue_number)

📸 Screenshots/Examples

🔄 Breaking changes

  • This PR contains no breaking changes

📋 Checklist

  • I have read the Contributing Guidelines
  • My PR title follows the conventional commit format: <type>(<scope>): <description>
  • I have run pnpm nx format to ensure consistent code formatting
  • I have added tests for new functionality (if applicable)
  • I have updated documentation (if applicable)

📝 Additional notes

@edgurgel edgurgel requested review from a team as code owners May 27, 2026 04:28
@pkg-pr-new

pkg-pr-new Bot commented May 27, 2026

Copy link
Copy Markdown

Open in StackBlitz

@supabase/auth-js

npm i https://pkg.pr.new/@supabase/auth-js@2400

@supabase/functions-js

npm i https://pkg.pr.new/@supabase/functions-js@2400

@supabase/postgrest-js

npm i https://pkg.pr.new/@supabase/postgrest-js@2400

@supabase/realtime-js

npm i https://pkg.pr.new/@supabase/realtime-js@2400

@supabase/storage-js

npm i https://pkg.pr.new/@supabase/storage-js@2400

@supabase/supabase-js

npm i https://pkg.pr.new/@supabase/supabase-js@2400

commit: 7e5f9f5

Comment thread packages/core/realtime-js/src/RealtimeChannel.ts Fixed
@edgurgel edgurgel changed the title [WIP] feat(realtime): allow httpSend to send binary payload feat(realtime): allow httpSend to send binary payload May 29, 2026
@edgurgel edgurgel force-pushed the feat/http-send-binary-payload branch from 9d9a209 to 6d1b289 Compare May 29, 2026 00:52
It uses the new single broadcast API
@edgurgel edgurgel force-pushed the feat/http-send-binary-payload branch from 6d1b289 to 7e5f9f5 Compare May 29, 2026 01:13
@mandarini mandarini merged commit 335207f into master May 29, 2026
24 checks passed
@mandarini mandarini deleted the feat/http-send-binary-payload branch May 29, 2026 07:23
mandarini pushed a commit to supabase/supabase that referenced this pull request Jun 2, 2026
This PR updates @supabase/*-js libraries to version 2.107.0.

**Source**: manual

**Changes**:
- Updated @supabase/supabase-js to 2.107.0
- Updated @supabase/auth-js to 2.107.0
- Updated @supabase/realtime-js to 2.107.0
- Updated @supabase/postgest-js to 2.107.0
- Refreshed pnpm-lock.yaml

---

## Release Notes

## v2.107.0

## 2.107.0 (2026-06-02)

### 🚀 Features

- **auth:** remove navigator.locks-based mutex; introduce commit guard +
dispose() ([#2392](supabase/supabase-js#2392))
- **realtime:** allow httpSend to send binary payload
([#2400](supabase/supabase-js#2400))
- **supabase:** update X-Client-Info to structured metadata format
([#2359](supabase/supabase-js#2359))

### 🩹 Fixes

- **auth:** return AuthInvalidJwtError from getClaims for expired JWT
([#2395](supabase/supabase-js#2395))
- **auth:** recognize ?error= redirects in implicit grant gate
([#2407](supabase/supabase-js#2407))
- **auth): revert fix(auth:** encode client-id in oauth requests
([#2383](supabase/supabase-js#2383),
[#2417](supabase/supabase-js#2417))
- **postgrest:** return a structured error for non-JSON body on
successful responses
([#2398](supabase/supabase-js#2398))
- **release:** pin workspace:* sibling deps before JSR publish
([#2418](supabase/supabase-js#2418))
- **release:** publish gotrue-js legacy mirror via pnpm
([#2419](supabase/supabase-js#2419))

### ❤️ Thank You

- Claude Opus 4.7 (1M context)
- Claude Sonnet 4.6
- Eduardo Gurgel
- Guilherme Souza
- Katerina Skroumpelou @mandarini
- Omar Al Matar @Bewinxed
- youcef zr @youcefzemmar
- youcefzemmar

This PR was created automatically.

Co-authored-by: supabase-workflow-trigger[bot] <266661614+supabase-workflow-trigger[bot]@users.noreply.github.com>
imor pushed a commit to supabase/supabase that referenced this pull request Jun 3, 2026
This PR updates @supabase/*-js libraries to version 2.107.0.

**Source**: manual

**Changes**:
- Updated @supabase/supabase-js to 2.107.0
- Updated @supabase/auth-js to 2.107.0
- Updated @supabase/realtime-js to 2.107.0
- Updated @supabase/postgest-js to 2.107.0
- Refreshed pnpm-lock.yaml

---

## Release Notes

## v2.107.0

## 2.107.0 (2026-06-02)

### 🚀 Features

- **auth:** remove navigator.locks-based mutex; introduce commit guard +
dispose() ([#2392](supabase/supabase-js#2392))
- **realtime:** allow httpSend to send binary payload
([#2400](supabase/supabase-js#2400))
- **supabase:** update X-Client-Info to structured metadata format
([#2359](supabase/supabase-js#2359))

### 🩹 Fixes

- **auth:** return AuthInvalidJwtError from getClaims for expired JWT
([#2395](supabase/supabase-js#2395))
- **auth:** recognize ?error= redirects in implicit grant gate
([#2407](supabase/supabase-js#2407))
- **auth): revert fix(auth:** encode client-id in oauth requests
([#2383](supabase/supabase-js#2383),
[#2417](supabase/supabase-js#2417))
- **postgrest:** return a structured error for non-JSON body on
successful responses
([#2398](supabase/supabase-js#2398))
- **release:** pin workspace:* sibling deps before JSR publish
([#2418](supabase/supabase-js#2418))
- **release:** publish gotrue-js legacy mirror via pnpm
([#2419](supabase/supabase-js#2419))

### ❤️ Thank You

- Claude Opus 4.7 (1M context)
- Claude Sonnet 4.6
- Eduardo Gurgel
- Guilherme Souza
- Katerina Skroumpelou @mandarini
- Omar Al Matar @Bewinxed
- youcef zr @youcefzemmar
- youcefzemmar

This PR was created automatically.

Co-authored-by: supabase-workflow-trigger[bot] <266661614+supabase-workflow-trigger[bot]@users.noreply.github.com>
mandarini pushed a commit to supabase/ssr that referenced this pull request Jun 3, 2026
This PR updates `@supabase/supabase-js` to v2.107.0.

**Source**: manual

---

## Release Notes

## v2.107.0

## 2.107.0 (2026-06-02)

### 🚀 Features

- **auth:** remove navigator.locks-based mutex; introduce commit guard +
dispose() ([#2392](supabase/supabase-js#2392))
- **realtime:** allow httpSend to send binary payload
([#2400](supabase/supabase-js#2400))
- **supabase:** update X-Client-Info to structured metadata format
([#2359](supabase/supabase-js#2359))

### 🩹 Fixes

- **auth:** return AuthInvalidJwtError from getClaims for expired JWT
([#2395](supabase/supabase-js#2395))
- **auth:** recognize ?error= redirects in implicit grant gate
([#2407](supabase/supabase-js#2407))
- **auth): revert fix(auth:** encode client-id in oauth requests
([#2383](supabase/supabase-js#2383),
[#2417](supabase/supabase-js#2417))
- **postgrest:** return a structured error for non-JSON body on
successful responses
([#2398](supabase/supabase-js#2398))
- **release:** pin workspace:* sibling deps before JSR publish
([#2418](supabase/supabase-js#2418))
- **release:** publish gotrue-js legacy mirror via pnpm
([#2419](supabase/supabase-js#2419))

### ❤️ Thank You

- Claude Opus 4.7 (1M context)
- Claude Sonnet 4.6
- Eduardo Gurgel
- Guilherme Souza
- Katerina Skroumpelou @mandarini
- Omar Al Matar @Bewinxed
- youcef zr @youcefzemmar
- youcefzemmar
## v2.106.2

## 2.106.2 (2026-05-25)

### 🩹 Fixes

- **auth:** restore signup user response
([#2391](supabase/supabase-js#2391))
- **misc:** add react-native export condition for Hermes-safe resolution
([#2393](supabase/supabase-js#2393))

### ❤️ Thank You

- Myroslav Hryhschenko @BLOCKMATERIAL
- Vaibhav @7ttp

This PR was created automatically.

Co-authored-by: supabase-workflow-trigger[bot] <266661614+supabase-workflow-trigger[bot]@users.noreply.github.com>
@holm

holm commented Jun 6, 2026

Copy link
Copy Markdown

After updating to 2.107.0 from 2.106.2 today we encountered multiple issues from this change. Broadcast did not work on local development, seemingly because the CLI based realtime server did not have the new endpoint. More problematic was that while the endpoint seemingly exists on the production Supabase, no event was received on the clientside. Downgrading to 2.106.2 fixed it.

It's likely I missed something, but this cost me a few hours, so mentioning this in case others run into the same.

@edgurgel

edgurgel commented Jun 7, 2026

Copy link
Copy Markdown
Member Author

Hey @holm, apologies for this issue.

You are right and we should've probably waited for the CLI to have on its stable version the Realtime version v2.97.3 or greater for a longer time. It's currently on 2.103.2.

To unblock your client update you can upgrade your supabase CLI to the latest stable or tweak your docker compose with the Realtime version being at least v2.97.3

Will discuss with the team to find out an easier way for this sort of upgrade to not trip people like it did for you.

@mandarini

Copy link
Copy Markdown
Contributor

Hi @holm, I believe the two symptoms have different causes:

For the local 404: httpSend() needs Realtime server v2.97.0+. Update your CLI, or pin the Realtime image without upgrading the CLI as @edgurgel noted above.

We've tightened the client-side error message so the 404 case now points at this directly.

For the production silent drop: were the broadcasts private: true? On the new endpoint the 202 is sent before the RLS check, and a denial drops the message without erroring. If you can share project ID + a rough timestamp window (DM works), the Realtime team can check logs.

@edgurgel

Copy link
Copy Markdown
Member Author

Hi @holm we applied a fix in our gateway to ensure that the appropriate responses are returned in production. If you end up trying again please let us know if you have any issues 🙏

@holm

holm commented Jun 12, 2026

Copy link
Copy Markdown

Sorry, I missed the replies here in the usual Github email storm. Let me try it all again and ensure I have the latest versions. I realised it was also easy to miss an update to a running local Supabase after updating the CLI, so I made a few scripts to better ensure latest versions of the images.

@mandarini

Copy link
Copy Markdown
Contributor

@holm if you see an issue, can you please open a new issue? It will be super helpful! Thank you!!! 💚

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.

5 participants