From c5fc4ba70bb43db0598f83f908e0c82443f9bfe7 Mon Sep 17 00:00:00 2001 From: Daria Pardue Date: Tue, 26 Aug 2025 16:07:13 -0400 Subject: [PATCH 01/11] chore: Update dependabot.yml to allow prod dependencies (#85) --- .github/dependabot.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 7d22cd8..b79eca1 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -29,13 +29,17 @@ updates: - dependency-name: "node-gyp" - dependency-name: "prebuild" versioning-strategy: increase - allow: - - dependency-type: "development" groups: + prod-dependencies: + dependency-type: "production" + applies-to: version-updates + update-types: + - "minor" + - "patch" development-dependencies: dependency-type: "development" applies-to: version-updates update-types: - "minor" - - "patch" \ No newline at end of file + - "patch" From f67cb71011acd03f953dc7b0e28e488b78112460 Mon Sep 17 00:00:00 2001 From: Bailey Pearson Date: Mon, 8 Sep 2025 15:41:21 -0600 Subject: [PATCH 02/11] chore: update PR template (#91) --- .github/pull_request_template.md | 34 +++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index e196cba..c78fb22 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,32 +1,44 @@ ### Description -#### What is changing? +#### Summary of Changes -##### Is there new documentation needed for these changes? + -#### What is the motivation for this change? +##### Notes for Reviewers + + - +Otherwise, feel free to remove this section. +--> + +#### What is the motivation for this change? ### Release Highlight + + -### Fill in title or leave empty for no highlight + ### Double check the following -- [ ] Ran `npm run check:lint` script +- [ ] Lint is passing (`npm run check:lint`) - [ ] Self-review completed using the [steps outlined here](https://github.com/mongodb/node-mongodb-native/blob/HEAD/CONTRIBUTING.md#reviewer-guidelines) - [ ] PR title follows the [correct format](https://www.conventionalcommits.org/en/v1.0.0/): `type(NODE-xxxx)[!]: description` - Example: `feat(NODE-1234)!: rewriting everything in coffeescript` From c46c1b944c97ecc8e668f87055a8df7cf533ed54 Mon Sep 17 00:00:00 2001 From: Bailey Pearson Date: Thu, 18 Sep 2025 06:41:21 -0600 Subject: [PATCH 03/11] feat(NODE-7170)!: drop support for Nodejs <20.19.0 (#92) --- .eslintrc.json | 4 ++-- .github/dependabot.yml | 3 --- .github/docker/Dockerfile.glibc | 5 ++--- .github/docker/Dockerfile.musl | 2 +- .github/workflows/build.yml | 6 ------ .github/workflows/test.yml | 9 +++------ etc/docker.sh | 7 ++----- package-lock.json | 2 +- package.json | 2 +- tsconfig.json | 6 +++--- 10 files changed, 15 insertions(+), 31 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 82313db..0910afd 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -13,7 +13,7 @@ "es6": true }, "parserOptions": { - "ecmaVersion": 2019 + "ecmaVersion": 2023 }, "plugins": [ "@typescript-eslint", @@ -82,4 +82,4 @@ } } ] -} +} \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml index b79eca1..6e72cb5 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -20,9 +20,6 @@ updates: # sinon-chai 4.x+ supports chai 5.x+. - dependency-name: "sinon-chai" versions: [">=4.0.0"] - # nyc is Node18+ only starting on nyc@16.x. - - dependency-name: "nyc" - versions: [">=16.0.0"] # we ignore TS as a part of quarterly dependency updates. - dependency-name: "typescript" # node-gyp now depends on python 3.10, we install 3.6 in our dockerfile diff --git a/.github/docker/Dockerfile.glibc b/.github/docker/Dockerfile.glibc index cfd02fc..2dc4991 100644 --- a/.github/docker/Dockerfile.glibc +++ b/.github/docker/Dockerfile.glibc @@ -1,7 +1,6 @@ -ARG UBUNTU_VERSION=bionic -FROM ubuntu:${UBUNTU_VERSION} AS build +FROM ubuntu:noble AS build -ARG NODE_VERSION=16.20.1 +ARG NODE_VERSION=20.19.0 # Possible values: s390x, arm64, x64 ARG NODE_ARCH ADD https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-${NODE_ARCH}.tar.gz / diff --git a/.github/docker/Dockerfile.musl b/.github/docker/Dockerfile.musl index 6bee364..22b757d 100644 --- a/.github/docker/Dockerfile.musl +++ b/.github/docker/Dockerfile.musl @@ -1,5 +1,5 @@ ARG PLATFORM=arm64 -ARG NODE_VERSION=16.20.1 +ARG NODE_VERSION=20.19.0 FROM ${PLATFORM}/node:${NODE_VERSION}-alpine AS build diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index eb41996..3f545dc 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -79,12 +79,6 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Get Full Node.js Version - id: get_nodejs_version - shell: bash - run: | - echo "version=$(node --print 'process.version.slice(1)')" >> "$GITHUB_OUTPUT" - - name: Set up QEMU uses: docker/setup-qemu-action@v3 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b021bbf..cee7ae0 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,7 +12,7 @@ jobs: strategy: matrix: os: [macos-latest, windows-2022] - node: [16.x, 18.x, 20.x, 22.x] + node: [20.19.0, 22.x] fail-fast: false runs-on: ${{ matrix.os }} steps: @@ -37,7 +37,7 @@ jobs: strategy: matrix: linux_arch: [s390x, arm64, amd64] - node: [16.x, 18.x, 20.x, 22.x] + node: [20.19.0, 22.x] fail-fast: false steps: - uses: actions/checkout@v4 @@ -51,7 +51,6 @@ jobs: shell: bash run: | echo "version=$(node --print 'process.version.slice(1)')" >> "$GITHUB_OUTPUT" - echo "ubuntu_version=$(node --print '(+process.version.slice(1).split(`.`).at(0)) > 16 ? `noble` : `bionic`')" >> "$GITHUB_OUTPUT" - name: Set up QEMU uses: docker/setup-qemu-action@v3 @@ -66,19 +65,17 @@ jobs: --platform linux/${{ matrix.linux_arch }} \ --build-arg="NODE_ARCH=${{ matrix.linux_arch == 'amd64' && 'x64' || matrix.linux_arch }}" \ --build-arg="NODE_VERSION=${{ steps.get_nodejs_version.outputs.version }}" \ - --build-arg="UBUNTU_VERSION=${{ steps.get_nodejs_version.outputs.ubuntu_version }}" \ --build-arg="RUN_TEST=true" \ --output type=local,dest=./prebuilds,platform-split=false \ -f ./.github/docker/Dockerfile.glibc \ . - container_tests_musl: runs-on: ubuntu-latest strategy: matrix: linux_arch: [amd64, arm64] - node: [16.20.1, 18.x, 20.x, 22.x] + node: [20.19.0, 22.x] fail-fast: false steps: - uses: actions/checkout@v4 diff --git a/etc/docker.sh b/etc/docker.sh index 880ee72..3093516 100644 --- a/etc/docker.sh +++ b/etc/docker.sh @@ -7,8 +7,8 @@ # amd64 or arm64v8 for alpine LINUX_ARCH=amd64 -# 16.20.1+, default 16.20.1 -NODE_VERSION=20.0.0 +# 20.19.0+, default 20.19.0 +NODE_VERSION=20.19.0 SCRIPT_DIR=$(dirname ${BASH_SOURCE:-$0}) PROJECT_DIR=$SCRIPT_DIR/.. @@ -28,14 +28,11 @@ build_and_test_musl() { build_and_test_glibc() { docker buildx create --name builder --bootstrap --use - UBUNTU_VERSION=$(node --print 'Number(process.argv[1].split(`.`).at(0)) > 16 ? `noble` : `bionic`' $NODE_VERSION) NODE_ARCH=$(node -p 'process.argv[1] === `amd64` && `x64` || process.argv[1]' $LINUX_ARCH) - echo $UBUNTU_VERSION docker buildx build --progress=plain --no-cache \ --platform linux/$LINUX_ARCH \ --build-arg="NODE_ARCH=$NODE_ARCH" \ --build-arg="NODE_VERSION=$NODE_VERSION" \ - --build-arg="UBUNTU_VERSION=$UBUNTU_VERSION" \ --build-arg="RUN_TEST=true" \ --output type=local,dest=./prebuilds,platform-split=false \ -f ./.github/docker/Dockerfile.glibc \ diff --git a/package-lock.json b/package-lock.json index 5e78668..1c861b3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,7 +44,7 @@ "typescript-cached-transpile": "^0.0.6" }, "engines": { - "node": ">=16.20.1" + "node": ">=20.19.0" } }, "node_modules/@aashutoshrathi/word-wrap": { diff --git a/package.json b/package.json index fe1afcf..ffe6f47 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ } }, "engines": { - "node": ">=16.20.1" + "node": ">=20.19.0" }, "binary": { "napi_versions": [ diff --git a/tsconfig.json b/tsconfig.json index ac8280d..ea62b74 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,13 +4,13 @@ "checkJs": false, "strict": true, "alwaysStrict": true, - "target": "ES2020", + "target": "ES2023", "module": "commonJS", "moduleResolution": "node", "skipLibCheck": true, "erasableSyntaxOnly": true, "lib": [ - "es2020", "es2021.WeakRef" + "es2023" ], // We don't make use of tslib helpers, all syntax used is supported by target engine "importHelpers": false, @@ -43,4 +43,4 @@ "include": [ "src/**/*" ] -} +} \ No newline at end of file From be138a9022d8ae0c7fd7b8cb16561fd2f8f9db89 Mon Sep 17 00:00:00 2001 From: Bailey Pearson Date: Thu, 18 Sep 2025 11:53:28 -0600 Subject: [PATCH 04/11] feat(NODE-7168)!: increase napi version to 9 (#93) --- .github/scripts/libmongocrypt.mjs | 14 +++++++++++--- addon/mongocrypt.h | 8 +------- package-lock.json | 12 ++++++++---- package.json | 6 +++--- test/bundling/webpack/install_ce.cjs | 4 +--- 5 files changed, 24 insertions(+), 20 deletions(-) diff --git a/.github/scripts/libmongocrypt.mjs b/.github/scripts/libmongocrypt.mjs index b933ca6..00bb205 100644 --- a/.github/scripts/libmongocrypt.mjs +++ b/.github/scripts/libmongocrypt.mjs @@ -2,7 +2,7 @@ import util from 'node:util'; import process from 'node:process'; -import fs from 'node:fs/promises'; +import fs, { readFile } from 'node:fs/promises'; import child_process from 'node:child_process'; import events from 'node:events'; import path from 'node:path'; @@ -189,9 +189,17 @@ async function buildBindings(args, pkg) { await run('npm', ['run', 'prepare']); if (process.platform === 'darwin' && process.arch === 'arm64') { + // @ts-ignore + const { + binary: { + napi_versions: [ + napiVersion + ] + } + } = JSON.parse(await readFile(resolveRoot('package.json'), 'utf-8')); // The "arm64" build is actually a universal binary - const armTar = `mongodb-client-encryption-v${pkg.version}-napi-v4-darwin-arm64.tar.gz`; - const x64Tar = `mongodb-client-encryption-v${pkg.version}-napi-v4-darwin-x64.tar.gz`; + const armTar = `mongodb-client-encryption-v${pkg.version}-napi-v${napiVersion}-darwin-arm64.tar.gz`; + const x64Tar = `mongodb-client-encryption-v${pkg.version}-napi-v${napiVersion}-darwin-x64.tar.gz`; await fs.copyFile(resolveRoot('prebuilds', armTar), resolveRoot('prebuilds', x64Tar)); } } diff --git a/addon/mongocrypt.h b/addon/mongocrypt.h index 2fa074f..e161c5c 100644 --- a/addon/mongocrypt.h +++ b/addon/mongocrypt.h @@ -1,13 +1,7 @@ #ifndef NODE_MONGOCRYPT_H #define NODE_MONGOCRYPT_H -// We generally only target N-API version 4, but the instance data -// feature is only available in N-API version 6. However, it is -// available in all Node.js versions that have N-API version 4 -// as an experimental feature (that has not been changed since then). -#define NAPI_VERSION 6 -#define NAPI_EXPERIMENTAL -#define NODE_API_EXPERIMENTAL_NOGC_ENV_OPT_OUT +#define NAPI_VERSION 9 #include diff --git a/package-lock.json b/package-lock.json index 1c861b3..af97d5e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "node-addon-api": "^4.3.0", + "node-addon-api": "^8.5.0", "prebuild-install": "^7.1.3" }, "devDependencies": { @@ -5157,9 +5157,13 @@ } }, "node_modules/node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.5.0.tgz", + "integrity": "sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==", + "license": "MIT", + "engines": { + "node": "^18 || ^20 || >= 21" + } }, "node_modules/node-api-headers": { "version": "1.1.0", diff --git a/package.json b/package.json index ffe6f47..7a934fd 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "gypfile": true, "mongodb:libmongocrypt": "1.15.1", "dependencies": { - "node-addon-api": "^4.3.0", + "node-addon-api": "^8.5.0", "prebuild-install": "^7.1.3" }, "devDependencies": { @@ -80,7 +80,7 @@ }, "binary": { "napi_versions": [ - 4 + 9 ] }, "repository": { @@ -96,4 +96,4 @@ "moduleResolution": "node" } } -} \ No newline at end of file +} diff --git a/test/bundling/webpack/install_ce.cjs b/test/bundling/webpack/install_ce.cjs index 57e83fa..1f91987 100644 --- a/test/bundling/webpack/install_ce.cjs +++ b/test/bundling/webpack/install_ce.cjs @@ -1,5 +1,3 @@ -'use strict'; - const { execSync } = require('node:child_process'); const { readFileSync } = require('node:fs'); const { resolve } = require('node:path'); @@ -19,6 +17,6 @@ console.log(`mongodb-client-encryption Version: ${ceVersion}`); xtrace('npm pack --pack-destination test/bundling/webpack', { cwd: ceRoot }); -xtrace(`npm install --no-save mongodb-client-encryption-${ceVersion}.tgz`); +xtrace(`npm install --ignore-scripts --no-save mongodb-client-encryption-${ceVersion}.tgz`); console.log('mongodb-client-encryption installed!'); From c21bb083bdf48a4ea28feb1e272b2c693b13fba0 Mon Sep 17 00:00:00 2001 From: Bailey Pearson Date: Wed, 24 Sep 2025 12:57:40 -0600 Subject: [PATCH 05/11] deps(NODE-7209): adopt latest node-gyp (#98) --- package-lock.json | 915 +++++++++++++++++++++++++++++----------------- package.json | 9 +- 2 files changed, 578 insertions(+), 346 deletions(-) diff --git a/package-lock.json b/package-lock.json index af97d5e..743a3bf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,7 +30,7 @@ "eslint-config-prettier": "^10.1.8", "eslint-plugin-prettier": "^5.5.4", "mocha": "^11.7.1", - "node-gyp": "^10.1.0", + "node-gyp": "^11.4.2", "prebuild": "^13.0.1", "prettier": "^3.6.2", "semver": "^7.7.2", @@ -609,31 +609,33 @@ } }, "node_modules/@npmcli/agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.1.tgz", - "integrity": "sha512-H4FrOVtNyWC8MUwL3UfjOsAihHvT1Pe8POj3JvjXhSTJipsZMtgUALCT4mGyYZNxymkUfOw3PUj6dE4QPp6osQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", + "integrity": "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==", "dev": true, + "license": "ISC", "dependencies": { "agent-base": "^7.1.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.1", "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.1" + "socks-proxy-agent": "^8.0.3" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@npmcli/fs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", - "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", + "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", "dev": true, + "license": "ISC", "dependencies": { "semver": "^7.3.5" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@pkgjs/parseargs": { @@ -1147,13 +1149,11 @@ "dev": true }, "node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "dev": true, - "dependencies": { - "debug": "^4.3.4" - }, + "license": "MIT", "engines": { "node": ">= 14" } @@ -1163,6 +1163,7 @@ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, + "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -1502,12 +1503,13 @@ "dev": true }, "node_modules/cacache": { - "version": "18.0.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.2.tgz", - "integrity": "sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==", + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", + "integrity": "sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==", "dev": true, + "license": "ISC", "dependencies": { - "@npmcli/fs": "^3.1.0", + "@npmcli/fs": "^4.0.0", "fs-minipass": "^3.0.0", "glob": "^10.2.2", "lru-cache": "^10.0.1", @@ -1515,38 +1517,31 @@ "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "tar": "^7.4.3", + "unique-filename": "^4.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, - "node_modules/cacache/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/cacache/node_modules/fs-minipass": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^7.0.3" }, @@ -1555,111 +1550,66 @@ } }, "node_modules/cacache/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "node_modules/cacache/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" + "@isaacs/cliui": "^8.0.2" }, "funding": { "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/cacache/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cacache/node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" }, - "engines": { - "node": ">=10" + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/cacache/node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { - "minipass": "^3.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/cacache/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" + "node": ">=16 || 14 >=14.17" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/cacache/node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "node_modules/cacache/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, + "license": "ISC", "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/callsites": { @@ -1813,6 +1763,7 @@ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2732,6 +2683,7 @@ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "iconv-lite": "^0.6.2" @@ -2758,7 +2710,8 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/error-ex": { "version": "1.3.2", @@ -3846,16 +3799,18 @@ } }, "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/http-proxy-agent": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -3880,12 +3835,13 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, + "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { @@ -3908,6 +3864,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -4000,24 +3957,15 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", + "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", "dev": true, - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, + "license": "MIT", "engines": { "node": ">= 12" } }, - "node_modules/ip-address/node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "dev": true - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -4070,7 +4018,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-number": { "version": "7.0.0", @@ -4466,32 +4415,34 @@ "dev": true }, "node_modules/make-fetch-happen": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", - "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz", + "integrity": "sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==", "dev": true, + "license": "ISC", "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", + "@npmcli/agent": "^3.0.0", + "cacache": "^19.0.1", "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", + "minipass-fetch": "^4.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", "promise-retry": "^2.0.1", - "ssri": "^10.0.0" + "ssri": "^12.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/make-fetch-happen/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } @@ -4817,6 +4768,7 @@ "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^7.0.3" }, @@ -4825,45 +4777,62 @@ } }, "node_modules/minipass-collect/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/minipass-fetch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", - "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.1.tgz", + "integrity": "sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==", "dev": true, + "license": "MIT", "dependencies": { "minipass": "^7.0.3", "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "minizlib": "^3.0.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" }, "optionalDependencies": { "encoding": "^0.1.13" } }, "node_modules/minipass-fetch/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, + "node_modules/minipass-fetch/node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/minipass-flush": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -4876,6 +4845,7 @@ "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -4888,6 +4858,7 @@ "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -5125,10 +5096,11 @@ "dev": true }, "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -5172,153 +5144,54 @@ "dev": true }, "node_modules/node-gyp": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.1.0.tgz", - "integrity": "sha512-B4J5M1cABxPc5PwfjhbV5hoy2DP9p8lFXASnEN6hugXOa61416tnTZ29x9sSwAd0o99XNIcpvDDy1swAExsVKA==", + "version": "11.4.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.4.2.tgz", + "integrity": "sha512-3gD+6zsrLQH7DyYOUIutaauuXrcyxeTPyQuZQCQoNPZMHMMS5m4y0xclNpvYzoK3VNzuyxT6eF4mkIL4WSZ1eQ==", "dev": true, + "license": "MIT", "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", - "glob": "^10.3.10", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^13.0.0", - "nopt": "^7.0.0", - "proc-log": "^3.0.0", + "make-fetch-happen": "^14.0.3", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^4.0.0" + "tar": "^7.4.3", + "tinyglobby": "^0.2.12", + "which": "^5.0.0" }, "bin": { "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/node-gyp/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/node-gyp/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, + "license": "ISC", "engines": { - "node": ">=10" + "node": ">=16" } }, - "node_modules/node-gyp/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "node_modules/node-gyp/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", "dev": true, + "license": "ISC", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "isexe": "^3.1.1" }, "bin": { - "glob": "dist/esm/bin.mjs" + "node-which": "bin/which.js" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/node-gyp/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/node-gyp/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-gyp/node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-gyp/node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-gyp/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "dev": true, - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/node-ninja": { @@ -5483,27 +5356,29 @@ "dev": true }, "node_modules/nopt": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", - "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", "dev": true, + "license": "ISC", "dependencies": { - "abbrev": "^2.0.0" + "abbrev": "^3.0.0" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/nopt/node_modules/abbrev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", "dev": true, + "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/normalize-package-data": { @@ -5914,15 +5789,13 @@ } }, "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", + "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -6145,6 +6018,46 @@ "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", "license": "MIT" }, + "node_modules/prebuild/node_modules/@npmcli/agent": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", + "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", + "dev": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/prebuild/node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/prebuild/node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/prebuild/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -6154,6 +6067,53 @@ "balanced-match": "^1.0.0" } }, + "node_modules/prebuild/node_modules/cacache": { + "version": "18.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", + "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/prebuild/node_modules/cacache/node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/prebuild/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, "node_modules/prebuild/node_modules/glob": { "version": "10.3.10", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", @@ -6176,6 +6136,40 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/prebuild/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/prebuild/node_modules/make-fetch-happen": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", + "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, "node_modules/prebuild/node_modules/minimatch": { "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", @@ -6200,6 +6194,145 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/prebuild/node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/prebuild/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prebuild/node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/prebuild/node_modules/node-gyp": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.3.1.tgz", + "integrity": "sha512-Pp3nFHBThHzVtNY7U6JfPjvT/DTE8+o/4xKsLQtBoU+j2HLsGlhcfzflAoUreaJbNmYnX+LlLi0qjV8kpyO6xQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^4.1.0", + "semver": "^7.3.5", + "tar": "^6.2.1", + "which": "^4.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/prebuild/node_modules/nopt": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/prebuild/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prebuild/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/prebuild/node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/prebuild/node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/prebuild/node_modules/tar-stream": { "version": "3.1.7", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", @@ -6211,6 +6344,58 @@ "streamx": "^2.15.0" } }, + "node_modules/prebuild/node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/prebuild/node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/prebuild/node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/prebuild/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -6248,12 +6433,13 @@ } }, "node_modules/proc-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", + "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", "dev": true, + "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/process-nextick-args": { @@ -6267,6 +6453,7 @@ "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, + "license": "MIT", "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" @@ -6645,6 +6832,7 @@ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -6867,18 +7055,20 @@ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" } }, "node_modules/socks": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.3.tgz", - "integrity": "sha512-vfuYK48HXCTFD03G/1/zkIls3Ebr2YNa4qU9gHDZdblHLiqhJrJGkY3+0Nx0JpN9qBhJbVObc1CNciT1bIZJxw==", + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", "dev": true, + "license": "MIT", "dependencies": { - "ip-address": "^9.0.5", + "ip-address": "^10.0.1", "smart-buffer": "^4.2.0" }, "engines": { @@ -6887,14 +7077,15 @@ } }, "node_modules/socks-proxy-agent": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", - "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", "dev": true, + "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "^4.3.4", - "socks": "^2.7.1" + "socks": "^2.8.3" }, "engines": { "node": ">= 14" @@ -6978,12 +7169,6 @@ "readable-stream": "^3.0.0" } }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true - }, "node_modules/sshpk": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", @@ -7010,22 +7195,24 @@ } }, "node_modules/ssri": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", - "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz", + "integrity": "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^7.0.3" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/ssri/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } @@ -7504,6 +7691,54 @@ "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", "dev": true }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -7729,27 +7964,29 @@ "license": "MIT" }, "node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz", + "integrity": "sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==", "dev": true, + "license": "ISC", "dependencies": { - "unique-slug": "^4.0.0" + "unique-slug": "^5.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-5.0.0.tgz", + "integrity": "sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/universalify": { diff --git a/package.json b/package.json index 7a934fd..46cdd2d 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "eslint-config-prettier": "^10.1.8", "eslint-plugin-prettier": "^5.5.4", "mocha": "^11.7.1", - "node-gyp": "^10.1.0", + "node-gyp": "^11.4.2", "prebuild": "^13.0.1", "prettier": "^3.6.2", "semver": "^7.7.2", @@ -70,11 +70,6 @@ "typescript": "^5.8.3", "typescript-cached-transpile": "^0.0.6" }, - "overrides": { - "prebuild": { - "node-gyp": "$node-gyp" - } - }, "engines": { "node": ">=20.19.0" }, @@ -96,4 +91,4 @@ "moduleResolution": "node" } } -} +} \ No newline at end of file From aa61a35f5e174cd1c1e247e036093e18c88268c6 Mon Sep 17 00:00:00 2001 From: Bailey Pearson Date: Fri, 26 Sep 2025 08:23:34 -0600 Subject: [PATCH 06/11] feat(NODE-7212)!: upgrade macos deployment target to 11 (#99) --- binding.gyp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/binding.gyp b/binding.gyp index d51d66e..0190f89 100644 --- a/binding.gyp +++ b/binding.gyp @@ -18,7 +18,7 @@ 'xcode_settings': { 'GCC_ENABLE_CPP_EXCEPTIONS': 'YES', 'CLANG_CXX_LIBRARY': 'libc++', - 'MACOSX_DEPLOYMENT_TARGET': '10.12', + 'MACOSX_DEPLOYMENT_TARGET': '11', 'GCC_SYMBOLS_PRIVATE_EXTERN': 'YES', # -fvisibility=hidden }, 'cflags!': [ '-fno-exceptions' ], From f2125dea1e17a3a53cd638c7e858395034739129 Mon Sep 17 00:00:00 2001 From: Bailey Pearson Date: Tue, 30 Sep 2025 08:39:54 -0600 Subject: [PATCH 07/11] feat(NODE-7216)! remove support for enableMultipleCollInfo (#101) --- addon/mongocrypt.cc | 5 +---- src/index.ts | 2 -- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/addon/mongocrypt.cc b/addon/mongocrypt.cc index 4d33a10..5997a9d 100644 --- a/addon/mongocrypt.cc +++ b/addon/mongocrypt.cc @@ -585,10 +585,7 @@ MongoCrypt::MongoCrypt(const CallbackInfo& info) : ObjectWrap(info) { mongocrypt_setopt_retry_kms(mongo_crypt(), true); - if (options.Get("enableMultipleCollinfo").ToBoolean()) { - /** TODO(NODE-6793): remove this option and have it always set in the next major */ - mongocrypt_setopt_enable_multiple_collinfo(mongo_crypt()); - } + mongocrypt_setopt_enable_multiple_collinfo(mongo_crypt()); // Initialize after all options are set. if (!mongocrypt_init(mongo_crypt())) { diff --git a/src/index.ts b/src/index.ts index e8752da..eeb6288 100644 --- a/src/index.ts +++ b/src/index.ts @@ -69,8 +69,6 @@ type MongoCryptConstructorOptions = { bypassQueryAnalysis?: boolean; /** Configure the time to expire the DEK from the cache. */ keyExpirationMS?: number; - /** TODO(NODE-6793): remove this option and have it always set in the next major */ - enableMultipleCollinfo?: boolean; }; export interface MongoCryptConstructor { From 7f0be6317ca9355bc12fe411eb686ad572cd7fed Mon Sep 17 00:00:00 2001 From: Bailey Pearson Date: Tue, 30 Sep 2025 12:57:37 -0600 Subject: [PATCH 08/11] feat(NODE-7043): add support for custom error wrapping functions (#102) --- .eslintrc.json | 9 + src/bindings.ts | 138 +++++++++++++++ src/index.ts | 259 ++++++++++++++++++----------- test/bundling/webpack/src/index.ts | 6 +- test/unit/bindings.test.ts | 88 ++++++---- test/unit/error_wrapper.test.ts | 180 ++++++++++++++++++++ test/unit/index.test.ts | 2 +- test/unit/release.test.ts | 8 +- 8 files changed, 556 insertions(+), 134 deletions(-) create mode 100644 src/bindings.ts create mode 100644 test/unit/error_wrapper.test.ts diff --git a/.eslintrc.json b/.eslintrc.json index 0910afd..2d68e9b 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -38,6 +38,15 @@ "prettier/prettier": "error", "no-console": "error", "valid-typeof": "error", + "@typescript-eslint/no-unused-vars": [ + "error", + { + "argsIgnorePattern": "^_", + "caughtErrorsIgnorePattern": "^_", + "destructuredArrayIgnorePattern": "^_", + "varsIgnorePattern": "^_" + } + ], "eqeqeq": [ "error", "always", diff --git a/src/bindings.ts b/src/bindings.ts new file mode 100644 index 0000000..3971d9c --- /dev/null +++ b/src/bindings.ts @@ -0,0 +1,138 @@ +function load() { + try { + return require('../build/Release/mongocrypt.node'); + } catch { + // Webpack will fail when just returning the require, so we need to wrap + // in a try/catch and rethrow. + /* eslint no-useless-catch: 0 */ + try { + return require('../build/Debug/mongocrypt.node'); + } catch (error) { + throw error; + } + } +} + +export const mc: MongoCryptBindings = load(); + +export interface MongoCryptConstructor { + new (options: MongoCryptConstructorOptions): IMongoCrypt; + libmongocryptVersion: string; +} + +interface MongoCryptContextCtor { + new (): IMongoCryptContext; +} + +/** + * The value returned by the native bindings + * reference the `Init(Env env, Object exports)` function in the c++ + */ +type MongoCryptBindings = { + MongoCrypt: MongoCryptConstructor; + MongoCryptContextCtor: MongoCryptContextCtor; + MongoCryptKMSRequestCtor: MongoCryptKMSRequest; +}; + +export interface MongoCryptStatus { + type: number; + code: number; + message?: string; +} + +export interface MongoCryptKMSRequest { + addResponse(response: Uint8Array): void; + fail(): boolean; + readonly status: MongoCryptStatus; + readonly bytesNeeded: number; + readonly uSleep: number; + readonly kmsProvider: string; + readonly endpoint: string; + readonly message: Buffer; +} + +export interface IMongoCryptContext { + nextMongoOperation(): Buffer; + addMongoOperationResponse(response: Uint8Array): void; + finishMongoOperation(): void; + nextKMSRequest(): MongoCryptKMSRequest | null; + provideKMSProviders(providers: Uint8Array): void; + finishKMSRequests(): void; + finalize(): Buffer; + + get status(): MongoCryptStatus; + get state(): number; +} + +export type MongoCryptConstructorOptions = { + kmsProviders?: Uint8Array; + schemaMap?: Uint8Array; + encryptedFieldsMap?: Uint8Array; + logger?: unknown; + cryptoCallbacks?: Record; + cryptSharedLibSearchPaths?: string[]; + cryptSharedLibPath?: string; + bypassQueryAnalysis?: boolean; + /** Configure the time to expire the DEK from the cache. */ + keyExpirationMS?: number; + + /** + * A function that wraps any errors that are thrown by the bindings in this package + * into a new error type. + * + * Example wrapper function, using the MongoDB driver: + * ```typescript + * (error: Error) => new MongoClientEncryptionError(error.message, { cause: error }); + * ``` + */ + errorWrapper: (error: Error) => Error; +}; + +export interface IMongoCrypt { + makeEncryptionContext(ns: string, command: Uint8Array): IMongoCryptContext; + makeExplicitEncryptionContext( + value: Uint8Array, + options?: { + keyId?: Uint8Array; + keyAltName?: Uint8Array; + algorithm?: string; + rangeOptions?: Uint8Array; + textOptions?: Uint8Array; + contentionFactor?: bigint | number; + queryType?: string; + + /** + * node-binding specific option + * + * When true, creates a `mongocrypt_ctx_explicit_encrypt_expression` context. + * When false, creates a `mongocrypt_ctx_explicit_encrypt` + */ + expressionMode: boolean; + } + ): IMongoCryptContext; + makeDecryptionContext(buffer: Uint8Array): IMongoCryptContext; + makeExplicitDecryptionContext(buffer: Uint8Array): IMongoCryptContext; + makeDataKeyContext( + optionsBuffer: Uint8Array, + options: { + keyAltNames?: Uint8Array[]; + keyMaterial?: Uint8Array; + } + ): IMongoCryptContext; + makeRewrapManyDataKeyContext(filter: Uint8Array, encryptionKey?: Uint8Array): IMongoCryptContext; + readonly status: MongoCryptStatus; + readonly cryptSharedLibVersionInfo: { + version: bigint; + versionStr: string; + } | null; + readonly cryptoHooksProvider: 'js' | 'native_openssl' | null; +} + +export type ExplicitEncryptionContextOptions = NonNullable< + Parameters[1] +>; +export type DataKeyContextOptions = NonNullable[1]>; +export type MongoCryptOptions = MongoCryptConstructorOptions; +export type MongoCryptErrorWrapper = MongoCryptOptions['errorWrapper']; + +// export const diff --git a/src/index.ts b/src/index.ts index eeb6288..0cbba09 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,83 +1,120 @@ +import { + IMongoCrypt, + IMongoCryptContext, + mc, + MongoCryptErrorWrapper, + MongoCryptKMSRequest, + MongoCryptOptions, + MongoCryptStatus +} from './bindings'; import { cryptoCallbacks } from './crypto_callbacks'; export { cryptoCallbacks }; -function load() { - try { - return require('../build/Release/mongocrypt.node'); - } catch { - // Webpack will fail when just returning the require, so we need to wrap - // in a try/catch and rethrow. - /* eslint no-useless-catch: 0 */ +export class MongoCryptContext implements IMongoCryptContext { + private context: IMongoCryptContext; + private errorWrapper: MongoCryptOptions['errorWrapper']; + + constructor(context: IMongoCryptContext, errorWrapper: MongoCryptOptions['errorWrapper']) { + this.context = context; + this.errorWrapper = errorWrapper; + } + + nextMongoOperation(): Buffer { try { - return require('../build/Debug/mongocrypt.node'); + return this.context.nextMongoOperation(); } catch (error) { - throw error; + throw this.errorWrapper(error); } } -} - -const mc: MongoCryptBindings = load(); - -/** - * The value returned by the native bindings - * reference the `Init(Env env, Object exports)` function in the c++ - */ -type MongoCryptBindings = { - MongoCrypt: MongoCryptConstructor; - MongoCryptContextCtor: MongoCryptContextCtor; - MongoCryptKMSRequestCtor: MongoCryptKMSRequest; -}; -export interface MongoCryptKMSRequest { - addResponse(response: Uint8Array): void; - fail(): boolean; - readonly status: MongoCryptStatus; - readonly bytesNeeded: number; - readonly uSleep: number; - readonly kmsProvider: string; - readonly endpoint: string; - readonly message: Buffer; + addMongoOperationResponse(response: Uint8Array): void { + try { + return this.context.addMongoOperationResponse(response); + } catch (error) { + throw this.errorWrapper(error); + } + } + finishMongoOperation(): void { + try { + return this.context.finishMongoOperation(); + } catch (error) { + throw this.errorWrapper(error); + } + } + nextKMSRequest(): MongoCryptKMSRequest | null { + try { + return this.context.nextKMSRequest(); + } catch (error) { + throw this.errorWrapper(error); + } + } + provideKMSProviders(providers: Uint8Array): void { + try { + return this.context.provideKMSProviders(providers); + } catch (error) { + throw this.errorWrapper(error); + } + } + finishKMSRequests(): void { + try { + return this.context.finishKMSRequests(); + } catch (error) { + throw this.errorWrapper(error); + } + } + finalize(): Buffer { + try { + return this.context.finalize(); + } catch (error) { + throw this.errorWrapper(error); + } + } + get status(): MongoCryptStatus { + try { + return this.context.status; + } catch (error) { + throw this.errorWrapper(error); + } + } + get state(): number { + try { + return this.context.state; + } catch (error) { + throw this.errorWrapper(error); + } + } } -export interface MongoCryptStatus { - type: number; - code: number; - message?: string; -} +export class MongoCrypt implements IMongoCrypt { + private errorWrapper: MongoCryptErrorWrapper; + private mc: IMongoCrypt; + readonly cryptSharedLibVersionInfo: { version: bigint; versionStr: string } | null; + readonly cryptoHooksProvider: 'js' | 'native_openssl' | null; -export interface MongoCryptContext { - nextMongoOperation(): Buffer; - addMongoOperationResponse(response: Uint8Array): void; - finishMongoOperation(): void; - nextKMSRequest(): MongoCryptKMSRequest | null; - provideKMSProviders(providers: Uint8Array): void; - finishKMSRequests(): void; - finalize(): Buffer; + static readonly libmongocryptVersion: string = mc.MongoCrypt.libmongocryptVersion; - get status(): MongoCryptStatus; - get state(): number; -} + constructor(options: MongoCryptOptions) { + // Pass in JS cryptoCallbacks implementation by default. + // If the Node.js openssl version is supported this will be ignored. + this.mc = new mc.MongoCrypt( + // @ts-expect-error: intentionally passing in an argument that will throw to preserve existing behavior + options == null || typeof options !== 'object' ? undefined : { cryptoCallbacks, ...options } + ); -type MongoCryptConstructorOptions = { - kmsProviders?: Uint8Array; - schemaMap?: Uint8Array; - encryptedFieldsMap?: Uint8Array; - logger?: unknown; - cryptoCallbacks?: Record; - cryptSharedLibSearchPaths?: string[]; - cryptSharedLibPath?: string; - bypassQueryAnalysis?: boolean; - /** Configure the time to expire the DEK from the cache. */ - keyExpirationMS?: number; -}; + this.errorWrapper = options.errorWrapper; -export interface MongoCryptConstructor { - new (options: MongoCryptConstructorOptions): MongoCrypt; - libmongocryptVersion: string; -} + this.cryptSharedLibVersionInfo = this.mc.cryptSharedLibVersionInfo; + this.cryptoHooksProvider = this.mc.cryptoHooksProvider; + } + + makeEncryptionContext(ns: string, command: Uint8Array): MongoCryptContext { + try { + return new MongoCryptContext(this.mc.makeEncryptionContext(ns, command), this.errorWrapper); + } catch (error) { + throw this.errorWrapper(error); + } + } -export interface MongoCrypt { - makeEncryptionContext(ns: string, command: Uint8Array): MongoCryptContext; makeExplicitEncryptionContext( value: Uint8Array, options?: { @@ -97,44 +134,70 @@ export interface MongoCrypt { */ expressionMode: boolean; } - ): MongoCryptContext; - makeDecryptionContext(buffer: Uint8Array): MongoCryptContext; - makeExplicitDecryptionContext(buffer: Uint8Array): MongoCryptContext; + ): MongoCryptContext { + try { + return new MongoCryptContext( + this.mc.makeExplicitEncryptionContext(value, options), + this.errorWrapper + ); + } catch (error) { + throw this.errorWrapper(error); + } + } + makeDecryptionContext(buffer: Uint8Array): MongoCryptContext { + try { + return new MongoCryptContext(this.mc.makeDecryptionContext(buffer), this.errorWrapper); + } catch (error) { + throw this.errorWrapper(error); + } + } + makeExplicitDecryptionContext(buffer: Uint8Array): MongoCryptContext { + try { + return new MongoCryptContext( + this.mc.makeExplicitDecryptionContext(buffer), + this.errorWrapper + ); + } catch (error) { + throw this.errorWrapper(error); + } + } makeDataKeyContext( optionsBuffer: Uint8Array, options: { keyAltNames?: Uint8Array[]; keyMaterial?: Uint8Array; } - ): MongoCryptContext; - makeRewrapManyDataKeyContext(filter: Uint8Array, encryptionKey?: Uint8Array): MongoCryptContext; - readonly status: MongoCryptStatus; - readonly cryptSharedLibVersionInfo: { - version: bigint; - versionStr: string; - } | null; - readonly cryptoHooksProvider: 'js' | 'native_openssl' | null; -} - -export type ExplicitEncryptionContextOptions = NonNullable< - Parameters[1] ->; -export type DataKeyContextOptions = NonNullable[1]>; -export type MongoCryptOptions = NonNullable[0]>; - -export const MongoCrypt: MongoCryptConstructor = class MongoCrypt extends mc.MongoCrypt { - constructor(options: MongoCryptConstructorOptions) { - // Pass in JS cryptoCallbacks implementation by default. - // If the Node.js openssl version is supported this will be ignored. - super( - // @ts-expect-error: intentionally passing in an argument that will throw to preserve existing behavior - options == null || typeof options !== 'object' ? undefined : { cryptoCallbacks, ...options } - ); + ): MongoCryptContext { + try { + return new MongoCryptContext( + this.mc.makeDataKeyContext(optionsBuffer, options), + this.errorWrapper + ); + } catch (error) { + throw this.errorWrapper(error); + } + } + makeRewrapManyDataKeyContext(filter: Uint8Array, encryptionKey?: Uint8Array): MongoCryptContext { + try { + return new MongoCryptContext( + this.mc.makeRewrapManyDataKeyContext(filter, encryptionKey), + this.errorWrapper + ); + } catch (error) { + throw this.errorWrapper(error); + } + } + get status(): MongoCryptStatus { + try { + return this.mc.status; + } catch (error) { + throw this.errorWrapper(error); + } } -}; - -/** exported for testing only. */ -interface MongoCryptContextCtor { - new (): MongoCryptContext; } -export const MongoCryptContextCtor: MongoCryptContextCtor = mc.MongoCryptContextCtor; + +export type { + MongoCryptOptions, + ExplicitEncryptionContextOptions, + MongoCryptKMSRequest +} from './bindings'; diff --git a/test/bundling/webpack/src/index.ts b/test/bundling/webpack/src/index.ts index 7eb5c01..531484f 100644 --- a/test/bundling/webpack/src/index.ts +++ b/test/bundling/webpack/src/index.ts @@ -1,4 +1,8 @@ import { MongoCrypt } from 'mongodb-client-encryption'; // eslint-disable-next-line no-console -console.log(new MongoCrypt({})); +console.log( + new MongoCrypt({ + errorWrapper: (e: Error) => e + }) +); diff --git a/test/unit/bindings.test.ts b/test/unit/bindings.test.ts index 75604c4..1818770 100644 --- a/test/unit/bindings.test.ts +++ b/test/unit/bindings.test.ts @@ -1,5 +1,5 @@ import { expect } from 'chai'; -import { MongoCrypt, MongoCryptContext, MongoCryptContextCtor } from '../../src'; +import { MongoCrypt, MongoCryptContext } from '../../src'; import { serialize, Binary, Long } from 'bson'; import * as crypto from 'crypto'; @@ -15,6 +15,8 @@ export function randomHook(buffer: Buffer, count: number): number | Error { return count; } +const defaultErrorWrapper = (e: Error) => e; + describe('MongoCryptConstructor', () => { const mc = new MongoCrypt({ kmsProviders: serialize({ aws: {} }), @@ -28,11 +30,8 @@ describe('MongoCryptConstructor', () => { hmacSha256Hook: () => {}, sha256Hook: () => {}, signRsaSha256Hook: () => {} - } - }); - - it('requires an options argument', () => { - expect(() => new MongoCrypt()).to.throw(/First parameter must be an object/); + }, + errorWrapper: defaultErrorWrapper }); it('creates a MongoCrypt when provided valid options', () => { @@ -54,7 +53,8 @@ describe('MongoCryptConstructor', () => { signRsaSha256Hook: () => {} }, - bypassQueryAnalysis: false + bypassQueryAnalysis: false, + errorWrapper: defaultErrorWrapper }) ).to.be.instanceOf(MongoCrypt); }); @@ -65,14 +65,24 @@ describe('MongoCryptConstructor', () => { describe('options.kmsProviders', () => { it('throws if provided and are not a Uint8Array', () => { - expect(() => new MongoCrypt({ kmsProviders: 3 })).to.throw( - /Parameter `options.kmsProviders` must be a Uint8Array./ - ); + expect( + () => + new MongoCrypt({ + kmsProviders: 3, + errorWrapper: defaultErrorWrapper + }) + ).to.throw(/Parameter `options.kmsProviders` must be a Uint8Array./); }); it('throws when explicitly set to undefined', () => { // the error is different because it is thrown from libmongocrypt - expect(() => new MongoCrypt({ kmsProviders: undefined })).to.throw(/no kms provider set/); + expect( + () => + new MongoCrypt({ + kmsProviders: undefined, + errorWrapper: defaultErrorWrapper + }) + ).to.throw(/no kms provider set/); }); }); @@ -82,7 +92,8 @@ describe('MongoCryptConstructor', () => { () => new MongoCrypt({ kmsProviders: serialize({ aws: {} }), - schemaMap: 3 + schemaMap: 3, + errorWrapper: defaultErrorWrapper }) ).to.throw(/Parameter `options.schemaMap` must be a Uint8Array./); }); @@ -91,7 +102,8 @@ describe('MongoCryptConstructor', () => { expect( new MongoCrypt({ kmsProviders: serialize({ aws: {} }), - schemaMap: undefined + schemaMap: undefined, + errorWrapper: defaultErrorWrapper }) ).to.be.instanceOf(MongoCrypt); }); @@ -101,7 +113,11 @@ describe('MongoCryptConstructor', () => { context('when the number is positive', () => { it('does not error', () => { expect( - new MongoCrypt({ kmsProviders: serialize({ aws: {} }), keyExpirationMS: 1000000 }) + new MongoCrypt({ + kmsProviders: serialize({ aws: {} }), + keyExpirationMS: 1000000, + errorWrapper: defaultErrorWrapper + }) ).to.be.instanceOf(MongoCrypt); }); }); @@ -109,7 +125,11 @@ describe('MongoCryptConstructor', () => { context('when the number is negative', () => { it('throws an error', () => { expect(() => { - new MongoCrypt({ kmsProviders: serialize({ aws: {} }), keyExpirationMS: -1000000 }); + new MongoCrypt({ + kmsProviders: serialize({ aws: {} }), + keyExpirationMS: -1000000, + errorWrapper: defaultErrorWrapper + }); }).to.throw(/must be a non-negative number/); }); }); @@ -130,7 +150,8 @@ describe('MongoCryptConstructor', () => { expect( new MongoCrypt({ kmsProviders: serialize({ aws: {} }), - encryptedFieldsMap: undefined + encryptedFieldsMap: undefined, + errorWrapper: defaultErrorWrapper }) ).to.be.instanceOf(MongoCrypt); }); @@ -141,13 +162,17 @@ describe('MongoCryptConstructor', () => { () => new MongoCrypt({ kmsProviders: serialize({ aws: {} }), - cryptSharedLibSearchPaths: 3 + cryptSharedLibSearchPaths: 3, + errorWrapper: defaultErrorWrapper }) ).to.throw(/Option `cryptSharedLibSearchPaths` must be an array/); }); it('has an instance property `status`', () => { - const mc = new MongoCrypt({ kmsProviders: serialize({ aws: {} }) }); + const mc = new MongoCrypt({ + kmsProviders: serialize({ aws: {} }), + errorWrapper: defaultErrorWrapper + }); expect(mc).to.have.property('status'); expect(mc).to.have.property('cryptSharedLibVersionInfo'); }); @@ -161,7 +186,7 @@ describe('MongoCryptConstructor', () => { it('returns a MongoCryptContext', () => { expect(mc.makeEncryptionContext('foo.bar', serialize({ ping: 1 }))).to.be.instanceOf( - MongoCryptContextCtor + MongoCryptContext ); }); }); @@ -174,9 +199,7 @@ describe('MongoCryptConstructor', () => { }); it('returns a MongoCryptContext', () => { - expect(mc.makeDecryptionContext(serialize({ ping: 1 }))).to.be.instanceOf( - MongoCryptContextCtor - ); + expect(mc.makeDecryptionContext(serialize({ ping: 1 }))).to.be.instanceOf(MongoCryptContext); }); }); @@ -190,15 +213,13 @@ describe('MongoCryptConstructor', () => { it('returns a MongoCryptContext', () => { expect( mc.makeExplicitDecryptionContext(serialize({ v: new Binary(Buffer.from([]), 6) })) - ).to.be.instanceOf(MongoCryptContextCtor); + ).to.be.instanceOf(MongoCryptContext); }); }); describe('.makeRewrapManyDataKeyContext()', () => { it('returns a MongoCryptContext', () => { - expect(mc.makeRewrapManyDataKeyContext(serialize({}))).to.be.instanceOf( - MongoCryptContextCtor - ); + expect(mc.makeRewrapManyDataKeyContext(serialize({}))).to.be.instanceOf(MongoCryptContext); }); describe('when a filter buffer is provided', () => { @@ -210,7 +231,7 @@ describe('MongoCryptConstructor', () => { it('can be explicitly passed `undefined`', () => { expect(mc.makeRewrapManyDataKeyContext(serialize({}), undefined)).to.be.instanceOf( - MongoCryptContextCtor + MongoCryptContext ); }); }); @@ -223,7 +244,7 @@ describe('MongoCryptConstructor', () => { key: 'key' }); it('returns a MongoCryptContext', () => { - expect(mc.makeDataKeyContext(providers, {})).to.be.instanceOf(MongoCryptContextCtor); + expect(mc.makeDataKeyContext(providers, {})).to.be.instanceOf(MongoCryptContext); }); it('throws when the first parameter is not a Uint8Array', () => { @@ -238,7 +259,7 @@ describe('MongoCryptConstructor', () => { mc.makeDataKeyContext(providers, { keyAltNames: undefined }) - ).to.be.instanceOf(MongoCryptContextCtor); + ).to.be.instanceOf(MongoCryptContext); }); it('throws a TypeError when options.keyAltNames includes values that are not Uint8Arrays', () => { @@ -258,7 +279,7 @@ describe('MongoCryptConstructor', () => { mc.makeDataKeyContext(providers, { keyMaterial: undefined }) - ).to.be.instanceOf(MongoCryptContextCtor); + ).to.be.instanceOf(MongoCryptContext); }); it('throws a TypeError when provided and is not a Uint8Array', () => { @@ -285,7 +306,7 @@ describe('MongoCryptConstructor', () => { expressionMode: false, algorithm: 'Unindexed' }) - ).to.be.instanceOf(MongoCryptContextCtor); + ).to.be.instanceOf(MongoCryptContext); }); it('throws a TypeError when `value` is not a Uint8Array', () => { @@ -402,7 +423,7 @@ describe('MongoCryptConstructor', () => { // is enforced in libmongocrypt, not our bindings contentionFactor: 2 }) - ).to.be.instanceOf(MongoCryptContextCtor); + ).to.be.instanceOf(MongoCryptContext); }); }); @@ -428,7 +449,8 @@ describe('MongoCryptContext', () => { beforeEach(() => { let crypt = new MongoCrypt({ - kmsProviders: serialize({ aws: {} }) + kmsProviders: serialize({ aws: {} }), + errorWrapper: defaultErrorWrapper }); context = crypt.makeDecryptionContext(serialize({})); weakMongoCryptRef = new WeakRef(crypt); diff --git a/test/unit/error_wrapper.test.ts b/test/unit/error_wrapper.test.ts new file mode 100644 index 0000000..807e486 --- /dev/null +++ b/test/unit/error_wrapper.test.ts @@ -0,0 +1,180 @@ +import { expect } from 'chai'; +import { MongoCrypt, MongoCryptContext } from '../../src'; +import { + IMongoCrypt, + IMongoCryptContext, + MongoCryptKMSRequest, + MongoCryptStatus +} from '../../src/bindings'; +import { serialize } from 'bson'; + +class CustomError extends Error {} + +describe('custom error wrapper functionality', function () { + describe('class MongoCryptContext', function () { + let context: MongoCryptContext; + + beforeEach(function () { + class MockBindingsContext implements IMongoCryptContext { + nextMongoOperation(): Buffer { + throw new Error('ahh'); + } + addMongoOperationResponse(_response: Uint8Array): void { + throw new Error('ahh'); + } + finishMongoOperation(): void { + throw new Error('ahh'); + } + nextKMSRequest(): MongoCryptKMSRequest | null { + throw new Error('ahh'); + } + provideKMSProviders(_providers: Uint8Array): void { + throw new Error('ahh'); + } + finishKMSRequests(): void { + throw new Error('ahh'); + } + finalize(): Buffer { + throw new Error('ahh'); + } + get status(): MongoCryptStatus { + throw new Error('ahh'); + } + get state(): number { + throw new Error('ahh'); + } + } + + context = new MongoCryptContext( + new MockBindingsContext(), + error => new CustomError('custom error', { cause: error }) + ); + }); + + it('#nextMongoOperation() wraps errors from the bindings', function () { + expect(() => context.nextMongoOperation()).to.throw(CustomError); + }); + + it('#addMongoOperationResponse() wraps errors from the bindings', function () { + expect(() => context.addMongoOperationResponse(Buffer.from([1, 2, 3]))).to.throw(CustomError); + }); + + it('#finishMongoOperation() wraps errors from the bindings', function () { + expect(() => context.finishMongoOperation()).to.throw(CustomError); + }); + + it('#nextKMSRequest() wraps errors from the bindings', function () { + expect(() => context.nextKMSRequest()).to.throw(CustomError); + }); + + it('#provideKMSProviders() wraps errors from the bindings', function () { + expect(() => context.provideKMSProviders(Buffer.from([1, 2, 3]))).to.throw(CustomError); + }); + + it('#finishKMSRequests() wraps errors from the bindings', function () { + expect(() => context.finishKMSRequests()).to.throw(CustomError); + }); + + it('#finalize() wraps errors from the bindings', function () { + expect(() => context.finalize()).to.throw(CustomError); + }); + + it('.status wraps errors from the bindings', function () { + expect(() => context.status).to.throw(CustomError); + }); + + it('.state wraps errors from the bindings', function () { + expect(() => context.state).to.throw(CustomError); + }); + }); + + describe('class MongoCrypt', function () { + let context: IMongoCrypt; + + beforeEach(function () { + class MockMongoCrypt implements IMongoCrypt { + makeEncryptionContext(_ns: string, _command: Uint8Array): IMongoCryptContext { + throw new Error('Method not implemented.'); + } + makeExplicitEncryptionContext( + _value: Uint8Array, + _options?: { + keyId?: Uint8Array; + keyAltName?: Uint8Array; + algorithm?: string; + rangeOptions?: Uint8Array; + textOptions?: Uint8Array; + contentionFactor?: bigint | number; + queryType?: string; + expressionMode: boolean; + } + ): IMongoCryptContext { + throw new Error('Method not implemented.'); + } + makeDecryptionContext(_buffer: Uint8Array): IMongoCryptContext { + throw new Error('Method not implemented.'); + } + makeExplicitDecryptionContext(_buffer: Uint8Array): IMongoCryptContext { + throw new Error('Method not implemented.'); + } + makeDataKeyContext( + _optionsBuffer: Uint8Array, + _options: { keyAltNames?: Uint8Array[]; keyMaterial?: Uint8Array } + ): IMongoCryptContext { + throw new Error('Method not implemented.'); + } + makeRewrapManyDataKeyContext( + _filter: Uint8Array, + _encryptionKey?: Uint8Array + ): IMongoCryptContext { + throw new Error('Method not implemented.'); + } + get status(): MongoCryptStatus { + throw new Error('Method not implemented.'); + } + cryptSharedLibVersionInfo: { version: bigint; versionStr: string }; + cryptoHooksProvider: 'js' | 'native_openssl'; + } + + context = new MongoCrypt({ + errorWrapper: error => new CustomError('custom error', { cause: error }), + kmsProviders: serialize({ aws: {} }) + }); + + // @ts-expect-error accessing private property + context.mc = new MockMongoCrypt(); + }); + + it('#makeEncryptionContext() wraps errors from the bindings', function () { + expect(() => context.makeEncryptionContext('db.collection', Buffer.from([1, 2, 3]))).to.throw( + CustomError + ); + }); + + it('#makeExplicitEncryptionContext() wraps errors from the bindings', function () { + expect(() => context.makeExplicitEncryptionContext(Buffer.from([1, 2, 3]))).to.throw( + CustomError + ); + }); + + it('#makeDecryptionContext() wraps errors from the bindings', function () { + expect(() => context.makeDecryptionContext(Buffer.from([1, 2, 3]))).to.throw(CustomError); + }); + + it('#makeExplicitDecryptionContext() wraps errors from the bindings', function () { + expect(() => context.makeExplicitDecryptionContext(Buffer.from([1, 2, 3]))).to.throw( + CustomError + ); + }); + + it('#makeRewrapManyDataKeyContext() wraps errors from the bindings', function () { + expect(() => context.makeRewrapManyDataKeyContext(Buffer.from([1, 2, 3]))).to.throw( + CustomError + ); + }); + + it('.status wraps errors from the bindings', function () { + expect(() => context.status).to.throw(CustomError); + }); + }); +}); diff --git a/test/unit/index.test.ts b/test/unit/index.test.ts index f0f61b2..a46d85e 100644 --- a/test/unit/index.test.ts +++ b/test/unit/index.test.ts @@ -11,7 +11,7 @@ describe('index.ts', () => { }); it('exposes MongoCryptContextCtor', () => { - expect(bindings).to.have.property('MongoCryptContextCtor').that.is.a('function'); + expect(bindings).to.have.property('MongoCryptContext').that.is.a('function'); }); it('exposes MongoCryptKMSRequestCtor', () => { diff --git a/test/unit/release.test.ts b/test/unit/release.test.ts index f82c473..8018044 100644 --- a/test/unit/release.test.ts +++ b/test/unit/release.test.ts @@ -25,7 +25,13 @@ const REQUIRED_FILES = [ 'package/lib/crypto_callbacks.d.ts', 'package/lib/crypto_callbacks.d.ts.map', 'package/lib/crypto_callbacks.js', - 'package/lib/crypto_callbacks.js.map' + 'package/lib/crypto_callbacks.js.map', + + 'package/src/bindings.ts', + 'package/lib/bindings.d.ts', + 'package/lib/bindings.d.ts.map', + 'package/lib/bindings.js', + 'package/lib/bindings.js.map' ]; describe(`Release ${packFile}`, function () { From 036d901bd0a0d1e1b29264b17223021e1975172f Mon Sep 17 00:00:00 2001 From: Bailey Pearson Date: Wed, 1 Oct 2025 11:44:47 -0600 Subject: [PATCH 09/11] feat(NODE-6297)!: Remove support for explicitly providing CryptoCallbacks (#103) --- src/bindings.ts | 5 ++++- src/index.ts | 5 +---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/bindings.ts b/src/bindings.ts index 3971d9c..54ade84 100644 --- a/src/bindings.ts +++ b/src/bindings.ts @@ -64,6 +64,9 @@ export interface IMongoCryptContext { get state(): number; } +/** + * All options that can be provided to a C++ MongoCrypt constructor. + */ export type MongoCryptConstructorOptions = { kmsProviders?: Uint8Array; schemaMap?: Uint8Array; @@ -132,7 +135,7 @@ export type ExplicitEncryptionContextOptions = NonNullable< Parameters[1] >; export type DataKeyContextOptions = NonNullable[1]>; -export type MongoCryptOptions = MongoCryptConstructorOptions; +export type MongoCryptOptions = Omit; export type MongoCryptErrorWrapper = MongoCryptOptions['errorWrapper']; // export const diff --git a/src/index.ts b/src/index.ts index 0cbba09..72447d6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -96,10 +96,7 @@ export class MongoCrypt implements IMongoCrypt { constructor(options: MongoCryptOptions) { // Pass in JS cryptoCallbacks implementation by default. // If the Node.js openssl version is supported this will be ignored. - this.mc = new mc.MongoCrypt( - // @ts-expect-error: intentionally passing in an argument that will throw to preserve existing behavior - options == null || typeof options !== 'object' ? undefined : { cryptoCallbacks, ...options } - ); + this.mc = new mc.MongoCrypt({ cryptoCallbacks, ...options }); this.errorWrapper = options.errorWrapper; From 1fb9493cab82e0421c3763e703b3d45667047f22 Mon Sep 17 00:00:00 2001 From: Bailey Pearson Date: Wed, 1 Oct 2025 14:27:05 -0600 Subject: [PATCH 10/11] chore: configure release please and release action for alpha release (#104) --- .github/workflows/release_6.1.yml | 2 +- release-please-config.json | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release_6.1.yml b/.github/workflows/release_6.1.yml index 511555e..de12fe9 100644 --- a/.github/workflows/release_6.1.yml +++ b/.github/workflows/release_6.1.yml @@ -100,7 +100,7 @@ jobs: with: ignore_install_scripts: true - - run: npm publish --provenance + - run: npm publish --provenance --tag alpha if: ${{ needs.release_please.outputs.release_created }} env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/release-please-config.json b/release-please-config.json index 7c6667d..527f3e3 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -7,8 +7,11 @@ "release-type": "node", "bump-minor-pre-major": false, "bump-patch-for-minor-pre-major": false, - "draft": false + "draft": false, + "prerelease-type": "alpha", + "prerelease": true, + "versioning": "prerelease" } }, "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json" -} +} \ No newline at end of file From 9c48051d835f5805cb8cae6c91e27e34a64f88d7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 1 Oct 2025 14:29:42 -0600 Subject: [PATCH 11/11] chore(main): release 7.0.0-alpha (#94) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .release-please-manifest.json | 2 +- HISTORY.md | 18 ++++++++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index b85605b..544b2d4 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "6.5.0" + ".": "7.0.0-alpha" } diff --git a/HISTORY.md b/HISTORY.md index 6e4737e..f5a3483 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -2,6 +2,24 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [7.0.0-alpha](https://github.com/mongodb-js/mongodb-client-encryption/compare/v6.5.0...v7.0.0-alpha) (2025-10-01) + + +### ⚠ BREAKING CHANGES + +* **NODE-6297:** Remove support for explicitly providing CryptoCallbacks ([#103](https://github.com/mongodb-js/mongodb-client-encryption/issues/103)) +* **NODE-7212:** upgrade macos deployment target to 11 ([#99](https://github.com/mongodb-js/mongodb-client-encryption/issues/99)) +* **NODE-7168:** increase napi version to 9 ([#93](https://github.com/mongodb-js/mongodb-client-encryption/issues/93)) +* **NODE-7170:** drop support for Nodejs <20.19.0 ([#92](https://github.com/mongodb-js/mongodb-client-encryption/issues/92)) + +### Features + +* **NODE-6297:** Remove support for explicitly providing CryptoCallbacks ([#103](https://github.com/mongodb-js/mongodb-client-encryption/issues/103)) ([036d901](https://github.com/mongodb-js/mongodb-client-encryption/commit/036d901bd0a0d1e1b29264b17223021e1975172f)) +* **NODE-7043:** add support for custom error wrapping functions ([#102](https://github.com/mongodb-js/mongodb-client-encryption/issues/102)) ([7f0be63](https://github.com/mongodb-js/mongodb-client-encryption/commit/7f0be6317ca9355bc12fe411eb686ad572cd7fed)) +* **NODE-7168:** increase napi version to 9 ([#93](https://github.com/mongodb-js/mongodb-client-encryption/issues/93)) ([be138a9](https://github.com/mongodb-js/mongodb-client-encryption/commit/be138a9022d8ae0c7fd7b8cb16561fd2f8f9db89)) +* **NODE-7170:** drop support for Nodejs <20.19.0 ([#92](https://github.com/mongodb-js/mongodb-client-encryption/issues/92)) ([c46c1b9](https://github.com/mongodb-js/mongodb-client-encryption/commit/c46c1b944c97ecc8e668f87055a8df7cf533ed54)) +* **NODE-7212:** upgrade macos deployment target to 11 ([#99](https://github.com/mongodb-js/mongodb-client-encryption/issues/99)) ([aa61a35](https://github.com/mongodb-js/mongodb-client-encryption/commit/aa61a35f5e174cd1c1e247e036093e18c88268c6)) + ## [6.5.0](https://github.com/mongodb-js/mongodb-client-encryption/compare/v6.4.0...v6.5.0) (2025-08-14) diff --git a/package-lock.json b/package-lock.json index 743a3bf..ad96529 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mongodb-client-encryption", - "version": "6.5.0", + "version": "7.0.0-alpha", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mongodb-client-encryption", - "version": "6.5.0", + "version": "7.0.0-alpha", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { diff --git a/package.json b/package.json index 46cdd2d..39bd48a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mongodb-client-encryption", - "version": "6.5.0", + "version": "7.0.0-alpha", "description": "Official client encryption module for the MongoDB Node.js driver", "main": "lib/index.js", "types": "lib/index.d.ts",