awslabs / aws-mobile-appsync-sdk-js

JavaScript library files for Offline, Sync, Sigv4. includes support for React Native
Apache License 2.0
919 stars 266 forks source link

Subscription WebSocket establishment timeout errors cause TypeErrors instead of being properly logged and handled #635

Open tbartley opened 3 years ago

tbartley commented 3 years ago

Note: If your issue/feature-request/question is regarding the AWS AppSync service, please log it in the official AWS AppSync forum

Do you want to request a feature or report a bug?

Bug

What is the current behavior?

When attempts to establish the web socket for a subscription fail a TypeError results rather than the actual error being reported because the error object is not able to be JSON.stringify'ed in the log message of this code:

          this.awsRealTimeSocket.onerror = (error) => {
            logger(`WebSocket closed ${JSON.stringify(error)}`);
          };

for example:

    TypeError: Converting circular structure to JSON
        --> starting at object with constructor 'Timeout'
        |     property '_idlePrev' -> object with constructor 'TimersList'
        --- property '_idleNext' closes the circle
        at JSON.stringify (<anonymous>)
      at WebSocket._this.awsRealTimeSocket.onerror (node_modules/aws-appsync-subscription-link/lib/realtime-subscription-handshake-link.js:563:75)
      at WebSocket.onError (node_modules/ws/lib/EventTarget.js:109:16)
      at WebSocket.finalize (node_modules/ws/lib/WebSocket.js:182:41)

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem.

Reproduces on connection timeout.

What is the expected behavior?

These errors are handled more gracefully.

Which versions and which environment (browser, react-native, nodejs) / OS are affected by this issue? Did this work in previous versions?

4.0.3, nodejs.