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

Uncaught TypeError: this._transport.close is not a function #268

Open
Cluster2a opened this issue Jan 17, 2024 · 5 comments
Open

Uncaught TypeError: this._transport.close is not a function #268

Cluster2a opened this issue Jan 17, 2024 · 5 comments

Comments

@Cluster2a
Copy link

Cluster2a commented Jan 17, 2024

Describe the bug
If the websocket connection is blocked a reconnect & close raises en error.

To Reproduce

  1. block websockets using https://stackoverflow.com/questions/30912854/is-it-possible-to-temporarily-disable-a-websockets-connection-in-a-local-server (TamperMonkey extension via Chrome)
  2. run the connect()
  3. wait a few seconds
  4. exception raises:
    image

As you can see the _startReconnecting() is being executed and later the close().
image

Expected behavior
If websockets is blocked, there should not be an exception

Screenshots
If applicable, add screenshots to help explain your problem.

Versions

  • OS: Ubuntu 23.10
  • Browser or environment with version: Version 120.0.6099.216
  • Centrifuge client version: 5.0.1
@FZambia
Copy link
Member

FZambia commented Jan 18, 2024

Hello @Cluster2a

You are using custom script which modifies WebSocket object breaking WebSocket API provided by browser. So that when centrifuge-js tries to close the transport (upon connect timeout firing) – it calls non-existing close method.

Is the only problem you have is this one, when using this custom script for TamperMonkey?

@Cluster2a
Copy link
Author

@FZambia, I see this error message from time to time in our sentry log and I could't figure out, what is causing this (mainly mac users). I doubt they are using this kind of script to block the websocket connection, but I am not 100% sure.

image

@FZambia
Copy link
Member

FZambia commented Jan 20, 2024

I looked through the code base. If we assume that there are no scripts like above – such error may happen when transport is created (like new WebsocketTransport), then transport.close is called before the transport was initialized (with transport.initialize). I don't see a straightforward path for such thing - centrifuge-js always initializes transport right after constructing it.

Do you have 5.0.1 in production too?

@Cluster2a
Copy link
Author

@FZambia, in production I am using the same version. Okay - that is weired. Not sure what is causing this.

@FZambia
Copy link
Member

FZambia commented Jan 20, 2024

Probably there is a path in the code I am missing, and some browser specifics may also have role here. Will try to look again and think whether there are some non-obvious scenarios. Could you gather more information about this: only Mac + Safari or Chrome also? Does it affect user ability to connect to your service or just happens occasionally? Getting debug logs would be nice also - but I realize this may be hard to get.

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

No branches or pull requests

2 participants