From 8eed0189bbade2b366705f77f3d645d4972a6f4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa?= Date: Wed, 8 Jul 2026 16:32:10 +0200 Subject: [PATCH] [PM-35903] Update clients to node 24 (#20400) * [PM-35903] Update clients to node 24 * Fix lockfile * Add missing jest dep * Fix dispose polyfill * Revert jest-jsdom * Bump dockerfile * Add missing dep * Fix node 24.16 bug --------- Co-authored-by: kmancusi0105 --- .github/workflows/build-cli.yml | 1 - .nvmrc | 2 +- apps/cli/.nvmrc | 1 + apps/cli/package.json | 4 ++++ .../biometrics/main-biometrics.service.spec.ts | 7 +++++++ .../biometrics/os-biometrics-mac.service.spec.ts | 7 +++++++ apps/web/Dockerfile | 2 +- .../login-decryption-options.component.spec.ts | 4 +++- package-lock.json | 8 ++++++-- package.json | 4 ++-- 10 files changed, 32 insertions(+), 8 deletions(-) create mode 100644 apps/cli/.nvmrc diff --git a/.github/workflows/build-cli.yml b/.github/workflows/build-cli.yml index 0d8b4156b1c..b3a5e796281 100644 --- a/.github/workflows/build-cli.yml +++ b/.github/workflows/build-cli.yml @@ -72,7 +72,6 @@ jobs: - name: Get Node Version id: retrieve-node-version - working-directory: ./ run: | NODE_NVMRC=$(cat .nvmrc) NODE_VERSION="${NODE_NVMRC/v/''}" diff --git a/.nvmrc b/.nvmrc index 53d1c14db37..54c65116f15 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v22 +v24 diff --git a/apps/cli/.nvmrc b/apps/cli/.nvmrc new file mode 100644 index 00000000000..53d1c14db37 --- /dev/null +++ b/apps/cli/.nvmrc @@ -0,0 +1 @@ +v22 diff --git a/apps/cli/package.json b/apps/cli/package.json index 48d0fb7b3f5..b8a81e1bc9b 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -90,5 +90,9 @@ "semver": "7.7.3", "tldts": "7.4.2", "zxcvbn": "4.4.2" + }, + "engines": { + "node": "~22", + "npm": "~10" } } diff --git a/apps/desktop/src/key-management/biometrics/main-biometrics.service.spec.ts b/apps/desktop/src/key-management/biometrics/main-biometrics.service.spec.ts index ea488bc80c6..6277be3be3e 100644 --- a/apps/desktop/src/key-management/biometrics/main-biometrics.service.spec.ts +++ b/apps/desktop/src/key-management/biometrics/main-biometrics.service.spec.ts @@ -19,6 +19,13 @@ import { LinuxBiometricsSystem, WindowsBiometricsSystem } from "./native-v2"; import OsBiometricsServiceMac from "./os-biometrics-mac.service"; import { OsBiometricService } from "./os-biometrics.service"; +jest.mock("electron", () => ({ + systemPreferences: { + canPromptTouchID: jest.fn(), + promptTouchID: jest.fn(), + }, +})); + jest.mock("@bitwarden/desktop-napi", () => { return { passwords: jest.fn(), diff --git a/apps/desktop/src/key-management/biometrics/os-biometrics-mac.service.spec.ts b/apps/desktop/src/key-management/biometrics/os-biometrics-mac.service.spec.ts index 6d20095d8bb..9942df30934 100644 --- a/apps/desktop/src/key-management/biometrics/os-biometrics-mac.service.spec.ts +++ b/apps/desktop/src/key-management/biometrics/os-biometrics-mac.service.spec.ts @@ -7,6 +7,13 @@ import { passwords } from "@bitwarden/desktop-napi"; import OsBiometricsServiceMac from "./os-biometrics-mac.service"; +jest.mock("electron", () => ({ + systemPreferences: { + canPromptTouchID: jest.fn(), + promptTouchID: jest.fn(), + }, +})); + jest.mock("@bitwarden/desktop-napi", () => ({ biometrics: { setBiometricSecret: jest.fn(), diff --git a/apps/web/Dockerfile b/apps/web/Dockerfile index 361b0de7e04..b88f762d0e8 100644 --- a/apps/web/Dockerfile +++ b/apps/web/Dockerfile @@ -1,7 +1,7 @@ ############################################### # Node.js build stage (alpine) # ############################################### -ARG NODE_VERSION=20 +ARG NODE_VERSION=24 FROM --platform=$BUILDPLATFORM node:${NODE_VERSION}-alpine AS node-build WORKDIR /source diff --git a/libs/auth/src/angular/login-decryption-options/login-decryption-options.component.spec.ts b/libs/auth/src/angular/login-decryption-options/login-decryption-options.component.spec.ts index 1c7cdfac675..f31e7074792 100644 --- a/libs/auth/src/angular/login-decryption-options/login-decryption-options.component.spec.ts +++ b/libs/auth/src/angular/login-decryption-options/login-decryption-options.component.spec.ts @@ -1,3 +1,6 @@ +// Polyfill for Symbol.dispose required by the service's use of `using` keyword +import "core-js/proposals/explicit-resource-management"; + // Mock asUuid to return the input value for test consistency jest.mock("@bitwarden/common/platform/abstractions/sdk/sdk.service", () => ({ asUuid: (x: any) => x, @@ -163,7 +166,6 @@ describe("LoginDecryptionOptionsComponent", () => { jest.mock("@bitwarden/common/platform/abstractions/sdk/sdk.service", () => ({ asUuid: (x: any) => x, })); - (Symbol as any).dispose = Symbol("dispose"); mockPrivateKey = "mock-private-key"; mockSignedPublicKey = "mock-signed-public-key"; diff --git a/package-lock.json b/package-lock.json index c9ef7c96b01..ac469ba3d6b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -193,8 +193,8 @@ "webpack-node-externals": "3.0.0" }, "engines": { - "node": ">=22.12.0", - "npm": "~10" + "node": ">=24.17.0", + "npm": "~11" } }, "apps/browser": { @@ -236,6 +236,10 @@ }, "bin": { "bw": "build/bw.js" + }, + "engines": { + "node": "~22", + "npm": "~10" } }, "apps/desktop": { diff --git a/package.json b/package.json index 23664c144bf..bb49b1ed37c 100644 --- a/package.json +++ b/package.json @@ -241,7 +241,7 @@ "tmp": ">=0.2.4" }, "engines": { - "node": ">=22.12.0", - "npm": "~10" + "node": ">=24.17.0", + "npm": "~11" } }