auth0 / node-auth0

Node.js client library for the Auth0 platform.
MIT License
630 stars 309 forks source link

"Socket hang up" not handled by Retry configuration #1020

Open kbkk opened 2 months ago

kbkk commented 2 months ago

Checklist

Description

We occasionally see failed auth0 requests due to "socket hang up" - it causes our app's flow to break as we didn't expect this is something that needs handling.

The existing retry implementation can only handle failed requests based on statusCode, which does not apply in this case: https://github.com/auth0/node-auth0/blob/17bac364c4101491ff7708a1803fd6dda8814063/src/lib/retry.ts#L66-L70

Expectations:

Logs and traces:

      "fields": {
        "exception.message": "socket hang up",
        "exception.type": "ECONNRESET",
        "event": "exception",
        "exception.stacktrace": "Error: socket hang up\n    at connResetException (node:internal/errors:720:14)\n    at TLSSocket.socketOnEnd (node:_http_client:525:23)\n    at TLSSocket.emit (node:events:529:35)\n    at TLSSocket.emit (node:domain:489:12)\n    at endReadableNT (node:internal/streams/readable:1400:12)\n    at process.processTicksAndRejections (node:internal/process/task_queues:82:21)"
      },
    "duration": 702769,
    "http.url": "https://my-tenant.us.auth0.com/oauth/token",
    "http.target": "/oauth/token",
    "otel.status_description": "socket hang up",
APIError: socket hang up
at /usr/src/app/node_modules/rest-facade/src/Client.js:402:25
at Request.callback (/usr/src/app/node_modules/rest-facade/node_modules/superagent/lib/node/index.js:943:3)
at ClientRequest.<anonymous> (/usr/src/app/node_modules/rest-facade/node_modules/superagent/lib/node/index.js:860:12)

Reproduction

  1. I cannot think of an easy reproduction - probably needs some fault injection/mocking to trigger it easily.

Sample code:

export const authClient = new AuthenticationClient({
  domain: config.domain,
  clientId: config.clientId,
  clientSecret: config.clientSecret,
});

await authClient.passwordGrant({
      username: user_email,
      password: user_password,
      audience: config.audience,
    });

Additional context

No response

node-auth0 version

3.7.2

Node.js version

18.20.4