Mark Pigge created TINKERPOP-3160: ------------------------------------- Summary: Node.js 22+: Gremlin Fails with network error and HTTP 101 Status Due to WebSocket Limitation in undici Key: TINKERPOP-3160 URL: https://issues.apache.org/jira/browse/TINKERPOP-3160 Project: TinkerPop Issue Type: Bug Components: javascript Affects Versions: 3.7.3 Reporter: Mark Pigge
*📌 Overview:* After upgrading to {*}Node.js 22 or newer{*}, applications using the *Gremlin driver* encounter {{network error}} failures when trying to connect to graph database AWS Neptune. These failures are caused by the removal of built-in WebSocket support in Node.js and reliance on {{{}undici{}}}, which does *not support custom headers* or handle the WebSocket handshake properly in this context. ---- *❌ Symptoms:* * {{Gremlin}} client fails to connect * Network error during connection * HTTP 101 Switching Protocols error with no upgrade * Headers like {{Authorization}} or {{Host}} are missing or ignored * Stack trace shows underlying issues in WebSocket handshake ---- *🎯 Root Cause:* * Node.js 22+ no longer includes a global {{WebSocket}} implementation * The fallback (via {{{}undici{}}}) *does not support* custom headers * This breaks clients that rely on authenticated WebSocket connections (like Gremlin) * Result: WebSocket upgrade fails with a 101 status and unresolved {{network error}} ---- *✅ Workaround:* You can override the default WebSocket globally with the {{ws}} library, which supports custom headers and proper handshake behavior. import \{ WebSocket as WS } from 'ws'; (globalThis as any).WebSocket = WS; This should be done *early in your application startup* before any Gremlin connections are created. ---- *📄 Example Fix for Gremlin Driver:* import \{ WebSocket as WS } from 'ws'; (globalThis as any).WebSocket = WS; import \{ DriverRemoteConnection } from 'gremlin'; const connection = new DriverRemoteConnection( 'wss://your-gremlin-endpoint:8182/gremlin', \{ // headers like Authorization must now be passed via a custom WebSocket } ); ---- *📚 References:* * Node.js change: [{{undici}} removed WebSocket support|https://github.com/nodejs/undici/discussions/3836] * Community write-up: [Resolving Gremlin network errors after upgrading to Node.js 23|https://medium.com/@python-javascript-php-html-css/resolving-gremlin-network-errors-after-upgrading-to-node-js-23-3591c0e45caa] -- This message was sent by Atlassian Jira (v8.20.10#820010)