From e6cd53de9c1daa41def62ef067a17360a1f8c8c7 Mon Sep 17 00:00:00 2001 From: Aditya Agarwal Date: Tue, 10 Mar 2026 16:47:15 +0100 Subject: [PATCH 1/6] feat: add Node 24 support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Migrate url.parse() to WHATWG URL API (DEP0169 runtime deprecation in Node 24) - src/redirect_url.ts: Url.parse() → new URL() - test/unit/node/redirect_test.js: url.parse().query → new URL().search - test/integration/cloud/reaction.js: url.parse(x, true) → new URL() - Add Node 24 to unit test matrix --- .github/workflows/unit.yml | 2 +- src/redirect_url.ts | 10 +++++++--- test/integration/cloud/reaction.js | 4 ++-- test/unit/node/redirect_test.js | 5 ++--- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/.github/workflows/unit.yml b/.github/workflows/unit.yml index 0360ab64..413657ed 100644 --- a/.github/workflows/unit.yml +++ b/.github/workflows/unit.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node: [16, 18] + node: [16, 18, 24] steps: - uses: actions/checkout@v3 - uses: ./.github/actions/setup-node diff --git a/src/redirect_url.ts b/src/redirect_url.ts index 48f421f7..7c005454 100644 --- a/src/redirect_url.ts +++ b/src/redirect_url.ts @@ -1,4 +1,3 @@ -import Url from 'url'; import qs from 'qs'; import { StreamClient } from './client'; @@ -20,10 +19,15 @@ import { JWTScopeToken } from './signing'; * @return {string} The redirect url */ export default function createRedirectUrl(this: StreamClient, targetUrl: string, userId: string, events: unknown[]) { - const uri = Url.parse(targetUrl); + let uri: URL; + try { + uri = new URL(targetUrl); + } catch { + throw new MissingSchemaError(`Invalid URI: "${targetUrl}"`); + } if (!(uri.host || (uri.hostname && uri.port))) { - throw new MissingSchemaError(`Invalid URI: "${Url.format(uri)}"`); + throw new MissingSchemaError(`Invalid URI: "${targetUrl}"`); } const authToken = JWTScopeToken(this.apiSecret as string, 'redirect_and_track', '*', { diff --git a/test/integration/cloud/reaction.js b/test/integration/cloud/reaction.js index b5f8343c..4e2a7453 100644 --- a/test/integration/cloud/reaction.js +++ b/test/integration/cloud/reaction.js @@ -1,5 +1,4 @@ /* eslint-disable no-await-in-loop */ -import url from 'url'; import expect from 'expect.js'; import { CloudContext } from './utils'; @@ -144,7 +143,8 @@ describe('Reaction pagination', () => { expectedQuery.user_id = ctx.bob.userId; } - const { query } = url.parse(extra.next, true); + const parsedUrl = new URL(extra.next, 'http://localhost'); + const query = Object.fromEntries(parsedUrl.searchParams.entries()); latestExtra[kind].next.should.include('/activity_id/'); latestExtra[kind].next.should.include(`/${kind}/`); latestExtra[kind].next.should.include(`/${ctx.activity.id}/`); diff --git a/test/unit/node/redirect_test.js b/test/unit/node/redirect_test.js index 47ebbdd9..bb36bbd0 100644 --- a/test/unit/node/redirect_test.js +++ b/test/unit/node/redirect_test.js @@ -1,4 +1,3 @@ -import url from 'url'; import expect from 'expect.js'; import jwt from 'jsonwebtoken'; import qs from 'qs'; @@ -39,7 +38,7 @@ describe("[UNIT] Redirect URL's", function () { this.client = new StreamClient(config.API_KEY, config.API_SECRET); const redirectUrl = this.client.createRedirectUrl(targetUrl, userId, events); - const queryString = qs.parse(url.parse(redirectUrl).query); + const queryString = qs.parse(new URL(redirectUrl).search, { ignoreQueryPrefix: true }); const decoded = jwt.verify(queryString.authorization, config.API_SECRET); expect(decoded).to.eql({ @@ -82,7 +81,7 @@ describe("[UNIT] Redirect URL's", function () { this.client = new StreamClient(config.API_KEY, config.API_SECRET); const redirectUrl = this.client.createRedirectUrl(targetUrl, userId, events); - const queryString = qs.parse(url.parse(redirectUrl).query); + const queryString = qs.parse(new URL(redirectUrl).search, { ignoreQueryPrefix: true }); const decoded = jwt.verify(queryString.authorization, config.API_SECRET); expect(decoded).to.eql({ From ae3b1fb5e6fb2acdd21e1fd401315c2d29adea39 Mon Sep 17 00:00:00 2001 From: Zita Szupera Date: Wed, 11 Mar 2026 09:33:42 +0100 Subject: [PATCH 2/6] Restore node 24 in setup-node --- .github/actions/setup-node/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/setup-node/action.yml b/.github/actions/setup-node/action.yml index c0afe563..121dfc46 100644 --- a/.github/actions/setup-node/action.yml +++ b/.github/actions/setup-node/action.yml @@ -4,7 +4,7 @@ description: Sets up Node and Build SDK inputs: node-version: required: false - default: '22' + default: '24' runs: using: 'composite' From d6221f25860f84a7397e611fbd7acbd833b90ca5 Mon Sep 17 00:00:00 2001 From: Zita Szupera Date: Wed, 11 Mar 2026 10:11:43 +0100 Subject: [PATCH 3/6] Fix tests on node 24 --- package.json | 9 +- test/unit/node/client_test.js | 5 +- yarn.lock | 186 +++++++++++++++++++++++++++++++++- 3 files changed, 193 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index ffd41ff8..9c3299bc 100644 --- a/package.json +++ b/package.json @@ -25,10 +25,10 @@ "lint-fix": "prettier --write '**/*.{js,ts}' && eslint --fix '**/*.{js,ts}'", "test": "yarn run test-unit-node", "test-types": "tsc --skipLibCheck --target es2020 --esModuleInterop true --noEmit true test/typescript/*.ts", - "test-unit-node": "mocha --require ./babel-register.js test/unit/common test/unit/node", - "test-integration-node": "mocha --require ./babel-register.js test/integration/common test/integration/node --exit", - "test-cloud": "mocha --require ./babel-register.js test/integration/cloud --timeout 40000 --exit", - "test-cloud-local": "LOCAL=true mocha --require ./babel-register.js test/integration/cloud --timeout 40000 --ignore 'test/integration/cloud/{personalized_feed,files,images}.js'", + "test-unit-node": "mocha --require tsx/cjs --require dotenv/config test/unit/common test/unit/node", + "test-integration-node": "mocha --require tsx/cjs --require dotenv/config test/integration/common test/integration/node --exit", + "test-cloud": "mocha --require tsx/cjs --require dotenv/config test/integration/cloud --timeout 40000 --exit", + "test-cloud-local": "LOCAL=true mocha --require tsx/cjs --require dotenv/config test/integration/cloud --timeout 40000 --ignore 'test/integration/cloud/{personalized_feed,files,images}.js'", "test-browser": "karma start karma.config.js", "prepare": "yarn run build", "preversion": "yarn run test-unit-node", @@ -104,6 +104,7 @@ "request": "^2.88.2", "standard-version": "^9.3.2", "testdouble": "3.20.0", + "tsx": "^4.21.0", "typescript": "^5.2.2", "webpack": "^5.89.0", "webpack-cli": "^5.1.1" diff --git a/test/unit/node/client_test.js b/test/unit/node/client_test.js index 19a3919e..ba2f4a22 100644 --- a/test/unit/node/client_test.js +++ b/test/unit/node/client_test.js @@ -1,8 +1,9 @@ import expect from 'expect.js'; import * as td from 'testdouble'; import { jwtDecode } from 'jwt-decode'; - -import pkg from '../../../package.json'; +import { createRequire } from 'node:module'; +const require = createRequire(import.meta.url); +const pkg = require('../../../package.json'); import { connect, StreamClient, StreamFeed } from '../../../src'; import { beforeEachFn } from '../utils/hooks'; diff --git a/yarn.lock b/yarn.lock index c5b9314d..7e7a0a70 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1242,6 +1242,136 @@ resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== +"@esbuild/aix-ppc64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz#815b39267f9bffd3407ea6c376ac32946e24f8d2" + integrity sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg== + +"@esbuild/android-arm64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz#19b882408829ad8e12b10aff2840711b2da361e8" + integrity sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg== + +"@esbuild/android-arm@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.27.3.tgz#90be58de27915efa27b767fcbdb37a4470627d7b" + integrity sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA== + +"@esbuild/android-x64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.27.3.tgz#d7dcc976f16e01a9aaa2f9b938fbec7389f895ac" + integrity sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ== + +"@esbuild/darwin-arm64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz#9f6cac72b3a8532298a6a4493ed639a8988e8abd" + integrity sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg== + +"@esbuild/darwin-x64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz#ac61d645faa37fd650340f1866b0812e1fb14d6a" + integrity sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg== + +"@esbuild/freebsd-arm64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz#b8625689d73cf1830fe58c39051acdc12474ea1b" + integrity sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w== + +"@esbuild/freebsd-x64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz#07be7dd3c9d42fe0eccd2ab9f9ded780bc53bead" + integrity sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA== + +"@esbuild/linux-arm64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz#bf31918fe5c798586460d2b3d6c46ed2c01ca0b6" + integrity sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg== + +"@esbuild/linux-arm@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz#28493ee46abec1dc3f500223cd9f8d2df08f9d11" + integrity sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw== + +"@esbuild/linux-ia32@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz#750752a8b30b43647402561eea764d0a41d0ee29" + integrity sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg== + +"@esbuild/linux-loong64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz#a5a92813a04e71198c50f05adfaf18fc1e95b9ed" + integrity sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA== + +"@esbuild/linux-mips64el@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz#deb45d7fd2d2161eadf1fbc593637ed766d50bb1" + integrity sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw== + +"@esbuild/linux-ppc64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz#6f39ae0b8c4d3d2d61a65b26df79f6e12a1c3d78" + integrity sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA== + +"@esbuild/linux-riscv64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz#4c5c19c3916612ec8e3915187030b9df0b955c1d" + integrity sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ== + +"@esbuild/linux-s390x@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz#9ed17b3198fa08ad5ccaa9e74f6c0aff7ad0156d" + integrity sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw== + +"@esbuild/linux-x64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz#12383dcbf71b7cf6513e58b4b08d95a710bf52a5" + integrity sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA== + +"@esbuild/netbsd-arm64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz#dd0cb2fa543205fcd931df44f4786bfcce6df7d7" + integrity sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA== + +"@esbuild/netbsd-x64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz#028ad1807a8e03e155153b2d025b506c3787354b" + integrity sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA== + +"@esbuild/openbsd-arm64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz#e3c16ff3490c9b59b969fffca87f350ffc0e2af5" + integrity sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw== + +"@esbuild/openbsd-x64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz#c5a4693fcb03d1cbecbf8b422422468dfc0d2a8b" + integrity sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ== + +"@esbuild/openharmony-arm64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz#082082444f12db564a0775a41e1991c0e125055e" + integrity sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g== + +"@esbuild/sunos-x64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz#5ab036c53f929e8405c4e96e865a424160a1b537" + integrity sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA== + +"@esbuild/win32-arm64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz#38de700ef4b960a0045370c171794526e589862e" + integrity sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA== + +"@esbuild/win32-ia32@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz#451b93dc03ec5d4f38619e6cd64d9f9eff06f55c" + integrity sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q== + +"@esbuild/win32-x64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz#0eaf705c941a218a43dba8e09f1df1d6cd2f1f17" + integrity sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA== + "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" @@ -3861,6 +3991,38 @@ es6-error@^4.0.1, es6-error@^4.1.1: resolved "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== +esbuild@~0.27.0: + version "0.27.3" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.27.3.tgz#5859ca8e70a3af956b26895ce4954d7e73bd27a8" + integrity sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg== + optionalDependencies: + "@esbuild/aix-ppc64" "0.27.3" + "@esbuild/android-arm" "0.27.3" + "@esbuild/android-arm64" "0.27.3" + "@esbuild/android-x64" "0.27.3" + "@esbuild/darwin-arm64" "0.27.3" + "@esbuild/darwin-x64" "0.27.3" + "@esbuild/freebsd-arm64" "0.27.3" + "@esbuild/freebsd-x64" "0.27.3" + "@esbuild/linux-arm" "0.27.3" + "@esbuild/linux-arm64" "0.27.3" + "@esbuild/linux-ia32" "0.27.3" + "@esbuild/linux-loong64" "0.27.3" + "@esbuild/linux-mips64el" "0.27.3" + "@esbuild/linux-ppc64" "0.27.3" + "@esbuild/linux-riscv64" "0.27.3" + "@esbuild/linux-s390x" "0.27.3" + "@esbuild/linux-x64" "0.27.3" + "@esbuild/netbsd-arm64" "0.27.3" + "@esbuild/netbsd-x64" "0.27.3" + "@esbuild/openbsd-arm64" "0.27.3" + "@esbuild/openbsd-x64" "0.27.3" + "@esbuild/openharmony-arm64" "0.27.3" + "@esbuild/sunos-x64" "0.27.3" + "@esbuild/win32-arm64" "0.27.3" + "@esbuild/win32-ia32" "0.27.3" + "@esbuild/win32-x64" "0.27.3" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" @@ -4562,7 +4724,7 @@ fs.realpath@^1.0.0: resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@~2.3.2: +fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== @@ -4703,6 +4865,13 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" +get-tsconfig@^4.7.5: + version "4.13.6" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.13.6.tgz#2fbfda558a98a691a798f123afd95915badce876" + integrity sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw== + dependencies: + resolve-pkg-maps "^1.0.0" + get-uri@^6.0.1: version "6.0.2" resolved "https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz" @@ -7550,6 +7719,11 @@ resolve-global@1.0.0, resolve-global@^1.0.0: dependencies: global-dirs "^0.1.1" +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.4, resolve@^1.22.8: version "1.22.8" resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" @@ -8532,6 +8706,16 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" +tsx@^4.21.0: + version "4.21.0" + resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.21.0.tgz#32aa6cf17481e336f756195e6fe04dae3e6308b1" + integrity sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw== + dependencies: + esbuild "~0.27.0" + get-tsconfig "^4.7.5" + optionalDependencies: + fsevents "~2.3.3" + tunnel-agent@*, tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" From 5c1a48cc9699dfaa39aec0c2149f2bafe1f2d3da Mon Sep 17 00:00:00 2001 From: Zita Szupera Date: Wed, 11 Mar 2026 10:23:39 +0100 Subject: [PATCH 4/6] Fix lint --- test/unit/node/client_test.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/test/unit/node/client_test.js b/test/unit/node/client_test.js index ba2f4a22..622288cf 100644 --- a/test/unit/node/client_test.js +++ b/test/unit/node/client_test.js @@ -2,11 +2,12 @@ import expect from 'expect.js'; import * as td from 'testdouble'; import { jwtDecode } from 'jwt-decode'; import { createRequire } from 'node:module'; -const require = createRequire(import.meta.url); -const pkg = require('../../../package.json'); import { connect, StreamClient, StreamFeed } from '../../../src'; import { beforeEachFn } from '../utils/hooks'; +const require = createRequire(import.meta.url); +const pkg = require('../../../package.json'); + describe('[UNIT] Stream Client instantiation (Node)', function () { it('with secret', function () { new StreamClient('stub-key', 'stub-secret', 9498); // eslint-disable-line no-new From 6a53a8a9df00e4554148adc071b7009f3f92cb46 Mon Sep 17 00:00:00 2001 From: Zita Szupera Date: Wed, 11 Mar 2026 10:30:12 +0100 Subject: [PATCH 5/6] Try runnning on node 16 too --- .github/workflows/unit.yml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/.github/workflows/unit.yml b/.github/workflows/unit.yml index 54bcbf49..ab9d6d5d 100644 --- a/.github/workflows/unit.yml +++ b/.github/workflows/unit.yml @@ -7,18 +7,11 @@ on: pull_request: jobs: - # TODO: remove once branch protection is updated to drop unit (16) - unit-legacy: - name: 'unit (16)' - runs-on: ubuntu-latest - steps: - - run: echo "Deprecated — Node 16 is EOL. This job exists only to satisfy branch protection." - unit: runs-on: ubuntu-latest strategy: matrix: - node: [18, 20, 22, 24] + node: [16, 18, 20, 22, 24] steps: - uses: actions/checkout@v4 - uses: ./.github/actions/setup-node From 02f0d8dc49a1e59e01f6d781cb4800ba1d71448d Mon Sep 17 00:00:00 2001 From: Zita Szupera Date: Wed, 11 Mar 2026 10:45:11 +0100 Subject: [PATCH 6/6] Restore removing node 16 --- .github/workflows/unit.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/unit.yml b/.github/workflows/unit.yml index ab9d6d5d..54bcbf49 100644 --- a/.github/workflows/unit.yml +++ b/.github/workflows/unit.yml @@ -7,11 +7,18 @@ on: pull_request: jobs: + # TODO: remove once branch protection is updated to drop unit (16) + unit-legacy: + name: 'unit (16)' + runs-on: ubuntu-latest + steps: + - run: echo "Deprecated — Node 16 is EOL. This job exists only to satisfy branch protection." + unit: runs-on: ubuntu-latest strategy: matrix: - node: [16, 18, 20, 22, 24] + node: [18, 20, 22, 24] steps: - uses: actions/checkout@v4 - uses: ./.github/actions/setup-node