Identifies a connection outage without mutating the thrown value.
Measured with ioredis 5.11.1 and a throwaway Redis 7: paused with commandTimeout → Error / "Command timed out"; stopped or connection-refused with retries → MaxRetriesPerRequestError / "Reached the max retries per request limit (which is 20). Refer to "maxRetriesPerRequest" option for details." (also measured with limit 1); refused without reconnect or explicitly disconnected → Error / "Connection is closed."; offline queue disabled → Error / "Stream isn't writeable and enableOfflineQueue options is false". All four command rejections had no code and no cause. Connection refusal also emitted Error / "connect ECONNREFUSED 127.0.0.1:63799" / code ECONNREFUSED, with no cause. Measured with node-redis 6.3.1: never-connected/closed → "The client is closed"; offline queue disabled → "The client is offline"; stopped server → "Socket closed unexpectedly"; connect timeout → "Connection timeout"; paused server with socketTimeout → "Socket timeout timeout. Expecting data, but didn't receive any in 300ms." All have name "Error"; the timeout's milliseconds vary with configuration. WRONGTYPE stays unclassified.
Walks at most five objects, stopping at cycles. Unknown values, frozen errors and throwing accessors are safe; Redis command errors such as WRONGTYPE and unrelated programming errors remain unclassified.
The thrown value, possibly wrapping a driver error as cause
Whether a measured outage signal appears in the bounded chain
Shared connection-outage classifier and network errno vocabulary.