Skip to content

feat(realtime): use phoenix js lib in realtime implementation - #14

Closed
GuzekAlan wants to merge 60 commits into
masterfrom
swm/realtime-use-phoenix
Closed

GuzekAlan wants to merge 60 commits into
masterfrom
swm/realtime-use-phoenix

Conversation

@GuzekAlan

@GuzekAlan GuzekAlan commented Jan 12, 2026

Copy link
Copy Markdown
Member

🔍 Description

Make realtime-js use phoenix js library to handle most of the logic.

What changed?

Most of the code now uses adapters to use phoenix API

Why was this change needed?

It shifts the responsibility for creating, handling, and cleaning connections and channels to phoenix js library. Only Supabase related logic for auth, and bindings filtering/formatting along exposing proper API is contained in the realtime-js

Closes #(issue_number)

🔄 Breaking changes

  • there is no way to subscribe after unsusbcirbe - it wasn't working properly in the original implementation

  • WebSocket implementation errors will be thrown in constructor (instead of connect) -since getWebsocketConstructor is used in RealtimeClient.constructor

  • calling on with presence after subscribe will result in error - due to no resubscribe funcitonality

  • no teardown on RealtimeClient.disconnect - now channels are maintaining it's information and when socket is reconnected they keep working (this is the way phoenix does it)

  • callbacks (used in on method) can take joinRef as a 3rd parameter

  • 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 npx nx format to ensure consistent code formatting
  • I have added tests for new functionality (if applicable)
  • I have updated documentation (if applicable)

📝 Additional notes

In this PR some tests are removed because they are moved to https://github.com/supabase/phoenix

GuzekAlan and others added 15 commits December 10, 2025 10:37
…pabase phonix git dep (#3)

* feat(realtime): add submodule for phoenix, change deps

* fix(realtime): add temporary types since types/phoenix was removed

* feat(realtime): use phoenix consts

* fix(realtime): rename vitest extension

* fix(realtime): cannot import form path

* feat(realtime): add phoenixAdapter with basic stuff

* fix(realtime): add path to compile project

* feat(realtime): make presence use phoenixAdapter

* feat(realtime): use github path instead of git submodules

* fix(realtime): update phoenix github dependency

* fix(realtime): properly export constatns with types form phoenix

* fix(realtime): use proper types in phoenixAdapter, fix package-lock file

* fix(realtime): small changes

* fix(realtime): add and remove comments

* fix(realtime): use proper url string

* fix(realtime): better imports, fix constatns

* fix(realtime): point to branch, fix commnet place

* fix(realtime): change config file extension

* feat(realtime): update phoenix dep, remove ts-ignore

* fix(realtime): fix config extension

* fix(realtime): generic helper function in phoenixAdapter

* feat(realtime): update dep to supabase/phoenix

* fix(realtime): remove unuse function

* feat(realtime): better presence translation code, split into files

* fix(realtime): fix cloneDeep function

* fix(realtime): change privarte to internal in docs
Removed tests check behavior that is also checked in phoenix codebase.
* feat(realtime): add phoenixAdapter, refactor RealtimePresence, use supabase phonix git dep (#3)

* feat(realtime): add submodule for phoenix, change deps

* fix(realtime): add temporary types since types/phoenix was removed

* feat(realtime): use phoenix consts

* fix(realtime): rename vitest extension

* fix(realtime): cannot import form path

* feat(realtime): add phoenixAdapter with basic stuff

* fix(realtime): add path to compile project

* feat(realtime): make presence use phoenixAdapter

* feat(realtime): use github path instead of git submodules

* fix(realtime): update phoenix github dependency

* fix(realtime): properly export constatns with types form phoenix

* fix(realtime): use proper types in phoenixAdapter, fix package-lock file

* fix(realtime): small changes

* fix(realtime): add and remove comments

* fix(realtime): use proper url string

* fix(realtime): better imports, fix constatns

* fix(realtime): point to branch, fix commnet place

* fix(realtime): change config file extension

* feat(realtime): update phoenix dep, remove ts-ignore

* fix(realtime): fix config extension

* fix(realtime): generic helper function in phoenixAdapter

* feat(realtime): update dep to supabase/phoenix

* fix(realtime): remove unuse function

* feat(realtime): better presence translation code, split into files

* fix(realtime): fix cloneDeep function

* fix(realtime): change privarte to internal in docs

* feat(realtime): move PoC for RealtimeClient and RealtimeChannel

* fix(realtime): fix phoenixAdapter, make realtime work

* fix(realtime): clear code, add types, make consistent

* fix(realtime): cleaning, making supabase tests work

* fix(realtime): more cleaning and checking

* fix(realtime): import directly from pheonix, use type instead of interface

* fix(realtime): use functions directly from channelAdapter

* fix(realtime): use websocket factory

* fix(realtime): remove infered types, make trigger more private, small fixes

* fix(realtime): add ts-ignore for connectionState
* fix(realtime): fix joinedOnce

* fix(realtime): fix conn
* fix(realtime): update types from phoenix

* fix(realtime): fix type import/export

* fix(realtime): cleaner types
* fix(realtime): better error message on connect

* fix(realtime): remove unused method

* feat(realtime): make disconnect and async function to wait for the end of phoenix disconnect

* fix(realtime): remove not necessary testing stuff

* fix(realtime): fix conn in test

* fix(realtime): test websocket factory in different way

* fix(realtime): disconnect is async

* fix(realtime): better websocket server mocking

* wip

* fix(realtime): update types from phoenix

* fix(realtime): fix type import/export

* Revert "wip"

This reverts commit d2e4342.

* fix(realtime): fix lifecycle tests

* fix(realtime): remove unnecessary lines in test

* fix(realtime): cleanup after tests with testClient

* fix(realtime): post merge fix
* fix(realtime): update types from phoenix

* fix(realtime): fix type import/export

* fix(realtime): first test fixed

* fix(realtime): fix second test

* fix(realtime): add dataSpy to auth tests, better auth helpers

* fix(realtime): fix token setting and updates tests

* fix(realtime): fix som auth tests by using helpers

* fix(realtime): auth test more fixes

* fix(realtime): add reconnect test for auth

* feat(realtime): add shuffle for tests

* fix(realtime): fix sendHeartbeat

* fix(realtime): override heartbeatCallback with auth, use phoenix heartbeatCallback

* fix(realtime): small changes

* fix(realtime): heartbeat changes

* fix(realtime): better test helpers. fix auth tests

* fix(realtime): cr changes
* feat(realtime): add return values in adapters

* fix(realtime): fix bindings filter, remove return type in realtime
GuzekAlan and others added 13 commits January 12, 2026 15:23
* fix(realtime): better setup

* fix(realtime): fix lifecycle test

* fix(realtime): fix resilience tests

* fix(realtime): cleaning in error tests

* fix(realtime): remove tests which are in phoenix
…ore/merge-master

chore(realtime): merge master
* fix(realtime): fix setup helper with passing apikey and params

* fix(realtime): fix config tests

* feat(realtime): add test for choosing correct encoder

* fix(realtime): undo removing test
* fix(realtime): fix first auth test

* fix(realtime): cleanup and add default phx join payload

* fix(realtime): fix auth resubscribe tests

* fix(realtime): refactor test to look ok
GuzekAlan and others added 22 commits February 2, 2026 16:31
* feat: fix `RealtimeChannel.errors.test.ts`

* feat(realtime): better setup functionalities

* fix(realtime): fix lifecycle test, remove printing

* fix(realtime): fix realtimechannel.error tests

* fix(realtime): delete unused function, add max push buffer

* fix(realtime): discard messages without ref

* fix(realtime): formatting

* fix(realtime): delete teardown tests

* fix(realtime): use waitForChannelSubscribed

* fix(realtime): use TestSetup waiters for connected and closed socket

* cr changes

---------

Co-authored-by: Dominik Pilipczuk <63516830+snickerdoodle2@users.noreply.github.com>
* feat: fix `RealtimeChannel.integration.test.ts`

* review + format

* use new helpers
* fix(realtime): fix postgres subscription validation tests

* fix(realtime): postgres binding matching behaviour tests

* fix(realtime): filterTransform fixed, postgres changes trigger tests

* fix(realtime): postgres tests

* fix(realtime): remove legacy test
* wip

* fix(realtime): push tests

* fix(realtime): fix rest of tests
* fix(realtime): fix tests

* fix(realtime): code changes

* wip

* fix(realtime): reconnectTimer fixed, tests adjusted

* fix(realtime): remove coments

* fix(realtime): review fixes

* fix(realtime): use clearInterval only for worker heartbeat timer

* fix(realtime): fix test, remove unused import
#40)

* fix(realtime): add comment, fix presenceAdapter.test, add socketAdapter.test

* fix(realtime): better test name
* fix(realtime): fix updateJoinPayload

* fix(realtime): add test
* fix(realtime): remove test which has no sense now

* fix(realtime): fix auth tests
@GuzekAlan GuzekAlan changed the title feat(realtime): use phoenix-js in realtime feat(realtime): use phoenix js lib in realtime implementation Feb 13, 2026
@coveralls

coveralls commented Feb 16, 2026

Copy link
Copy Markdown

Pull Request Test Coverage Report for Build 22135175025

Warning: This coverage report may be inaccurate.

This pull request's base commit is no longer the HEAD commit of its target branch. This means it includes changes from outside the original pull request, including, potentially, unrelated coverage changes.

Details

  • 804 of 845 (95.15%) changed or added relevant lines in 10 files are covered.
  • 35 unchanged lines in 6 files lost coverage.
  • Overall coverage decreased (-0.9%) to 81.973%

Changes Missing Coverage Covered Lines Changed/Added Lines %
packages/core/realtime-js/src/RealtimeChannel.ts 152 154 98.7%
packages/core/realtime-js/src/phoenix/channelAdapter.ts 96 102 94.12%
packages/core/realtime-js/test/helpers/auth.ts 33 40 82.5%
packages/core/realtime-js/src/phoenix/socketAdapter.ts 105 115 91.3%
packages/core/realtime-js/src/RealtimeClient.ts 198 214 92.52%
Files with Coverage Reduction New Missed Lines %
packages/core/realtime-js/src/RealtimeChannel.ts 1 98.57%
packages/core/realtime-js/test/helpers/setup.ts 1 97.53%
packages/core/postgrest-js/src/PostgrestClient.ts 1 82.11%
packages/core/realtime-js/src/RealtimeClient.ts 4 94.81%
packages/core/auth-js/src/lib/locks.ts 7 83.33%
packages/core/auth-js/src/GoTrueAdminApi.ts 21 80.66%
Totals Coverage Status
Change from base Build 21868882799: -0.9%
Covered Lines: 4785
Relevant Lines: 5489

💛 - Coveralls

fix(realtime): add dosctring or mark internal

fix(realtime): helper spread order changed

fix(realtime): better error check in test

fix(realtime): add missing await

fix(realtime): combine test helpers

fix(realtime): remove unused statement in test

fix(realtime): add missing await

fix(realtime): better test for leaveOpenTopic

fix(realtime): add missing cleanup

fix(realtime): add missing await

fix(realtime): avoid async describe

fix(realtime): correct constatnt used

fix(realtime): restore if test errors

fix(realtime): await disconnect

fix(realtime): mark adapters as internal or private
@GuzekAlan GuzekAlan closed this Feb 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants