diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3c845a8d801fc..00531cba7ffcd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,7 +23,7 @@ jobs: matrix: # Include all major maintenance + active LTS + current Node.js versions. # https://github.com/nodejs/Release#release-schedule - node: [14, 16] + node: [14, 16, 18] steps: - name: Checkout uses: actions/checkout@v3 diff --git a/src/node/NodeWebSocketTransport.ts b/src/node/NodeWebSocketTransport.ts index 78a60781e6a8b..03b4a925e4ef6 100644 --- a/src/node/NodeWebSocketTransport.ts +++ b/src/node/NodeWebSocketTransport.ts @@ -16,9 +16,21 @@ import NodeWebSocket from 'ws'; import { ConnectionTransport } from '../common/ConnectionTransport.js'; import { packageVersion } from '../generated/version.js'; +import { promises as dns } from 'dns'; export class NodeWebSocketTransport implements ConnectionTransport { - static create(url: string): Promise { + static async create(urlString: string): Promise { + // TODO(jrandolf): Starting in Node 17, IPv6 is favoured over IPv4 due to a change + // in a default option: + // - https://github.com/nodejs/node/issues/40537, + // Due to this, we parse and resolve the hostname manually with the previous + // behavior according to: + // - https://nodejs.org/api/dns.html#dnslookuphostname-options-callback + // because of https://bugzilla.mozilla.org/show_bug.cgi?id=1769994. + const url = new URL(urlString); + const { address } = await dns.lookup(url.hostname, { verbatim: false }); + url.hostname = address; + return new Promise((resolve, reject) => { const ws = new NodeWebSocket(url, [], { followRedirects: true,