diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000000..9394fbe55fa --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +node_modules +lib +.nyc_output +docs +*dylib +*md diff --git a/.evergreen/config.in.yml b/.evergreen/config.in.yml index f9edbae340a..ab21ef1f009 100644 --- a/.evergreen/config.in.yml +++ b/.evergreen/config.in.yml @@ -734,6 +734,21 @@ functions: args: - ${PROJECT_DIRECTORY}/.evergreen/install-mongodb-client-encryption.sh + "build and test alpine FLE": + - command: subprocess.exec + type: test + params: + working_dir: "src" + env: + INSTALL_DIR: mongodb-client-encryption + PROJECT_DIRECTORY: ${PROJECT_DIRECTORY} + DRIVERS_TOOLS: ${DRIVERS_TOOLS} + NODE_VERSION: ${NODE_VERSION} + MONGODB_URI: ${MONGODB_URI} + binary: bash + args: + - .evergreen/docker/alpine.sh + tasks: - name: 'test-atlas-data-lake' tags: ["datalake", "mongohouse"] @@ -1272,3 +1287,10 @@ post: ignore: - "*.md" + +buildvariants: + - name: Alpine FLE Tests + display_name: Alpine FLE Test + run_on: ubuntu2204-small + tasks: + - .alpine-fle diff --git a/.evergreen/config.yml b/.evergreen/config.yml index 7216fcb9a0d..c0e67beb004 100644 --- a/.evergreen/config.yml +++ b/.evergreen/config.yml @@ -657,6 +657,20 @@ functions: binary: bash args: - ${PROJECT_DIRECTORY}/.evergreen/install-mongodb-client-encryption.sh + build and test alpine FLE: + - command: subprocess.exec + type: test + params: + working_dir: src + env: + INSTALL_DIR: mongodb-client-encryption + PROJECT_DIRECTORY: ${PROJECT_DIRECTORY} + DRIVERS_TOOLS: ${DRIVERS_TOOLS} + NODE_VERSION: ${NODE_VERSION} + MONGODB_URI: ${MONGODB_URI} + binary: bash + args: + - .evergreen/docker/alpine.sh tasks: - name: test-atlas-data-lake tags: @@ -2300,6 +2314,25 @@ tasks: vars: PACKAGE: mongodb-client-encryption@6.0.0 - func: run tests + - name: test-alpine-fle + tags: + - alpine-fle + commands: + - command: expansions.update + type: setup + params: + updates: + - {key: NODE_VERSION, value: 16.20.1} + - {key: VERSION, value: latest} + - {key: TOPOLOGY, value: replica_set} + - {key: CLIENT_ENCRYPTION, value: 'true'} + - {key: TEST_CSFLE, value: 'true'} + - {key: MONGODB_BINARIES, value: '${PROJECT_DIRECTORY}/mongodb/bin'} + - func: install dependencies + - func: bootstrap mongo-orchestration + - func: bootstrap kms servers + - func: assume secrets manager rule + - func: build and test alpine FLE - name: test-latest-server-noauth tags: - latest @@ -3191,6 +3224,11 @@ post: ignore: - '*.md' buildvariants: + - name: Alpine FLE Tests + display_name: Alpine FLE Test + run_on: ubuntu2204-small + tasks: + - .alpine-fle - name: rhel80-large-gallium display_name: rhel8 Node16 run_on: rhel80-large diff --git a/.evergreen/docker/Dockerfile.musl b/.evergreen/docker/Dockerfile.musl new file mode 100644 index 00000000000..18daf0413d4 --- /dev/null +++ b/.evergreen/docker/Dockerfile.musl @@ -0,0 +1,21 @@ +ARG ARCH=arm64 +ARG NODE_VERSION=16.20.1 + +FROM ${ARCH}/node:${NODE_VERSION}-alpine AS dependencies + +RUN apk --no-cache add make g++ libc-dev curl bash python3 py3-pip cmake git vim ranger + +# useful debugging output +RUN < ({ name, diff --git a/.evergreen/run-alpine-fle-tests.sh b/.evergreen/run-alpine-fle-tests.sh new file mode 100644 index 00000000000..cd518c1b4ee --- /dev/null +++ b/.evergreen/run-alpine-fle-tests.sh @@ -0,0 +1,13 @@ +#! /usr/bin/env bash + +set -o errexit +source secrets-export.sh +set -o xtrace + +# use local cache - otherwise npm tries to install to ~ in the docker container, which +# fails when in a mounted volume +export npm_config_cache=$(pwd)/.cache +npm install + +ALPINE=true \ + npm run check:csfle diff --git a/.evergreen/run-kerberos-tests.sh b/.evergreen/run-kerberos-tests.sh index 50e2c03a504..4fab785b3ac 100644 --- a/.evergreen/run-kerberos-tests.sh +++ b/.evergreen/run-kerberos-tests.sh @@ -28,6 +28,7 @@ export MONGODB_URI="mongodb://${USER}@${SASL_HOST}/${GSSAPI_DB}?authMechanism=GS set -o xtrace +npm i kerberos npm run check:kerberos set +o xtrace diff --git a/package-lock.json b/package-lock.json index 84c32bf30ab..a273b043f5c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -46,10 +46,9 @@ "express": "^4.21.2", "gcp-metadata": "^5.3.0", "js-yaml": "^4.1.0", - "kerberos": "^2.2.1", "mocha": "^10.8.2", "mocha-sinon": "^2.1.2", - "mongodb-client-encryption": "^6.1.1", + "mongodb-client-encryption": "^6.2.0", "mongodb-legacy": "^6.1.3", "nyc": "^15.1.0", "prettier": "^3.4.2", @@ -252,46 +251,46 @@ } }, "node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.744.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.744.0.tgz", - "integrity": "sha512-Z6NAl6pXSOO+9XYh3yWmvrzsE2qbc3abD9LDWNwj1j08fNF0gcKTMZol90dz7J3edaEbt2DBAze/I1cU/QgQCQ==", + "version": "3.750.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.750.0.tgz", + "integrity": "sha512-ia5+l7U1ludU/YqQAnEMj5DIp1kfMTu14lUOMG3uTIwTcj8OjkCvAe6BuM0OY6zd8enrJYWLqIqxuKPOWw4I7Q==", "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.744.0", - "@aws-sdk/credential-provider-node": "3.744.0", + "@aws-sdk/core": "3.750.0", + "@aws-sdk/credential-provider-node": "3.750.0", "@aws-sdk/middleware-host-header": "3.734.0", "@aws-sdk/middleware-logger": "3.734.0", "@aws-sdk/middleware-recursion-detection": "3.734.0", - "@aws-sdk/middleware-user-agent": "3.744.0", + "@aws-sdk/middleware-user-agent": "3.750.0", "@aws-sdk/region-config-resolver": "3.734.0", "@aws-sdk/types": "3.734.0", "@aws-sdk/util-endpoints": "3.743.0", "@aws-sdk/util-user-agent-browser": "3.734.0", - "@aws-sdk/util-user-agent-node": "3.744.0", + "@aws-sdk/util-user-agent-node": "3.750.0", "@smithy/config-resolver": "^4.0.1", - "@smithy/core": "^3.1.2", + "@smithy/core": "^3.1.4", "@smithy/fetch-http-handler": "^5.0.1", "@smithy/hash-node": "^4.0.1", "@smithy/invalid-dependency": "^4.0.1", "@smithy/middleware-content-length": "^4.0.1", - "@smithy/middleware-endpoint": "^4.0.3", - "@smithy/middleware-retry": "^4.0.4", + "@smithy/middleware-endpoint": "^4.0.5", + "@smithy/middleware-retry": "^4.0.6", "@smithy/middleware-serde": "^4.0.2", "@smithy/middleware-stack": "^4.0.1", "@smithy/node-config-provider": "^4.0.1", "@smithy/node-http-handler": "^4.0.2", "@smithy/protocol-http": "^5.0.1", - "@smithy/smithy-client": "^4.1.3", + "@smithy/smithy-client": "^4.1.5", "@smithy/types": "^4.1.0", "@smithy/url-parser": "^4.0.1", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.4", - "@smithy/util-defaults-mode-node": "^4.0.4", + "@smithy/util-defaults-mode-browser": "^4.0.6", + "@smithy/util-defaults-mode-node": "^4.0.6", "@smithy/util-endpoints": "^3.0.1", "@smithy/util-middleware": "^4.0.1", "@smithy/util-retry": "^4.0.1", @@ -303,45 +302,45 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.744.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.744.0.tgz", - "integrity": "sha512-mzJxPQ9mcnNY50pi7+pxB34/Dt7PUn0OgkashHdJPTnavoriLWvPcaQCG1NEVAtyzxNdowhpi4KjC+aN1EwAeA==", + "version": "3.750.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.750.0.tgz", + "integrity": "sha512-y0Rx6pTQXw0E61CaptpZF65qNggjqOgymq/RYZU5vWba5DGQ+iqGt8Yq8s+jfBoBBNXshxq8l8Dl5Uq/JTY1wg==", "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.744.0", + "@aws-sdk/core": "3.750.0", "@aws-sdk/middleware-host-header": "3.734.0", "@aws-sdk/middleware-logger": "3.734.0", "@aws-sdk/middleware-recursion-detection": "3.734.0", - "@aws-sdk/middleware-user-agent": "3.744.0", + "@aws-sdk/middleware-user-agent": "3.750.0", "@aws-sdk/region-config-resolver": "3.734.0", "@aws-sdk/types": "3.734.0", "@aws-sdk/util-endpoints": "3.743.0", "@aws-sdk/util-user-agent-browser": "3.734.0", - "@aws-sdk/util-user-agent-node": "3.744.0", + "@aws-sdk/util-user-agent-node": "3.750.0", "@smithy/config-resolver": "^4.0.1", - "@smithy/core": "^3.1.2", + "@smithy/core": "^3.1.4", "@smithy/fetch-http-handler": "^5.0.1", "@smithy/hash-node": "^4.0.1", "@smithy/invalid-dependency": "^4.0.1", "@smithy/middleware-content-length": "^4.0.1", - "@smithy/middleware-endpoint": "^4.0.3", - "@smithy/middleware-retry": "^4.0.4", + "@smithy/middleware-endpoint": "^4.0.5", + "@smithy/middleware-retry": "^4.0.6", "@smithy/middleware-serde": "^4.0.2", "@smithy/middleware-stack": "^4.0.1", "@smithy/node-config-provider": "^4.0.1", "@smithy/node-http-handler": "^4.0.2", "@smithy/protocol-http": "^5.0.1", - "@smithy/smithy-client": "^4.1.3", + "@smithy/smithy-client": "^4.1.5", "@smithy/types": "^4.1.0", "@smithy/url-parser": "^4.0.1", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.4", - "@smithy/util-defaults-mode-node": "^4.0.4", + "@smithy/util-defaults-mode-browser": "^4.0.6", + "@smithy/util-defaults-mode-node": "^4.0.6", "@smithy/util-endpoints": "^3.0.1", "@smithy/util-middleware": "^4.0.1", "@smithy/util-retry": "^4.0.1", @@ -353,19 +352,19 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.744.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.744.0.tgz", - "integrity": "sha512-R0XLfDDq7MAXYyDf7tPb+m0R7gmzTRRDtPNQ5jvuq8dbkefph5gFMkxZ2zSx7dfTsfYHhBPuTBsQ0c5Xjal3Vg==", + "version": "3.750.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.750.0.tgz", + "integrity": "sha512-bZ5K7N5L4+Pa2epbVpUQqd1XLG2uU8BGs/Sd+2nbgTf+lNQJyIxAg/Qsrjz9MzmY8zzQIeRQEkNmR6yVAfCmmQ==", "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.734.0", - "@smithy/core": "^3.1.2", + "@smithy/core": "^3.1.4", "@smithy/node-config-provider": "^4.0.1", "@smithy/property-provider": "^4.0.1", "@smithy/protocol-http": "^5.0.1", "@smithy/signature-v4": "^5.0.1", - "@smithy/smithy-client": "^4.1.3", + "@smithy/smithy-client": "^4.1.5", "@smithy/types": "^4.1.0", "@smithy/util-middleware": "^4.0.1", "fast-xml-parser": "4.4.1", @@ -376,13 +375,13 @@ } }, "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.744.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.744.0.tgz", - "integrity": "sha512-NUxBVFzoVBmS6JH1sK8nzw8AAOI5hCM+lMLa0Dtwxk+dRIe6XRpU9wHkIbaA6Adwp8qvvyYZsgymuMvoAzGmcQ==", + "version": "3.750.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.750.0.tgz", + "integrity": "sha512-TwBzrxgIWcQk846XFn0A9DHBHbfg4sHR3M2GL4E7NcffEkh7r642ILiLa58VvQjO2nB1tcOOFtRqbZvVOKexUw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-cognito-identity": "3.744.0", + "@aws-sdk/client-cognito-identity": "3.750.0", "@aws-sdk/types": "3.734.0", "@smithy/property-provider": "^4.0.1", "@smithy/types": "^4.1.0", @@ -393,13 +392,13 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.744.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.744.0.tgz", - "integrity": "sha512-hyjC7xqzAeERorYYjhQG1ivcr1XlxgfBpa+r4pG29toFG60mACyVzaR7+og3kgzjRFAB7D1imMxPQyEvQ1QokA==", + "version": "3.750.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.750.0.tgz", + "integrity": "sha512-In6bsG0p/P31HcH4DBRKBbcDS/3SHvEPjfXV8ODPWZO/l3/p7IRoYBdQ07C9R+VMZU2D0+/Sc/DWK/TUNDk1+Q==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.744.0", + "@aws-sdk/core": "3.750.0", "@aws-sdk/types": "3.734.0", "@smithy/property-provider": "^4.0.1", "@smithy/types": "^4.1.0", @@ -410,21 +409,21 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.744.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.744.0.tgz", - "integrity": "sha512-k+P1Tl5ewBvVByR6hB726qFIzANgQVf2cY87hZ/e09pQYlH4bfBcyY16VJhkqYnKmv6HMdWxKHX7D8nwlc8Obg==", + "version": "3.750.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.750.0.tgz", + "integrity": "sha512-wFB9qqfa20AB0dElsQz5ZlZT5o+a+XzpEpmg0erylmGYqEOvh8NQWfDUVpRmQuGq9VbvW/8cIbxPoNqEbPtuWQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.744.0", + "@aws-sdk/core": "3.750.0", "@aws-sdk/types": "3.734.0", "@smithy/fetch-http-handler": "^5.0.1", "@smithy/node-http-handler": "^4.0.2", "@smithy/property-provider": "^4.0.1", "@smithy/protocol-http": "^5.0.1", - "@smithy/smithy-client": "^4.1.3", + "@smithy/smithy-client": "^4.1.5", "@smithy/types": "^4.1.0", - "@smithy/util-stream": "^4.0.2", + "@smithy/util-stream": "^4.1.1", "tslib": "^2.6.2" }, "engines": { @@ -432,19 +431,19 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.744.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.744.0.tgz", - "integrity": "sha512-hjEWgkF86tkvg8PIsDiB3KkTj7z8ZFGR0v0OLQYD47o17q1qfoMzZmg9wae3wXp9KzU+lZETo+8oMqX9a+7aVQ==", + "version": "3.750.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.750.0.tgz", + "integrity": "sha512-2YIZmyEr5RUd3uxXpxOLD9G67Bibm4I/65M6vKFP17jVMUT+R1nL7mKqmhEVO2p+BoeV+bwMyJ/jpTYG368PCg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.744.0", - "@aws-sdk/credential-provider-env": "3.744.0", - "@aws-sdk/credential-provider-http": "3.744.0", - "@aws-sdk/credential-provider-process": "3.744.0", - "@aws-sdk/credential-provider-sso": "3.744.0", - "@aws-sdk/credential-provider-web-identity": "3.744.0", - "@aws-sdk/nested-clients": "3.744.0", + "@aws-sdk/core": "3.750.0", + "@aws-sdk/credential-provider-env": "3.750.0", + "@aws-sdk/credential-provider-http": "3.750.0", + "@aws-sdk/credential-provider-process": "3.750.0", + "@aws-sdk/credential-provider-sso": "3.750.0", + "@aws-sdk/credential-provider-web-identity": "3.750.0", + "@aws-sdk/nested-clients": "3.750.0", "@aws-sdk/types": "3.734.0", "@smithy/credential-provider-imds": "^4.0.1", "@smithy/property-provider": "^4.0.1", @@ -457,18 +456,18 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.744.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.744.0.tgz", - "integrity": "sha512-4oUfRd6pe/VGmKoav17pPoOO0WP0L6YXmHqtJHSDmFUOAa+Vh0ZRljTj/yBdleRgdO6rOfdWqoGLFSFiAZDrsQ==", + "version": "3.750.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.750.0.tgz", + "integrity": "sha512-THWHHAceLwsOiowPEmKyhWVDlEUxH07GHSw5AQFDvNQtGKOQl0HSIFO1mKObT2Q2Vqzji9Bq8H58SO5BFtNPRw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.744.0", - "@aws-sdk/credential-provider-http": "3.744.0", - "@aws-sdk/credential-provider-ini": "3.744.0", - "@aws-sdk/credential-provider-process": "3.744.0", - "@aws-sdk/credential-provider-sso": "3.744.0", - "@aws-sdk/credential-provider-web-identity": "3.744.0", + "@aws-sdk/credential-provider-env": "3.750.0", + "@aws-sdk/credential-provider-http": "3.750.0", + "@aws-sdk/credential-provider-ini": "3.750.0", + "@aws-sdk/credential-provider-process": "3.750.0", + "@aws-sdk/credential-provider-sso": "3.750.0", + "@aws-sdk/credential-provider-web-identity": "3.750.0", "@aws-sdk/types": "3.734.0", "@smithy/credential-provider-imds": "^4.0.1", "@smithy/property-provider": "^4.0.1", @@ -481,13 +480,13 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.744.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.744.0.tgz", - "integrity": "sha512-m0d/pDBIaiEAAxWXt/c79RHsKkUkyPOvF2SAMRddVhhOt1GFZI4ml+3f4drmAZfXldIyJmvJTJJqWluVPwTIqQ==", + "version": "3.750.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.750.0.tgz", + "integrity": "sha512-Q78SCH1n0m7tpu36sJwfrUSxI8l611OyysjQeMiIOliVfZICEoHcLHLcLkiR+tnIpZ3rk7d2EQ6R1jwlXnalMQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.744.0", + "@aws-sdk/core": "3.750.0", "@aws-sdk/types": "3.734.0", "@smithy/property-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", @@ -499,15 +498,15 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.744.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.744.0.tgz", - "integrity": "sha512-xdMufTZOvpbDoDPI2XLu0/Rg3qJ/txpS8IJR63NsCGotHJZ/ucLNKwTcGS40hllZB8qSHTlvmlOzElDahTtx/A==", + "version": "3.750.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.750.0.tgz", + "integrity": "sha512-FGYrDjXN/FOQVi/t8fHSv8zCk+NEvtFnuc4cZUj5OIbM4vrfFc5VaPyn41Uza3iv6Qq9rZg0QOwWnqK8lNrqUw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.744.0", - "@aws-sdk/core": "3.744.0", - "@aws-sdk/token-providers": "3.744.0", + "@aws-sdk/client-sso": "3.750.0", + "@aws-sdk/core": "3.750.0", + "@aws-sdk/token-providers": "3.750.0", "@aws-sdk/types": "3.734.0", "@smithy/property-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", @@ -519,14 +518,14 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.744.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.744.0.tgz", - "integrity": "sha512-cNk93GZxORzqEojWfXdrPBF6a7Nu3LpPCWG5mV+lH2tbuGsmw6XhKkwpt7o+OiIP4tKCpHlvqOD8f1nmhe1KDA==", + "version": "3.750.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.750.0.tgz", + "integrity": "sha512-Nz8zs3YJ+GOTSrq+LyzbbC1Ffpt7pK38gcOyNZv76pP5MswKTUKNYBJehqwa+i7FcFQHsCk3TdhR8MT1ZR23uA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.744.0", - "@aws-sdk/nested-clients": "3.744.0", + "@aws-sdk/core": "3.750.0", + "@aws-sdk/nested-clients": "3.750.0", "@aws-sdk/types": "3.734.0", "@smithy/property-provider": "^4.0.1", "@smithy/types": "^4.1.0", @@ -537,25 +536,25 @@ } }, "node_modules/@aws-sdk/credential-providers": { - "version": "3.744.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.744.0.tgz", - "integrity": "sha512-8vXnKA/TklSx6HdF88RVohtsvYNuGP9nm5RTCSGbWVR7+xEU/Eh15B+EKoGasCjZW7/9GxnSULp0DN1msCR23A==", + "version": "3.750.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.750.0.tgz", + "integrity": "sha512-HpJyLHAjcn/IcvsL4WhEIgbzEWfTnn29u8QFNa5Ii9pVtxdeP/DkSthP3SNxLK2jVNcqWL9xago02SiasNOKfw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-cognito-identity": "3.744.0", - "@aws-sdk/core": "3.744.0", - "@aws-sdk/credential-provider-cognito-identity": "3.744.0", - "@aws-sdk/credential-provider-env": "3.744.0", - "@aws-sdk/credential-provider-http": "3.744.0", - "@aws-sdk/credential-provider-ini": "3.744.0", - "@aws-sdk/credential-provider-node": "3.744.0", - "@aws-sdk/credential-provider-process": "3.744.0", - "@aws-sdk/credential-provider-sso": "3.744.0", - "@aws-sdk/credential-provider-web-identity": "3.744.0", - "@aws-sdk/nested-clients": "3.744.0", + "@aws-sdk/client-cognito-identity": "3.750.0", + "@aws-sdk/core": "3.750.0", + "@aws-sdk/credential-provider-cognito-identity": "3.750.0", + "@aws-sdk/credential-provider-env": "3.750.0", + "@aws-sdk/credential-provider-http": "3.750.0", + "@aws-sdk/credential-provider-ini": "3.750.0", + "@aws-sdk/credential-provider-node": "3.750.0", + "@aws-sdk/credential-provider-process": "3.750.0", + "@aws-sdk/credential-provider-sso": "3.750.0", + "@aws-sdk/credential-provider-web-identity": "3.750.0", + "@aws-sdk/nested-clients": "3.750.0", "@aws-sdk/types": "3.734.0", - "@smithy/core": "^3.1.2", + "@smithy/core": "^3.1.4", "@smithy/credential-provider-imds": "^4.0.1", "@smithy/property-provider": "^4.0.1", "@smithy/types": "^4.1.0", @@ -613,16 +612,16 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.744.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.744.0.tgz", - "integrity": "sha512-ROUbDQHfVWiBHXd4m9E9mKj1Azby8XCs8RC8OCf9GVH339GSE6aMrPJSzMlsV1LmzPdPIypgp5qqh5NfSrKztg==", + "version": "3.750.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.750.0.tgz", + "integrity": "sha512-YYcslDsP5+2NZoN3UwuhZGkhAHPSli7HlJHBafBrvjGV/I9f8FuOO1d1ebxGdEP4HyRXUGyh+7Ur4q+Psk0ryw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.744.0", + "@aws-sdk/core": "3.750.0", "@aws-sdk/types": "3.734.0", "@aws-sdk/util-endpoints": "3.743.0", - "@smithy/core": "^3.1.2", + "@smithy/core": "^3.1.4", "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" @@ -632,45 +631,45 @@ } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.744.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.744.0.tgz", - "integrity": "sha512-Mnrlh4lRY1gZQnKvN2Lh/5WXcGkzC41NM93mtn2uaqOh+DZLCXCttNCfbUesUvYJLOo3lYaOpiDsjTkPVB1yjw==", + "version": "3.750.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.750.0.tgz", + "integrity": "sha512-OH68BRF0rt9nDloq4zsfeHI0G21lj11a66qosaljtEP66PWm7tQ06feKbFkXHT5E1K3QhJW3nVyK8v2fEBY5fg==", "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.744.0", + "@aws-sdk/core": "3.750.0", "@aws-sdk/middleware-host-header": "3.734.0", "@aws-sdk/middleware-logger": "3.734.0", "@aws-sdk/middleware-recursion-detection": "3.734.0", - "@aws-sdk/middleware-user-agent": "3.744.0", + "@aws-sdk/middleware-user-agent": "3.750.0", "@aws-sdk/region-config-resolver": "3.734.0", "@aws-sdk/types": "3.734.0", "@aws-sdk/util-endpoints": "3.743.0", "@aws-sdk/util-user-agent-browser": "3.734.0", - "@aws-sdk/util-user-agent-node": "3.744.0", + "@aws-sdk/util-user-agent-node": "3.750.0", "@smithy/config-resolver": "^4.0.1", - "@smithy/core": "^3.1.2", + "@smithy/core": "^3.1.4", "@smithy/fetch-http-handler": "^5.0.1", "@smithy/hash-node": "^4.0.1", "@smithy/invalid-dependency": "^4.0.1", "@smithy/middleware-content-length": "^4.0.1", - "@smithy/middleware-endpoint": "^4.0.3", - "@smithy/middleware-retry": "^4.0.4", + "@smithy/middleware-endpoint": "^4.0.5", + "@smithy/middleware-retry": "^4.0.6", "@smithy/middleware-serde": "^4.0.2", "@smithy/middleware-stack": "^4.0.1", "@smithy/node-config-provider": "^4.0.1", "@smithy/node-http-handler": "^4.0.2", "@smithy/protocol-http": "^5.0.1", - "@smithy/smithy-client": "^4.1.3", + "@smithy/smithy-client": "^4.1.5", "@smithy/types": "^4.1.0", "@smithy/url-parser": "^4.0.1", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.4", - "@smithy/util-defaults-mode-node": "^4.0.4", + "@smithy/util-defaults-mode-browser": "^4.0.6", + "@smithy/util-defaults-mode-node": "^4.0.6", "@smithy/util-endpoints": "^3.0.1", "@smithy/util-middleware": "^4.0.1", "@smithy/util-retry": "^4.0.1", @@ -700,13 +699,13 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.744.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.744.0.tgz", - "integrity": "sha512-v/1+lWkDCd60Ei6oyhJqli6mTsPEVepLoSMB50vHUVlJP0fzXu/3FMje90/RzeUoh/VugZQJCEv/NNpuC6wztg==", + "version": "3.750.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.750.0.tgz", + "integrity": "sha512-X/KzqZw41iWolwNdc8e3RMcNSMR364viHv78u6AefXOO5eRM40c4/LuST1jDzq35/LpnqRhL7/MuixOetw+sFw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/nested-clients": "3.744.0", + "@aws-sdk/nested-clients": "3.750.0", "@aws-sdk/types": "3.734.0", "@smithy/property-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", @@ -774,13 +773,13 @@ } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.744.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.744.0.tgz", - "integrity": "sha512-BJURjwIXhNa4heXkLC0+GcL+8wVXaU7JoyW6ckdvp93LL+sVHeR1d5FxXZHQW/pMI4E3gNlKyBqjKaT75tObNQ==", + "version": "3.750.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.750.0.tgz", + "integrity": "sha512-84HJj9G9zbrHX2opLk9eHfDceB+UIHVrmflMzWHpsmo9fDuro/flIBqaVDlE021Osj6qIM0SJJcnL6s23j7JEw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.744.0", + "@aws-sdk/middleware-user-agent": "3.750.0", "@aws-sdk/types": "3.734.0", "@smithy/node-config-provider": "^4.0.1", "@smithy/types": "^4.1.0", @@ -824,23 +823,22 @@ } }, "node_modules/@babel/core": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.8.tgz", - "integrity": "sha512-l+lkXCHS6tQEc5oUpK28xBOZ6+HwaH7YwoYQbLFiYb4nS2/l1tKnZEtEWkD0GuiYdvArf9qBS0XlQGXzPMsNqQ==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz", + "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.8", + "@babel/generator": "^7.26.9", "@babel/helper-compilation-targets": "^7.26.5", "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.7", - "@babel/parser": "^7.26.8", - "@babel/template": "^7.26.8", - "@babel/traverse": "^7.26.8", - "@babel/types": "^7.26.8", - "@types/gensync": "^1.0.0", + "@babel/helpers": "^7.26.9", + "@babel/parser": "^7.26.9", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.9", + "@babel/types": "^7.26.9", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -873,14 +871,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.8.tgz", - "integrity": "sha512-ef383X5++iZHWAXX0SXQR6ZyQhw/0KtTkrTz61WXRhFM6dhpHulO/RJz79L8S6ugZHJkOOkUrUdxgdF2YiPFnA==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz", + "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.26.8", - "@babel/types": "^7.26.8", + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -979,27 +977,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.7.tgz", - "integrity": "sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.9.tgz", + "integrity": "sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.7" + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.8.tgz", - "integrity": "sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", + "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.26.8" + "@babel/types": "^7.26.9" }, "bin": { "parser": "bin/babel-parser.js" @@ -1009,32 +1007,32 @@ } }, "node_modules/@babel/template": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.8.tgz", - "integrity": "sha512-iNKaX3ZebKIsCvJ+0jd6embf+Aulaa3vNBqZ41kM7iTWjx5qzWKXGHiJUW3+nTpQ18SG11hdF8OAzKrpXkb96Q==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", + "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.26.8", - "@babel/types": "^7.26.8" + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.8.tgz", - "integrity": "sha512-nic9tRkjYH0oB2dzr/JoGIm+4Q6SuYeLEiIiZDwBscRMYFJ+tMAz98fuel9ZnbXViA2I0HVSSRRK8DW5fjXStA==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz", + "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.8", - "@babel/parser": "^7.26.8", - "@babel/template": "^7.26.8", - "@babel/types": "^7.26.8", + "@babel/generator": "^7.26.9", + "@babel/parser": "^7.26.9", + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.9", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1053,9 +1051,9 @@ } }, "node_modules/@babel/types": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.8.tgz", - "integrity": "sha512-eUuWapzEGWFEpHFxgEaBG8e3n6S8L3MSu0oda755rOfabWPnh0Our1AozNFVUxGFIhbKgd1ksprsoDGMinTOTA==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", + "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", "dev": true, "license": "MIT", "dependencies": { @@ -1453,9 +1451,9 @@ } }, "node_modules/@microsoft/api-extractor": { - "version": "7.49.2", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.49.2.tgz", - "integrity": "sha512-DI/WnvhbkHcucxxc4ys00ejCiViFls5EKPrEfe4NV3GGpVkoM5ZXF61HZNSGA8IG0oEV4KfTqIa59Rc3wdMopw==", + "version": "7.50.0", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.50.0.tgz", + "integrity": "sha512-Ds/PHTiVzuENQsmXrJKkSdfgNkr/SDG/2rDef0AWl3BchAnXdO7gXaYsAkNx4gWiC4OngNA3fQfd3+BcQxP1DQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1464,8 +1462,8 @@ "@microsoft/tsdoc-config": "~0.17.1", "@rushstack/node-core-library": "5.11.0", "@rushstack/rig-package": "0.5.3", - "@rushstack/terminal": "0.14.6", - "@rushstack/ts-command-line": "4.23.4", + "@rushstack/terminal": "0.15.0", + "@rushstack/ts-command-line": "4.23.5", "lodash": "~4.17.15", "minimatch": "~3.0.3", "resolve": "~1.22.1", @@ -1945,9 +1943,9 @@ } }, "node_modules/@rushstack/terminal": { - "version": "0.14.6", - "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.14.6.tgz", - "integrity": "sha512-4nMUy4h0u5PGXVG71kEA9uYI3l8GjVqewoHOFONiM6fuqS51ORdaJZ5ZXB2VZEGUyfg1TOTSy88MF2cdAy+lqA==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.15.0.tgz", + "integrity": "sha512-vXQPRQ+vJJn4GVqxkwRe+UGgzNxdV8xuJZY2zem46Y0p3tlahucH9/hPmLGj2i9dQnUBFiRnoM9/KW7PYw8F4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1964,13 +1962,13 @@ } }, "node_modules/@rushstack/ts-command-line": { - "version": "4.23.4", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.23.4.tgz", - "integrity": "sha512-pqmzDJCm0TS8VyeqnzcJ7ncwXgiLDQ6LVmXXfqv2nPL6VIz+UpyTpNVfZRJpyyJ+UDxqob1vIj2liaUfBjv8/A==", + "version": "4.23.5", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.23.5.tgz", + "integrity": "sha512-jg70HfoK44KfSP3MTiL5rxsZH7X1ktX3cZs9Sl8eDu1/LxJSbPsh0MOFRC710lIuYYSgxWjI5AjbCBAl7u3RxA==", "dev": true, "license": "MIT", "dependencies": { - "@rushstack/terminal": "0.14.6", + "@rushstack/terminal": "0.15.0", "@types/argparse": "1.0.38", "argparse": "~1.0.9", "string-argv": "~0.3.1" @@ -2064,9 +2062,9 @@ } }, "node_modules/@smithy/core": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.1.2.tgz", - "integrity": "sha512-htwQXkbdF13uwwDevz9BEzL5ABK+1sJpVQXywwGSH973AVOvisHNfpcB8A8761G6XgHoS2kHPqc9DqHJ2gp+/Q==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.1.4.tgz", + "integrity": "sha512-wFExFGK+7r2wYriOqe7RRIBNpvxwiS95ih09+GSLRBdoyK/O1uZA7K7pKesj5CBvwJuSBeXwLyR88WwIAY+DGA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2075,7 +2073,7 @@ "@smithy/types": "^4.1.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-middleware": "^4.0.1", - "@smithy/util-stream": "^4.0.2", + "@smithy/util-stream": "^4.1.1", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, @@ -2176,13 +2174,13 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.0.3.tgz", - "integrity": "sha512-YdbmWhQF5kIxZjWqPIgboVfi8i5XgiYMM7GGKFMTvBei4XjNQfNv8sukT50ITvgnWKKKpOtp0C0h7qixLgb77Q==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.0.5.tgz", + "integrity": "sha512-cPzGZV7qStHwboFrm6GfrzQE+YDiCzWcTh4+7wKrP/ZQ4gkw+r7qDjV8GjM4N0UYsuUyLfpzLGg5hxsYTU11WA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.1.2", + "@smithy/core": "^3.1.4", "@smithy/middleware-serde": "^4.0.2", "@smithy/node-config-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", @@ -2196,16 +2194,16 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.0.4.tgz", - "integrity": "sha512-wmxyUBGHaYUqul0wZiset4M39SMtDBOtUr2KpDuftKNN74Do9Y36Go6Eqzj9tL0mIPpr31ulB5UUtxcsCeGXsQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.0.6.tgz", + "integrity": "sha512-s8QzuOQnbdvRymD9Gt9c9zMq10wUQAHQ3z72uirrBHCwZcLTrL5iCOuVTMdka2IXOYhQE890WD5t6G24+F+Qcg==", "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^4.0.1", "@smithy/protocol-http": "^5.0.1", "@smithy/service-error-classification": "^4.0.1", - "@smithy/smithy-client": "^4.1.3", + "@smithy/smithy-client": "^4.1.5", "@smithy/types": "^4.1.0", "@smithy/util-middleware": "^4.0.1", "@smithy/util-retry": "^4.0.1", @@ -2382,18 +2380,18 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.1.3.tgz", - "integrity": "sha512-A2Hz85pu8BJJaYFdX8yb1yocqigyqBzn+OVaVgm+Kwi/DkN8vhN2kbDVEfADo6jXf5hPKquMLGA3UINA64UZ7A==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.1.5.tgz", + "integrity": "sha512-DMXYoYeL4QkElr216n1yodTFeATbfb4jwYM9gKn71Rw/FNA1/Sm36tkTSCsZEs7mgpG3OINmkxL9vgVFzyGPaw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.1.2", - "@smithy/middleware-endpoint": "^4.0.3", + "@smithy/core": "^3.1.4", + "@smithy/middleware-endpoint": "^4.0.5", "@smithy/middleware-stack": "^4.0.1", "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", - "@smithy/util-stream": "^4.0.2", + "@smithy/util-stream": "^4.1.1", "tslib": "^2.6.2" }, "engines": { @@ -2497,14 +2495,14 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.4.tgz", - "integrity": "sha512-Ej1bV5sbrIfH++KnWxjjzFNq9nyP3RIUq2c9Iqq7SmMO/idUR24sqvKH2LUQFTSPy/K7G4sB2m8n7YYlEAfZaw==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.6.tgz", + "integrity": "sha512-N8+VCt+piupH1A7DgSVDNrVHqRLz8r6DvBkpS7EWHiIxsUk4jqGuQLjqC/gnCzmwGkVBdNruHoYAzzaSQ8e80w==", "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/property-provider": "^4.0.1", - "@smithy/smithy-client": "^4.1.3", + "@smithy/smithy-client": "^4.1.5", "@smithy/types": "^4.1.0", "bowser": "^2.11.0", "tslib": "^2.6.2" @@ -2514,9 +2512,9 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.4.tgz", - "integrity": "sha512-HE1I7gxa6yP7ZgXPCFfZSDmVmMtY7SHqzFF55gM/GPegzZKaQWZZ+nYn9C2Cc3JltCMyWe63VPR3tSFDEvuGjw==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.6.tgz", + "integrity": "sha512-9zhx1shd1VwSSVvLZB8CM3qQ3RPD3le7A3h/UPuyh/PC7g4OaWDi2xUNzamsVoSmCGtmUBONl56lM2EU6LcH7A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2524,7 +2522,7 @@ "@smithy/credential-provider-imds": "^4.0.1", "@smithy/node-config-provider": "^4.0.1", "@smithy/property-provider": "^4.0.1", - "@smithy/smithy-client": "^4.1.3", + "@smithy/smithy-client": "^4.1.5", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, @@ -2590,9 +2588,9 @@ } }, "node_modules/@smithy/util-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.0.2.tgz", - "integrity": "sha512-0eZ4G5fRzIoewtHtwaYyl8g2C+osYOT4KClXgfdNEDAgkbe2TYPqcnw4GAWabqkZCax2ihRGPe9LZnsPdIUIHA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.1.1.tgz", + "integrity": "sha512-+Xvh8nhy0Wjv1y71rBVyV3eJU3356XsFQNI8dEZVNrQju7Eib8G31GWtO+zMa9kTCGd41Mflu+ZKfmQL/o2XzQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2720,13 +2718,11 @@ } }, "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz", + "integrity": "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -2765,13 +2761,6 @@ "@types/send": "*" } }, - "node_modules/@types/gensync": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/gensync/-/gensync-1.0.4.tgz", - "integrity": "sha512-C3YYeRQWp2fmq9OryX+FoDy8nXS6scQ7dPptD8LnFDAUNcKWJjXQKDNJD3HVm+kOUsXhTOkpi69vI4EuAr95bA==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/http-errors": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", @@ -2815,9 +2804,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.13.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.1.tgz", - "integrity": "sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==", + "version": "22.13.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.4.tgz", + "integrity": "sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg==", "dev": true, "license": "MIT", "dependencies": { @@ -3675,9 +3664,9 @@ } }, "node_modules/call-bind-apply-helpers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", - "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3744,9 +3733,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001699", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001699.tgz", - "integrity": "sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w==", + "version": "1.0.30001700", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001700.tgz", + "integrity": "sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==", "dev": true, "funding": [ { @@ -4213,9 +4202,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.97", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.97.tgz", - "integrity": "sha512-HKLtaH02augM7ZOdYRuO19rWDeY+QSJ1VxnXFa/XDFLf07HvM90pALIJFgrO+UVaajI3+aJMMpojoUTLZyQ7JQ==", + "version": "1.5.102", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.102.tgz", + "integrity": "sha512-eHhqaja8tE/FNpIiBrvBjFV/SSKpyWHLvxuR9dPTdo+3V9ppdLmFB7ZZQ98qNovcngPLYIz0oOBF9P0FfZef5Q==", "dev": true, "license": "ISC" }, @@ -4422,17 +4411,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-formatter-pretty/node_modules/@types/eslint": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz", - "integrity": "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, "node_modules/eslint-plugin-mocha": { "version": "10.5.0", "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.5.0.tgz", @@ -5059,9 +5037,9 @@ } }, "node_modules/flatted": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", - "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "dev": true, "license": "ISC" }, @@ -6167,28 +6145,6 @@ "dev": true, "license": "MIT" }, - "node_modules/kerberos": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/kerberos/-/kerberos-2.2.1.tgz", - "integrity": "sha512-Vlyv1tjAPb0y2VIJ03dKkUjsneGIBuTkH24uGRx6/DrKpFlVuGPmct3m5aEotljVUlw7PAGWABwR5aNeW7y8Zw==", - "dev": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "node-addon-api": "^6.1.0", - "prebuild-install": "^7.1.2" - }, - "engines": { - "node": ">=12.9.0" - } - }, - "node_modules/kerberos/node_modules/node-addon-api": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", - "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", - "dev": true, - "license": "MIT" - }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -6724,15 +6680,15 @@ } }, "node_modules/mongodb-client-encryption": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/mongodb-client-encryption/-/mongodb-client-encryption-6.1.1.tgz", - "integrity": "sha512-hqy68WWNZmkoqldFlpw8TQNaJUOor4YCM/FuxETZTeTZpGEbQwkTwdrQlgiV14qyOizPw8abbAxGi3zX+raA9w==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/mongodb-client-encryption/-/mongodb-client-encryption-6.2.0.tgz", + "integrity": "sha512-jfOCthPH0jxd9RJCerNbf1aRAcUJFwiWikJ2j9oBPRc+Oets3aKUriyZe4n16sF3Ibc1xar1zNInAfHEcVtYRg==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "node-addon-api": "^4.3.0", - "prebuild-install": "^7.1.2" + "prebuild-install": "^7.1.3" }, "engines": { "node": ">=16.20.1" @@ -7536,9 +7492,9 @@ } }, "node_modules/prettier": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.0.tgz", - "integrity": "sha512-quyMrVt6svPS7CjQ9gKb3GLEX/rl3BCL2oa/QkNcXv4YNVBC9olt3s+H7ukto06q7B1Qz46PbrKLO34PR6vXcA==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.1.tgz", + "integrity": "sha512-hPpFQvHwL3Qv5AdRvBFMhnKo4tYxp0ReXiPn2bxkiohEX6mBeBwEpBSQTkD458RaaDKQMYSp4hX4UtfUTA5wDw==", "dev": true, "license": "MIT", "bin": { @@ -9246,9 +9202,9 @@ } }, "node_modules/v8-heapsnapshot/node_modules/@types/node": { - "version": "18.19.75", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.75.tgz", - "integrity": "sha512-UIksWtThob6ZVSyxcOqCLOUNg/dyO1Qvx4McgeuhrEtHTLFTf7BBhEazaE4K806FGTPtzd/2sE90qn4fVr7cyw==", + "version": "18.19.76", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.76.tgz", + "integrity": "sha512-yvR7Q9LdPz2vGpmpJX5LolrgRdWvB67MJKDPSgIIzpFbaf9a1j/f5DnLp5VDyHGMR0QZHlTr1afsD87QCXFHKw==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 90c03767498..4498ba86402 100644 --- a/package.json +++ b/package.json @@ -94,10 +94,9 @@ "express": "^4.21.2", "gcp-metadata": "^5.3.0", "js-yaml": "^4.1.0", - "kerberos": "^2.2.1", "mocha": "^10.8.2", "mocha-sinon": "^2.1.2", - "mongodb-client-encryption": "^6.1.1", + "mongodb-client-encryption": "^6.2.0", "mongodb-legacy": "^6.1.3", "nyc": "^15.1.0", "prettier": "^3.4.2", @@ -176,4 +175,4 @@ "moduleResolution": "node" } } -} +} \ No newline at end of file diff --git a/test/integration/client-side-encryption/client_side_encryption.prose.12.deadlock.test.ts b/test/integration/client-side-encryption/client_side_encryption.prose.12.deadlock.test.ts index ee833fcbd52..0e40e8057f0 100644 --- a/test/integration/client-side-encryption/client_side_encryption.prose.12.deadlock.test.ts +++ b/test/integration/client-side-encryption/client_side_encryption.prose.12.deadlock.test.ts @@ -5,7 +5,8 @@ import * as path from 'path'; // eslint-disable-next-line @typescript-eslint/no-restricted-imports import { ClientEncryption } from '../../../src/client-side-encryption/client_encryption'; -import { type CommandStartedEvent, MongoClient, type MongoClientOptions } from '../../mongodb'; +import { type CommandStartedEvent, type MongoClient, type MongoClientOptions } from '../../mongodb'; +import { type TestConfiguration } from '../../tools/runner/config'; import { getEncryptExtraOptions } from '../../tools/utils'; import { dropCollection } from '../shared'; @@ -30,20 +31,26 @@ const $jsonSchema = BSON.EJSON.parse( ) ); -class CapturingMongoClient extends MongoClient { - commandStartedEvents: Array = []; - clientsCreated = 0; - constructor(url: string, options: MongoClientOptions = {}) { - options = { ...options, monitorCommands: true, __skipPingOnConnect: true }; - if (process.env.MONGODB_API_VERSION) { - options.serverApi = process.env.MONGODB_API_VERSION as MongoClientOptions['serverApi']; - } +function makeClient( + configuration: TestConfiguration, + options: MongoClientOptions = {} +): MongoClient & { + commandStartedEvents: Array; + clientsCreated: number; +} { + options = { ...options, monitorCommands: true, __skipPingOnConnect: true }; + if (process.env.MONGODB_API_VERSION) { + options.serverApi = process.env.MONGODB_API_VERSION as MongoClientOptions['serverApi']; + } - super(url, options); + const client = configuration.newClient(undefined, options) as ReturnType; - this.on('commandStarted', ev => this.commandStartedEvents.push(ev)); - this.on('topologyOpening', () => this.clientsCreated++); - } + client.commandStartedEvents = []; + client.clientsCreated = 0; + client.on('commandStarted', ev => client.commandStartedEvents.push(ev)); + client.on('topologyOpening', () => client.clientsCreated++); + + return client; } function deadlockTest( @@ -55,11 +62,10 @@ function deadlockTest( assertions ) { return async function () { - const url = this.configuration.url(); const clientTest = this.clientTest; const ciphertext = this.ciphertext; - const clientEncryptedOpts = { + const clientEncryptedOpts: MongoClientOptions = { autoEncryption: { keyVaultNamespace: 'keyvault.datakeys', kmsProviders: { local: { key: LOCAL_KEY } }, @@ -70,7 +76,7 @@ function deadlockTest( maxPoolSize }; - const clientEncrypted = new CapturingMongoClient(url, clientEncryptedOpts); + const clientEncrypted = makeClient(this.configuration, clientEncryptedOpts); await clientEncrypted.connect(); @@ -95,19 +101,18 @@ function deadlockTest( }; } -const metadata = { +const metadata: MongoDBMetadataUI = { requires: { clientSideEncryption: true, mongodb: '>=4.2.0', topology: '!load-balanced' } }; + describe('Connection Pool Deadlock Prevention', function () { beforeEach(async function () { - const url: string = this.configuration.url(); - - this.clientTest = new CapturingMongoClient(url); - this.clientKeyVault = new CapturingMongoClient(url, { + this.clientTest = makeClient(this.configuration); + this.clientKeyVault = makeClient(this.configuration, { monitorCommands: true, maxPoolSize: 1 }); @@ -132,8 +137,7 @@ describe('Connection Pool Deadlock Prevention', function () { this.clientEncryption = new ClientEncryption(this.clientTest, { kmsProviders: { local: { key: LOCAL_KEY } }, keyVaultNamespace: 'keyvault.datakeys', - keyVaultClient: this.keyVaultClient, - extraOptions: getEncryptExtraOptions() + keyVaultClient: this.keyVaultClient }); this.ciphertext = await this.clientEncryption.encrypt('string0', { @@ -143,7 +147,7 @@ describe('Connection Pool Deadlock Prevention', function () { }); afterEach(function () { - return Promise.all([this.clientKeyVault.close(), this.clientTest.close()]).then(() => { + return Promise.all([this.clientKeyVault?.close(), this.clientTest?.close()]).then(() => { this.clientKeyVault = undefined; this.clientTest = undefined; this.clientEncryption = undefined; diff --git a/test/integration/client-side-encryption/client_side_encryption.prose.test.js b/test/integration/client-side-encryption/client_side_encryption.prose.test.js index adbc8b4964b..d067bf1804c 100644 --- a/test/integration/client-side-encryption/client_side_encryption.prose.test.js +++ b/test/integration/client-side-encryption/client_side_encryption.prose.test.js @@ -20,6 +20,7 @@ const { ClientSideEncryptionFilter } = require('../../tools/runner/filters/client_encryption_filter'); const { getCSFLEKMSProviders } = require('../../csfle-kms-providers'); +const { AlpineTestConfiguration } = require('../../tools/runner/config'); const getKmsProviders = (localKey, kmipEndpoint, azureEndpoint, gcpEndpoint) => { const result = getCSFLEKMSProviders(); @@ -1113,6 +1114,12 @@ describe('Client Side Encryption Prose Tests', metadata, function () { // configure with `client_encrypted` to use the schema `external/external-schema.json` for // `db.coll` by setting a schema map like `{"db.coll": ; - // Data Key Stuff - const AWS_ACCESS_KEY_ID = process.env.AWS_ACCESS_KEY_ID; - const AWS_SECRET_ACCESS_KEY = process.env.AWS_SECRET_ACCESS_KEY; - const AWS_REGION = process.env.AWS_REGION; - const AWS_CMK_ID = process.env.AWS_CMK_ID; const kmsProviders = { - aws: { accessKeyId: AWS_ACCESS_KEY_ID, secretAccessKey: AWS_SECRET_ACCESS_KEY } + local: { key: Buffer.alloc(96) } }; - const dataKeyOptions = { masterKey: { key: AWS_CMK_ID, region: AWS_REGION } }; beforeEach(function () { client = this.configuration.newClient(); @@ -487,41 +481,36 @@ describe('ClientEncryption integration tests', function () { await client?.close(); }); - function makeOptions(keyAltNames) { - expect(dataKeyOptions.masterKey).to.be.an('object'); - expect(dataKeyOptions.masterKey.key).to.be.a('string'); - expect(dataKeyOptions.masterKey.region).to.be.a('string'); - - return { - masterKey: { - key: dataKeyOptions.masterKey.key, - region: dataKeyOptions.masterKey.region - }, - keyAltNames - }; - } - describe('errors', function () { for (const val of [42, 'hello', { keyAltNames: 'foobar' }, /foobar/]) { it(`should fail if typeof keyAltNames = ${typeof val}`, metadata, async function () { - const options = makeOptions(val); - const error = await clientEncryption.createDataKey('aws', options).catch(error => error); + const error = await clientEncryption + .createDataKey('local', { + // @ts-expect-error Invalid type tests + keyAltNames: val + }) + .catch(error => error); expect(error).to.be.instanceOf(MongoCryptInvalidArgumentError); }); } for (const val of [undefined, null, 42, { keyAltNames: 'foobar' }, ['foobar'], /foobar/]) { it(`should fail if typeof keyAltNames[x] = ${typeof val}`, metadata, async function () { - const options = makeOptions([val]); - const error = await clientEncryption.createDataKey('aws', options).catch(error => error); + const error = await clientEncryption + .createDataKey('local', { + // @ts-expect-error Invalid type tests + keyAltNames: [val] + }) + .catch(error => error); expect(error).to.be.instanceOf(MongoCryptInvalidArgumentError); }); } }); it('should create a key with keyAltNames', metadata, async function () { - const options = makeOptions(['foobar']); - const dataKey = await clientEncryption.createDataKey('aws', options); + const dataKey = await clientEncryption.createDataKey('local', { + keyAltNames: ['foobar'] + }); const document = await collection.findOne({ keyAltNames: 'foobar' }); expect(document).to.be.an('object'); expect(document).to.have.property('keyAltNames').that.includes.members(['foobar']); @@ -529,10 +518,9 @@ describe('ClientEncryption integration tests', function () { }); it('should create a key with multiple keyAltNames', metadata, async function () { - const dataKey = await clientEncryption.createDataKey( - 'aws', - makeOptions(['foobar', 'fizzbuzz']) - ); + const dataKey = await clientEncryption.createDataKey('local', { + keyAltNames: ['foobar', 'fizzbuzz'] + }); const docs = await Promise.all([ collection.findOne({ keyAltNames: 'foobar' }), collection.findOne({ keyAltNames: 'fizzbuzz' }) @@ -557,7 +545,9 @@ describe('ClientEncryption integration tests', function () { const valueToEncrypt = 'foobar'; - const keyId = await clientEncryption.createDataKey('aws', makeOptions([keyAltName])); + const keyId = await clientEncryption.createDataKey('local', { + keyAltNames: [keyAltName] + }); const encryptedValue = await clientEncryption.encrypt(valueToEncrypt, { keyId, algorithm }); const encryptedValue2 = await clientEncryption.encrypt(valueToEncrypt, { keyAltName, diff --git a/test/tools/runner/config.ts b/test/tools/runner/config.ts index 505f6a85b3e..96d1f677a66 100644 --- a/test/tools/runner/config.ts +++ b/test/tools/runner/config.ts @@ -453,3 +453,23 @@ export class AstrolabeTestConfiguration extends TestConfiguration { return process.env.DRIVERS_ATLAS_TESTING_URI!; } } + +export class AlpineTestConfiguration extends TestConfiguration { + override newClient( + urlOrQueryOptions?: string | Record, + serverOptions?: MongoClientOptions + ): MongoClient { + const options = serverOptions ?? {}; + + if (options.autoEncryption) { + const extraOptions: MongoClientOptions['autoEncryption']['extraOptions'] = { + ...options.autoEncryption.extraOptions, + mongocryptdBypassSpawn: true, + mongocryptdURI: process.env.MONGOCRYPTD_URI + }; + options.autoEncryption.extraOptions = extraOptions; + } + + return super.newClient(urlOrQueryOptions, options); + } +} diff --git a/test/tools/runner/hooks/configuration.ts b/test/tools/runner/hooks/configuration.ts index 959c62d1325..1af5e7a6ee6 100644 --- a/test/tools/runner/hooks/configuration.ts +++ b/test/tools/runner/hooks/configuration.ts @@ -6,7 +6,7 @@ require('source-map-support').install({ }); import { MongoClient } from '../../../mongodb'; -import { AstrolabeTestConfiguration, TestConfiguration } from '../config'; +import { AlpineTestConfiguration, AstrolabeTestConfiguration, TestConfiguration } from '../config'; import { getEnvironmentalOptions } from '../../utils'; import * as mock from '../../mongodb-mock/index'; import { inspect } from 'util'; @@ -153,10 +153,10 @@ const testConfigBeforeHook = async function () { .command({ getParameter: '*' }) .catch(error => ({ noReply: error })); - this.configuration = new TestConfiguration( - loadBalanced ? SINGLE_MONGOS_LB_URI : MONGODB_URI, - context - ); + const Config: typeof TestConfiguration = process.env.ALPINE + ? AlpineTestConfiguration + : TestConfiguration; + this.configuration = new Config(loadBalanced ? SINGLE_MONGOS_LB_URI : MONGODB_URI, context); await client.close(); @@ -169,6 +169,8 @@ const testConfigBeforeHook = async function () { version: this.configuration.buildInfo.version, node: process.version, os: process.platform, + alpineLinux: Boolean(process.env.ALPINE), + cryptdUri: process.env.MONGOCRYPTD_URI, pid: process.pid, serverless: process.env.SERVERLESS === '1', auth: process.env.AUTH === 'auth', @@ -186,7 +188,7 @@ const testConfigBeforeHook = async function () { adl: this.configuration.buildInfo.dataLake ? this.configuration.buildInfo.dataLake.version : false, - kerberos: process.env.KRB5_PRINCIPAL != null, + kerberos: process.env.PRINCIPAL != null, ldap: MONGODB_URI.includes('authMechanism=PLAIN'), socks5: MONGODB_URI.includes('proxyHost='), compressor: process.env.COMPRESSOR, diff --git a/test/tools/utils.ts b/test/tools/utils.ts index 80906d0a343..b0ac3703f1e 100644 --- a/test/tools/utils.ts +++ b/test/tools/utils.ts @@ -15,6 +15,7 @@ import { type Document, type HostAddress, MongoClient, + type MongoClientOptions, now, OP_MSG, Topology, @@ -108,9 +109,7 @@ export class EventCollector { } } -export function getEncryptExtraOptions(): { - cryptSharedLibPath?: string; -} { +export function getEncryptExtraOptions(): MongoClientOptions['autoEncryption']['extraOptions'] { if ( typeof process.env.CRYPT_SHARED_LIB_PATH === 'string' && process.env.CRYPT_SHARED_LIB_PATH.length > 0