From 26b1e8b36062f847d4a1bb4d040ab59f5893baa3 Mon Sep 17 00:00:00 2001 From: Wes Tarle Date: Thu, 30 Jul 2026 13:28:07 -0400 Subject: [PATCH 1/6] ci: resolve ref-version-mismatch in GitHub Actions workflows (#9028) Update pinned action version comments to match exact SemVer tags (e.g., # v6.0.3, # v4.3.1, # v6.4.0) to satisfy online zizmor scanner. --- .github/workflows/codeql-autogenerated.yml | 6 +++--- .github/workflows/codeql-handwritten.yml | 6 +++--- .github/workflows/codeql-repo.yml | 6 +++--- .github/workflows/conformance-test.yaml | 4 ++-- .github/workflows/conformance.yaml | 6 +++--- .github/workflows/generator-tests.yaml | 4 ++-- .github/workflows/issues-no-repro.yaml | 4 ++-- .github/workflows/mandatory-conformance.yaml | 6 +++--- .github/workflows/response.yml | 4 ++-- .github/workflows/update-api-list.yaml | 4 ++-- 10 files changed, 25 insertions(+), 25 deletions(-) diff --git a/.github/workflows/codeql-autogenerated.yml b/.github/workflows/codeql-autogenerated.yml index 262caafadc4a..61e4923f77a8 100644 --- a/.github/workflows/codeql-autogenerated.yml +++ b/.github/workflows/codeql-autogenerated.yml @@ -50,7 +50,7 @@ jobs: # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages steps: - name: Checkout repository - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 with: persist-credentials: false @@ -62,10 +62,10 @@ jobs: # Initializes the CodeQL tools for scanning - autogen flavour. - name: Initialize CodeQL for autogenerated - uses: github/codeql-action/init@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4 + uses: github/codeql-action/init@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2 with: config-file: .github/codeql/codeql-autogenerated.yml languages: ${{ matrix.language }} build-mode: ${{ matrix.build-mode }} - name: Perform CodeQL Analysis for autogenerated - uses: github/codeql-action/analyze@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4 + uses: github/codeql-action/analyze@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2 diff --git a/.github/workflows/codeql-handwritten.yml b/.github/workflows/codeql-handwritten.yml index 26a4ad03ded0..b4ed72279385 100644 --- a/.github/workflows/codeql-handwritten.yml +++ b/.github/workflows/codeql-handwritten.yml @@ -50,7 +50,7 @@ jobs: # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages steps: - name: Checkout repository - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 with: persist-credentials: false @@ -62,10 +62,10 @@ jobs: # Initializes the CodeQL tools for scanning - handwritten flavour. - name: Initialize CodeQL for handwritten - uses: github/codeql-action/init@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4 + uses: github/codeql-action/init@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2 with: config-file: .github/codeql/codeql-handwritten.yml languages: ${{ matrix.language }} build-mode: ${{ matrix.build-mode }} - name: Perform CodeQL Analysis for handwritten - uses: github/codeql-action/analyze@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4 + uses: github/codeql-action/analyze@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2 diff --git a/.github/workflows/codeql-repo.yml b/.github/workflows/codeql-repo.yml index e34a4a511754..9d88b8895ac0 100644 --- a/.github/workflows/codeql-repo.yml +++ b/.github/workflows/codeql-repo.yml @@ -50,7 +50,7 @@ jobs: # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages steps: - name: Checkout repository - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 with: persist-credentials: false @@ -62,11 +62,11 @@ jobs: # Initializes the CodeQL tools for scanning - repo meta flavour. - name: Initialize CodeQL for repo meta - uses: github/codeql-action/init@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4 + uses: github/codeql-action/init@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2 with: config-file: .github/codeql/codeql-repo.yml languages: ${{ matrix.language }} build-mode: ${{ matrix.build-mode }} - name: Perform CodeQL Analysis for repo meta - uses: github/codeql-action/analyze@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4 + uses: github/codeql-action/analyze@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2 diff --git a/.github/workflows/conformance-test.yaml b/.github/workflows/conformance-test.yaml index 13eb09ab8981..a3df27da0c21 100644 --- a/.github/workflows/conformance-test.yaml +++ b/.github/workflows/conformance-test.yaml @@ -15,10 +15,10 @@ jobs: conformance-test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 with: persist-credentials: false - - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 + - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: 14 - run: node --version diff --git a/.github/workflows/conformance.yaml b/.github/workflows/conformance.yaml index c35f95e5afb3..0532ef0a003b 100644 --- a/.github/workflows/conformance.yaml +++ b/.github/workflows/conformance.yaml @@ -36,16 +36,16 @@ jobs: matrix: node: [ 18, 20 ] steps: - - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 with: persist-credentials: false - - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 with: repository: googleapis/cloud-bigtable-clients-test ref: main path: handwritten/bigtable/cloud-bigtable-clients-test persist-credentials: false - - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 + - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: ${{ matrix.node }} - uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5 diff --git a/.github/workflows/generator-tests.yaml b/.github/workflows/generator-tests.yaml index 1702f17e7a8d..a5db86e62eb7 100644 --- a/.github/workflows/generator-tests.yaml +++ b/.github/workflows/generator-tests.yaml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest container: gcr.io/gapic-images/googleapis:20250404 steps: - - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 + - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 with: fetch-depth: 300 persist-credentials: false @@ -37,7 +37,7 @@ jobs: key: ${{ runner.os }}-googleapis-20250422-${{ secrets.CACHE_VERSION }} - name: Setup Node.js - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: 24.x diff --git a/.github/workflows/issues-no-repro.yaml b/.github/workflows/issues-no-repro.yaml index fbeb36478429..f65c54ea1dbd 100644 --- a/.github/workflows/issues-no-repro.yaml +++ b/.github/workflows/issues-no-repro.yaml @@ -13,10 +13,10 @@ jobs: issues: write pull-requests: write steps: - - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: persist-credentials: false - - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 + - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: 18 - run: npm install diff --git a/.github/workflows/mandatory-conformance.yaml b/.github/workflows/mandatory-conformance.yaml index e5ef9372c656..6cd546a7dc72 100644 --- a/.github/workflows/mandatory-conformance.yaml +++ b/.github/workflows/mandatory-conformance.yaml @@ -36,16 +36,16 @@ jobs: matrix: node: [ 18, 20 ] steps: - - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 with: persist-credentials: false - - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 with: repository: googleapis/cloud-bigtable-clients-test ref: v0.0.3 path: handwritten/bigtable/cloud-bigtable-clients-test persist-credentials: false - - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 + - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: ${{ matrix.node }} - uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5 diff --git a/.github/workflows/response.yml b/.github/workflows/response.yml index 0b5d5e8a0313..80298722a6a2 100644 --- a/.github/workflows/response.yml +++ b/.github/workflows/response.yml @@ -16,7 +16,7 @@ jobs: issues: write pull-requests: write steps: - - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: persist-credentials: false - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 @@ -32,7 +32,7 @@ jobs: issues: write pull-requests: write steps: - - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: persist-credentials: false - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 diff --git a/.github/workflows/update-api-list.yaml b/.github/workflows/update-api-list.yaml index d0fe250a386a..52095638468a 100644 --- a/.github/workflows/update-api-list.yaml +++ b/.github/workflows/update-api-list.yaml @@ -10,10 +10,10 @@ jobs: update-api-list: runs-on: ubuntu-latest steps: - - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: persist-credentials: false - - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 + - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: 18 - run: npm install From 98dc35c0c354c9d1120294d0c6476b2def2d5bc3 Mon Sep 17 00:00:00 2001 From: Wes Tarle Date: Thu, 30 Jul 2026 17:08:33 -0400 Subject: [PATCH 2/6] chore(docs): update README template to monorepo (#9020) Should unblock #8132 --- bin/README.mustache | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bin/README.mustache b/bin/README.mustache index e0801f799fa5..3783c55a91af 100644 --- a/bin/README.mustache +++ b/bin/README.mustache @@ -36,7 +36,7 @@ Once downloaded, store the path to this file in the `GOOGLE_APPLICATION_CREDENTI ### Other Authentication Methods -Other authentication methods are outlined in the README for [google-auth-library-nodejs](https://github.com/googleapis/google-auth-library-nodejs), +Other authentication methods are outlined in the README for [google-auth-library-nodejs](https://github.com/googleapis/google-cloud-node/tree/main/core/packages/google-auth-library-nodejs), which is the authentication library used by all Google Cloud Node.js clients. ## Example Applications @@ -105,8 +105,8 @@ Apache 2.0 - See [LICENSE][license] for more information. [hya-io]: https://hya.io [gstore-node]: https://github.com/sebelga/gstore-node [gstore-api]: https://github.com/sebelga/gstore-api -[devconsole]: https://console.developer.google.com -[googleapis]: https://github.com/google/google-api-nodejs-client +[devconsole]: https://console.cloud.google.com +[googleapis]: https://github.com/googleapis/google-api-nodejs-client [semver]: http://semver.org [contributing]: CONTRIBUTING.md [license]: LICENSE From 863c3cc4b1c2e1d58f57bbaee1ade8fe96c19bc0 Mon Sep 17 00:00:00 2001 From: danieljbruce Date: Thu, 30 Jul 2026 21:23:51 +0000 Subject: [PATCH 3/6] feat!: upgrade minimum Node.js version to 22 for the gapic-generator-typescript (#9029) ## Description Upgrade the gapic-generator-typescript to node version 22. ## Impact Ensures users upgrade their runtime to Node 22 and don't encounter problems due to legacy Node 18 issues. ## Changes Node was upgraded to version 22 in two package.json files and then `npm run baseline` was run. Just the following files were updated: core/generator/gapic-generator-typescript/templates/cjs/typescript_gapic/package.json core/generator/gapic-generator-typescript/templates/esm/typescript_gapic/package.json Then in core/generator/gapic-generator-typescript we ran the following command: `npm run baseline` ## Next steps Next we are going to upgrade all the packages in the root `packages` directory to separate concerns about the packages and the gapic-typescript-generator. --- .../baselines/asset-esm/package.json | 4 ++-- .../gapic-generator-typescript/baselines/asset/package.json | 4 ++-- .../baselines/bigquery-storage-esm/package.json | 4 ++-- .../baselines/bigquery-storage/package.json | 4 ++-- .../baselines/bigquery-v2-esm/package.json | 4 ++-- .../baselines/bigquery-v2/package.json | 4 ++-- .../baselines/compute-esm/package.json | 4 ++-- .../gapic-generator-typescript/baselines/compute/package.json | 4 ++-- .../baselines/deprecatedtest-esm/package.json | 4 ++-- .../baselines/deprecatedtest/package.json | 4 ++-- .../baselines/disable-packing-test-esm/package.json | 4 ++-- .../baselines/disable-packing-test/package.json | 4 ++-- .../gapic-generator-typescript/baselines/dlp-esm/package.json | 4 ++-- .../gapic-generator-typescript/baselines/dlp/package.json | 4 ++-- .../baselines/duplicate_methods_test-esm/package.json | 4 ++-- .../baselines/duplicate_methods_test/package.json | 4 ++-- .../gapic-generator-typescript/baselines/kms-esm/package.json | 4 ++-- .../gapic-generator-typescript/baselines/kms/package.json | 4 ++-- .../baselines/logging-esm/package.json | 4 ++-- .../gapic-generator-typescript/baselines/logging/package.json | 4 ++-- .../baselines/monitoring-esm/package.json | 4 ++-- .../baselines/monitoring/package.json | 4 ++-- .../baselines/naming-esm/package.json | 4 ++-- .../gapic-generator-typescript/baselines/naming/package.json | 4 ++-- .../baselines/redis-esm/package.json | 4 ++-- .../gapic-generator-typescript/baselines/redis/package.json | 4 ++-- .../baselines/retail-esm/package.json | 4 ++-- .../gapic-generator-typescript/baselines/retail/package.json | 4 ++-- .../baselines/routingtest-esm/package.json | 4 ++-- .../baselines/routingtest/package.json | 4 ++-- .../baselines/showcase-esm/package.json | 4 ++-- .../baselines/showcase-legacy-esm/package.json | 4 ++-- .../baselines/showcase-legacy/package.json | 4 ++-- .../baselines/showcase/package.json | 4 ++-- .../baselines/tasks-esm/package.json | 4 ++-- .../gapic-generator-typescript/baselines/tasks/package.json | 4 ++-- .../baselines/texttospeech-esm/package.json | 4 ++-- .../baselines/texttospeech/package.json | 4 ++-- .../baselines/translate-esm/package.json | 4 ++-- .../baselines/translate/package.json | 4 ++-- .../baselines/videointelligence-esm/package.json | 4 ++-- .../baselines/videointelligence/package.json | 4 ++-- .../templates/cjs/typescript_gapic/package.json | 4 ++-- .../templates/esm/typescript_gapic/package.json | 4 ++-- 44 files changed, 88 insertions(+), 88 deletions(-) diff --git a/core/generator/gapic-generator-typescript/baselines/asset-esm/package.json b/core/generator/gapic-generator-typescript/baselines/asset-esm/package.json index b4eb0cc8dbc8..5669279010ac 100644 --- a/core/generator/gapic-generator-typescript/baselines/asset-esm/package.json +++ b/core/generator/gapic-generator-typescript/baselines/asset-esm/package.json @@ -76,7 +76,7 @@ "samples-test": "cd samples/ && npm link ../ && npm i && npm test" }, "dependencies": { - "google-gax": "^5.1.1-rc.1" + "google-gax": "^6.0.0" }, "devDependencies": { "@babel/cli": "^7.28.3", @@ -103,6 +103,6 @@ "webpack-cli": "^6.0.1" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/asset/package.json b/core/generator/gapic-generator-typescript/baselines/asset/package.json index feb440dafb54..7dc072b016da 100644 --- a/core/generator/gapic-generator-typescript/baselines/asset/package.json +++ b/core/generator/gapic-generator-typescript/baselines/asset/package.json @@ -40,7 +40,7 @@ "test": "c8 mocha --config ../../.mocharc.cjs build/test" }, "dependencies": { - "google-gax": "^5.0.0" + "google-gax": "^6.0.0" }, "devDependencies": { "@types/mocha": "^10.0.10", @@ -59,6 +59,6 @@ "sinon": "^20.0.0" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/bigquery-storage-esm/package.json b/core/generator/gapic-generator-typescript/baselines/bigquery-storage-esm/package.json index 8d83aa05c81b..ee71da7d47c4 100644 --- a/core/generator/gapic-generator-typescript/baselines/bigquery-storage-esm/package.json +++ b/core/generator/gapic-generator-typescript/baselines/bigquery-storage-esm/package.json @@ -76,7 +76,7 @@ "samples-test": "cd samples/ && npm link ../ && npm i && npm test" }, "dependencies": { - "google-gax": "^5.1.1-rc.1" + "google-gax": "^6.0.0" }, "devDependencies": { "@babel/cli": "^7.28.3", @@ -103,6 +103,6 @@ "webpack-cli": "^6.0.1" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/bigquery-storage/package.json b/core/generator/gapic-generator-typescript/baselines/bigquery-storage/package.json index fcf48309f706..c0aadcf212bb 100644 --- a/core/generator/gapic-generator-typescript/baselines/bigquery-storage/package.json +++ b/core/generator/gapic-generator-typescript/baselines/bigquery-storage/package.json @@ -40,7 +40,7 @@ "test": "c8 mocha --config ../../.mocharc.cjs build/test" }, "dependencies": { - "google-gax": "^5.0.0" + "google-gax": "^6.0.0" }, "devDependencies": { "@types/mocha": "^10.0.10", @@ -59,6 +59,6 @@ "sinon": "^20.0.0" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/bigquery-v2-esm/package.json b/core/generator/gapic-generator-typescript/baselines/bigquery-v2-esm/package.json index 39b2b1858e14..704030dc9897 100644 --- a/core/generator/gapic-generator-typescript/baselines/bigquery-v2-esm/package.json +++ b/core/generator/gapic-generator-typescript/baselines/bigquery-v2-esm/package.json @@ -82,7 +82,7 @@ "samples-test": "cd samples/ && npm link ../ && npm i && npm test" }, "dependencies": { - "google-gax": "^5.1.1-rc.1" + "google-gax": "^6.0.0" }, "devDependencies": { "@babel/cli": "^7.28.3", @@ -109,6 +109,6 @@ "webpack-cli": "^6.0.1" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/bigquery-v2/package.json b/core/generator/gapic-generator-typescript/baselines/bigquery-v2/package.json index a0e872d0faa5..6c8f6681d16e 100644 --- a/core/generator/gapic-generator-typescript/baselines/bigquery-v2/package.json +++ b/core/generator/gapic-generator-typescript/baselines/bigquery-v2/package.json @@ -46,7 +46,7 @@ "test": "c8 mocha --config ../../.mocharc.cjs build/test" }, "dependencies": { - "google-gax": "^5.0.0" + "google-gax": "^6.0.0" }, "devDependencies": { "@types/mocha": "^10.0.10", @@ -65,6 +65,6 @@ "sinon": "^20.0.0" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/compute-esm/package.json b/core/generator/gapic-generator-typescript/baselines/compute-esm/package.json index e5b9dd72e5cf..b7b5282c29eb 100644 --- a/core/generator/gapic-generator-typescript/baselines/compute-esm/package.json +++ b/core/generator/gapic-generator-typescript/baselines/compute-esm/package.json @@ -77,7 +77,7 @@ "samples-test": "cd samples/ && npm link ../ && npm i && npm test" }, "dependencies": { - "google-gax": "^5.1.1-rc.1" + "google-gax": "^6.0.0" }, "devDependencies": { "@babel/cli": "^7.28.3", @@ -104,6 +104,6 @@ "webpack-cli": "^6.0.1" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/compute/package.json b/core/generator/gapic-generator-typescript/baselines/compute/package.json index d0c84944967b..ecf205488d7d 100644 --- a/core/generator/gapic-generator-typescript/baselines/compute/package.json +++ b/core/generator/gapic-generator-typescript/baselines/compute/package.json @@ -41,7 +41,7 @@ "test": "c8 mocha --config ../../.mocharc.cjs build/test" }, "dependencies": { - "google-gax": "^5.0.0" + "google-gax": "^6.0.0" }, "devDependencies": { "@types/mocha": "^10.0.10", @@ -60,6 +60,6 @@ "sinon": "^20.0.0" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/deprecatedtest-esm/package.json b/core/generator/gapic-generator-typescript/baselines/deprecatedtest-esm/package.json index 59afe5b28ee9..f0fb39678a52 100644 --- a/core/generator/gapic-generator-typescript/baselines/deprecatedtest-esm/package.json +++ b/core/generator/gapic-generator-typescript/baselines/deprecatedtest-esm/package.json @@ -76,7 +76,7 @@ "samples-test": "cd samples/ && npm link ../ && npm i && npm test" }, "dependencies": { - "google-gax": "^5.1.1-rc.1" + "google-gax": "^6.0.0" }, "devDependencies": { "@babel/cli": "^7.28.3", @@ -103,6 +103,6 @@ "webpack-cli": "^6.0.1" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/deprecatedtest/package.json b/core/generator/gapic-generator-typescript/baselines/deprecatedtest/package.json index 93773c221118..e364384d1216 100644 --- a/core/generator/gapic-generator-typescript/baselines/deprecatedtest/package.json +++ b/core/generator/gapic-generator-typescript/baselines/deprecatedtest/package.json @@ -40,7 +40,7 @@ "test": "c8 mocha --config ../../.mocharc.cjs build/test" }, "dependencies": { - "google-gax": "^5.0.0" + "google-gax": "^6.0.0" }, "devDependencies": { "@types/mocha": "^10.0.10", @@ -59,6 +59,6 @@ "sinon": "^20.0.0" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/disable-packing-test-esm/package.json b/core/generator/gapic-generator-typescript/baselines/disable-packing-test-esm/package.json index e0bbef8d7f49..5c8df55a0dfe 100644 --- a/core/generator/gapic-generator-typescript/baselines/disable-packing-test-esm/package.json +++ b/core/generator/gapic-generator-typescript/baselines/disable-packing-test-esm/package.json @@ -81,7 +81,7 @@ "samples-test": "cd samples/ && npm link ../ && npm i && npm test" }, "dependencies": { - "google-gax": "^5.1.1-rc.1" + "google-gax": "^6.0.0" }, "devDependencies": { "@babel/cli": "^7.28.3", @@ -108,6 +108,6 @@ "webpack-cli": "^6.0.1" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/disable-packing-test/package.json b/core/generator/gapic-generator-typescript/baselines/disable-packing-test/package.json index d9a7ae29c535..d5778de022d3 100644 --- a/core/generator/gapic-generator-typescript/baselines/disable-packing-test/package.json +++ b/core/generator/gapic-generator-typescript/baselines/disable-packing-test/package.json @@ -45,7 +45,7 @@ "test": "c8 mocha --config ../../.mocharc.cjs build/test" }, "dependencies": { - "google-gax": "^5.0.0" + "google-gax": "^6.0.0" }, "devDependencies": { "@types/mocha": "^10.0.10", @@ -64,6 +64,6 @@ "sinon": "^20.0.0" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/dlp-esm/package.json b/core/generator/gapic-generator-typescript/baselines/dlp-esm/package.json index 5e4cf08d5e28..4298c97acc83 100644 --- a/core/generator/gapic-generator-typescript/baselines/dlp-esm/package.json +++ b/core/generator/gapic-generator-typescript/baselines/dlp-esm/package.json @@ -76,7 +76,7 @@ "samples-test": "cd samples/ && npm link ../ && npm i && npm test" }, "dependencies": { - "google-gax": "^5.1.1-rc.1" + "google-gax": "^6.0.0" }, "devDependencies": { "@babel/cli": "^7.28.3", @@ -103,6 +103,6 @@ "webpack-cli": "^6.0.1" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/dlp/package.json b/core/generator/gapic-generator-typescript/baselines/dlp/package.json index 304994f0536e..ff1fba46790e 100644 --- a/core/generator/gapic-generator-typescript/baselines/dlp/package.json +++ b/core/generator/gapic-generator-typescript/baselines/dlp/package.json @@ -40,7 +40,7 @@ "test": "c8 mocha --config ../../.mocharc.cjs build/test" }, "dependencies": { - "google-gax": "^5.0.0" + "google-gax": "^6.0.0" }, "devDependencies": { "@types/mocha": "^10.0.10", @@ -59,6 +59,6 @@ "sinon": "^20.0.0" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/duplicate_methods_test-esm/package.json b/core/generator/gapic-generator-typescript/baselines/duplicate_methods_test-esm/package.json index bdeff217fe91..efbf020286bc 100644 --- a/core/generator/gapic-generator-typescript/baselines/duplicate_methods_test-esm/package.json +++ b/core/generator/gapic-generator-typescript/baselines/duplicate_methods_test-esm/package.json @@ -76,7 +76,7 @@ "samples-test": "cd samples/ && npm link ../ && npm i && npm test" }, "dependencies": { - "google-gax": "^5.1.1-rc.1" + "google-gax": "^6.0.0" }, "devDependencies": { "@babel/cli": "^7.28.3", @@ -103,6 +103,6 @@ "webpack-cli": "^6.0.1" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/duplicate_methods_test/package.json b/core/generator/gapic-generator-typescript/baselines/duplicate_methods_test/package.json index 2b4ecaccfc55..198f1f5ba144 100644 --- a/core/generator/gapic-generator-typescript/baselines/duplicate_methods_test/package.json +++ b/core/generator/gapic-generator-typescript/baselines/duplicate_methods_test/package.json @@ -40,7 +40,7 @@ "test": "c8 mocha --config ../../.mocharc.cjs build/test" }, "dependencies": { - "google-gax": "^5.0.0" + "google-gax": "^6.0.0" }, "devDependencies": { "@types/mocha": "^10.0.10", @@ -59,6 +59,6 @@ "sinon": "^20.0.0" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/kms-esm/package.json b/core/generator/gapic-generator-typescript/baselines/kms-esm/package.json index 294d2bfecad0..b629f34c5a4b 100644 --- a/core/generator/gapic-generator-typescript/baselines/kms-esm/package.json +++ b/core/generator/gapic-generator-typescript/baselines/kms-esm/package.json @@ -76,7 +76,7 @@ "samples-test": "cd samples/ && npm link ../ && npm i && npm test" }, "dependencies": { - "google-gax": "^5.1.1-rc.1" + "google-gax": "^6.0.0" }, "devDependencies": { "@babel/cli": "^7.28.3", @@ -103,6 +103,6 @@ "webpack-cli": "^6.0.1" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/kms/package.json b/core/generator/gapic-generator-typescript/baselines/kms/package.json index 13e9f7076f03..c65669debe94 100644 --- a/core/generator/gapic-generator-typescript/baselines/kms/package.json +++ b/core/generator/gapic-generator-typescript/baselines/kms/package.json @@ -40,7 +40,7 @@ "test": "c8 mocha --config ../../.mocharc.cjs build/test" }, "dependencies": { - "google-gax": "^5.0.0" + "google-gax": "^6.0.0" }, "devDependencies": { "@types/mocha": "^10.0.10", @@ -59,6 +59,6 @@ "sinon": "^20.0.0" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/logging-esm/package.json b/core/generator/gapic-generator-typescript/baselines/logging-esm/package.json index bbb1ceb93e9c..fbc8aa3486f1 100644 --- a/core/generator/gapic-generator-typescript/baselines/logging-esm/package.json +++ b/core/generator/gapic-generator-typescript/baselines/logging-esm/package.json @@ -78,7 +78,7 @@ "samples-test": "cd samples/ && npm link ../ && npm i && npm test" }, "dependencies": { - "google-gax": "^5.1.1-rc.1" + "google-gax": "^6.0.0" }, "devDependencies": { "@babel/cli": "^7.28.3", @@ -105,6 +105,6 @@ "webpack-cli": "^6.0.1" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/logging/package.json b/core/generator/gapic-generator-typescript/baselines/logging/package.json index 1d9635f1ddc5..827fab5b9b99 100644 --- a/core/generator/gapic-generator-typescript/baselines/logging/package.json +++ b/core/generator/gapic-generator-typescript/baselines/logging/package.json @@ -42,7 +42,7 @@ "test": "c8 mocha --config ../../.mocharc.cjs build/test" }, "dependencies": { - "google-gax": "^5.0.0" + "google-gax": "^6.0.0" }, "devDependencies": { "@types/mocha": "^10.0.10", @@ -61,6 +61,6 @@ "sinon": "^20.0.0" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/monitoring-esm/package.json b/core/generator/gapic-generator-typescript/baselines/monitoring-esm/package.json index 6a3bad81b652..e877a7238f4e 100644 --- a/core/generator/gapic-generator-typescript/baselines/monitoring-esm/package.json +++ b/core/generator/gapic-generator-typescript/baselines/monitoring-esm/package.json @@ -81,7 +81,7 @@ "samples-test": "cd samples/ && npm link ../ && npm i && npm test" }, "dependencies": { - "google-gax": "^5.1.1-rc.1" + "google-gax": "^6.0.0" }, "devDependencies": { "@babel/cli": "^7.28.3", @@ -108,6 +108,6 @@ "webpack-cli": "^6.0.1" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/monitoring/package.json b/core/generator/gapic-generator-typescript/baselines/monitoring/package.json index cf1afe729d13..efd92a44f6b1 100644 --- a/core/generator/gapic-generator-typescript/baselines/monitoring/package.json +++ b/core/generator/gapic-generator-typescript/baselines/monitoring/package.json @@ -45,7 +45,7 @@ "test": "c8 mocha --config ../../.mocharc.cjs build/test" }, "dependencies": { - "google-gax": "^5.0.0" + "google-gax": "^6.0.0" }, "devDependencies": { "@types/mocha": "^10.0.10", @@ -64,6 +64,6 @@ "sinon": "^20.0.0" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/naming-esm/package.json b/core/generator/gapic-generator-typescript/baselines/naming-esm/package.json index 99f39607b380..e203e8c23975 100644 --- a/core/generator/gapic-generator-typescript/baselines/naming-esm/package.json +++ b/core/generator/gapic-generator-typescript/baselines/naming-esm/package.json @@ -76,7 +76,7 @@ "samples-test": "cd samples/ && npm link ../ && npm i && npm test" }, "dependencies": { - "google-gax": "^5.1.1-rc.1" + "google-gax": "^6.0.0" }, "devDependencies": { "@babel/cli": "^7.28.3", @@ -103,6 +103,6 @@ "webpack-cli": "^6.0.1" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/naming/package.json b/core/generator/gapic-generator-typescript/baselines/naming/package.json index fe587d5c6c6a..3fed8a3432cd 100644 --- a/core/generator/gapic-generator-typescript/baselines/naming/package.json +++ b/core/generator/gapic-generator-typescript/baselines/naming/package.json @@ -40,7 +40,7 @@ "test": "c8 mocha --config ../../.mocharc.cjs build/test" }, "dependencies": { - "google-gax": "^5.0.0" + "google-gax": "^6.0.0" }, "devDependencies": { "@types/mocha": "^10.0.10", @@ -59,6 +59,6 @@ "sinon": "^20.0.0" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/redis-esm/package.json b/core/generator/gapic-generator-typescript/baselines/redis-esm/package.json index d36129bb4ae1..2487ec241d76 100644 --- a/core/generator/gapic-generator-typescript/baselines/redis-esm/package.json +++ b/core/generator/gapic-generator-typescript/baselines/redis-esm/package.json @@ -76,7 +76,7 @@ "samples-test": "cd samples/ && npm link ../ && npm i && npm test" }, "dependencies": { - "google-gax": "^5.1.1-rc.1" + "google-gax": "^6.0.0" }, "devDependencies": { "@babel/cli": "^7.28.3", @@ -103,6 +103,6 @@ "webpack-cli": "^6.0.1" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/redis/package.json b/core/generator/gapic-generator-typescript/baselines/redis/package.json index 2330dce829a1..c25b7420ef1c 100644 --- a/core/generator/gapic-generator-typescript/baselines/redis/package.json +++ b/core/generator/gapic-generator-typescript/baselines/redis/package.json @@ -40,7 +40,7 @@ "test": "c8 mocha --config ../../.mocharc.cjs build/test" }, "dependencies": { - "google-gax": "^5.0.0" + "google-gax": "^6.0.0" }, "devDependencies": { "@types/mocha": "^10.0.10", @@ -59,6 +59,6 @@ "sinon": "^20.0.0" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/retail-esm/package.json b/core/generator/gapic-generator-typescript/baselines/retail-esm/package.json index c4d11e2b3c30..21f15521fa73 100644 --- a/core/generator/gapic-generator-typescript/baselines/retail-esm/package.json +++ b/core/generator/gapic-generator-typescript/baselines/retail-esm/package.json @@ -90,7 +90,7 @@ "samples-test": "cd samples/ && npm link ../ && npm i && npm test" }, "dependencies": { - "google-gax": "^5.1.1-rc.1" + "google-gax": "^6.0.0" }, "devDependencies": { "@babel/cli": "^7.28.3", @@ -117,6 +117,6 @@ "webpack-cli": "^6.0.1" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/retail/package.json b/core/generator/gapic-generator-typescript/baselines/retail/package.json index 7977318557e9..4a20415e6005 100644 --- a/core/generator/gapic-generator-typescript/baselines/retail/package.json +++ b/core/generator/gapic-generator-typescript/baselines/retail/package.json @@ -54,7 +54,7 @@ "test": "c8 mocha --config ../../.mocharc.cjs build/test" }, "dependencies": { - "google-gax": "^5.0.0" + "google-gax": "^6.0.0" }, "devDependencies": { "@types/mocha": "^10.0.10", @@ -73,6 +73,6 @@ "sinon": "^20.0.0" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/routingtest-esm/package.json b/core/generator/gapic-generator-typescript/baselines/routingtest-esm/package.json index 8de557f053bc..e9a119016a05 100644 --- a/core/generator/gapic-generator-typescript/baselines/routingtest-esm/package.json +++ b/core/generator/gapic-generator-typescript/baselines/routingtest-esm/package.json @@ -76,7 +76,7 @@ "samples-test": "cd samples/ && npm link ../ && npm i && npm test" }, "dependencies": { - "google-gax": "^5.1.1-rc.1" + "google-gax": "^6.0.0" }, "devDependencies": { "@babel/cli": "^7.28.3", @@ -103,6 +103,6 @@ "webpack-cli": "^6.0.1" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/routingtest/package.json b/core/generator/gapic-generator-typescript/baselines/routingtest/package.json index 67bf441a1a6f..a20943f00b16 100644 --- a/core/generator/gapic-generator-typescript/baselines/routingtest/package.json +++ b/core/generator/gapic-generator-typescript/baselines/routingtest/package.json @@ -40,7 +40,7 @@ "test": "c8 mocha --config ../../.mocharc.cjs build/test" }, "dependencies": { - "google-gax": "^5.0.0" + "google-gax": "^6.0.0" }, "devDependencies": { "@types/mocha": "^10.0.10", @@ -59,6 +59,6 @@ "sinon": "^20.0.0" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/showcase-esm/package.json b/core/generator/gapic-generator-typescript/baselines/showcase-esm/package.json index e0bbef8d7f49..5c8df55a0dfe 100644 --- a/core/generator/gapic-generator-typescript/baselines/showcase-esm/package.json +++ b/core/generator/gapic-generator-typescript/baselines/showcase-esm/package.json @@ -81,7 +81,7 @@ "samples-test": "cd samples/ && npm link ../ && npm i && npm test" }, "dependencies": { - "google-gax": "^5.1.1-rc.1" + "google-gax": "^6.0.0" }, "devDependencies": { "@babel/cli": "^7.28.3", @@ -108,6 +108,6 @@ "webpack-cli": "^6.0.1" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/showcase-legacy-esm/package.json b/core/generator/gapic-generator-typescript/baselines/showcase-legacy-esm/package.json index 9781cdbd50b6..3cb6b601a981 100644 --- a/core/generator/gapic-generator-typescript/baselines/showcase-legacy-esm/package.json +++ b/core/generator/gapic-generator-typescript/baselines/showcase-legacy-esm/package.json @@ -76,7 +76,7 @@ "samples-test": "cd samples/ && npm link ../ && npm i && npm test" }, "dependencies": { - "google-gax": "^5.1.1-rc.1" + "google-gax": "^6.0.0" }, "devDependencies": { "@babel/cli": "^7.28.3", @@ -103,6 +103,6 @@ "webpack-cli": "^6.0.1" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/showcase-legacy/package.json b/core/generator/gapic-generator-typescript/baselines/showcase-legacy/package.json index 3308e992d0e1..86a5c9c00ad6 100644 --- a/core/generator/gapic-generator-typescript/baselines/showcase-legacy/package.json +++ b/core/generator/gapic-generator-typescript/baselines/showcase-legacy/package.json @@ -40,7 +40,7 @@ "test": "c8 mocha --config ../../.mocharc.cjs build/test" }, "dependencies": { - "google-gax": "^5.0.0" + "google-gax": "^6.0.0" }, "devDependencies": { "@types/mocha": "^10.0.10", @@ -59,6 +59,6 @@ "sinon": "^20.0.0" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/showcase/package.json b/core/generator/gapic-generator-typescript/baselines/showcase/package.json index d9a7ae29c535..d5778de022d3 100644 --- a/core/generator/gapic-generator-typescript/baselines/showcase/package.json +++ b/core/generator/gapic-generator-typescript/baselines/showcase/package.json @@ -45,7 +45,7 @@ "test": "c8 mocha --config ../../.mocharc.cjs build/test" }, "dependencies": { - "google-gax": "^5.0.0" + "google-gax": "^6.0.0" }, "devDependencies": { "@types/mocha": "^10.0.10", @@ -64,6 +64,6 @@ "sinon": "^20.0.0" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/tasks-esm/package.json b/core/generator/gapic-generator-typescript/baselines/tasks-esm/package.json index fc9c600747f4..fc1c27f40aed 100644 --- a/core/generator/gapic-generator-typescript/baselines/tasks-esm/package.json +++ b/core/generator/gapic-generator-typescript/baselines/tasks-esm/package.json @@ -76,7 +76,7 @@ "samples-test": "cd samples/ && npm link ../ && npm i && npm test" }, "dependencies": { - "google-gax": "^5.1.1-rc.1" + "google-gax": "^6.0.0" }, "devDependencies": { "@babel/cli": "^7.28.3", @@ -103,6 +103,6 @@ "webpack-cli": "^6.0.1" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/tasks/package.json b/core/generator/gapic-generator-typescript/baselines/tasks/package.json index 076b48a84820..ff07d294a9aa 100644 --- a/core/generator/gapic-generator-typescript/baselines/tasks/package.json +++ b/core/generator/gapic-generator-typescript/baselines/tasks/package.json @@ -40,7 +40,7 @@ "test": "c8 mocha --config ../../.mocharc.cjs build/test" }, "dependencies": { - "google-gax": "^5.0.0" + "google-gax": "^6.0.0" }, "devDependencies": { "@types/mocha": "^10.0.10", @@ -59,6 +59,6 @@ "sinon": "^20.0.0" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/texttospeech-esm/package.json b/core/generator/gapic-generator-typescript/baselines/texttospeech-esm/package.json index 5847e398aa75..18f67f905059 100644 --- a/core/generator/gapic-generator-typescript/baselines/texttospeech-esm/package.json +++ b/core/generator/gapic-generator-typescript/baselines/texttospeech-esm/package.json @@ -76,7 +76,7 @@ "samples-test": "cd samples/ && npm link ../ && npm i && npm test" }, "dependencies": { - "google-gax": "^5.1.1-rc.1" + "google-gax": "^6.0.0" }, "devDependencies": { "@babel/cli": "^7.28.3", @@ -103,6 +103,6 @@ "webpack-cli": "^6.0.1" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/texttospeech/package.json b/core/generator/gapic-generator-typescript/baselines/texttospeech/package.json index 03ebbfad8e96..0f8a0f9b43bd 100644 --- a/core/generator/gapic-generator-typescript/baselines/texttospeech/package.json +++ b/core/generator/gapic-generator-typescript/baselines/texttospeech/package.json @@ -40,7 +40,7 @@ "test": "c8 mocha --config ../../.mocharc.cjs build/test" }, "dependencies": { - "google-gax": "^5.0.0" + "google-gax": "^6.0.0" }, "devDependencies": { "@types/mocha": "^10.0.10", @@ -59,6 +59,6 @@ "sinon": "^20.0.0" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/translate-esm/package.json b/core/generator/gapic-generator-typescript/baselines/translate-esm/package.json index 0b7c8b010215..b708ba7a2026 100644 --- a/core/generator/gapic-generator-typescript/baselines/translate-esm/package.json +++ b/core/generator/gapic-generator-typescript/baselines/translate-esm/package.json @@ -76,7 +76,7 @@ "samples-test": "cd samples/ && npm link ../ && npm i && npm test" }, "dependencies": { - "google-gax": "^5.1.1-rc.1" + "google-gax": "^6.0.0" }, "devDependencies": { "@babel/cli": "^7.28.3", @@ -103,6 +103,6 @@ "webpack-cli": "^6.0.1" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/translate/package.json b/core/generator/gapic-generator-typescript/baselines/translate/package.json index 79779a03485b..011267c082ca 100644 --- a/core/generator/gapic-generator-typescript/baselines/translate/package.json +++ b/core/generator/gapic-generator-typescript/baselines/translate/package.json @@ -40,7 +40,7 @@ "test": "c8 mocha --config ../../.mocharc.cjs build/test" }, "dependencies": { - "google-gax": "^5.0.0" + "google-gax": "^6.0.0" }, "devDependencies": { "@types/mocha": "^10.0.10", @@ -59,6 +59,6 @@ "sinon": "^20.0.0" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/videointelligence-esm/package.json b/core/generator/gapic-generator-typescript/baselines/videointelligence-esm/package.json index 33daf2666052..9ed652f28d36 100644 --- a/core/generator/gapic-generator-typescript/baselines/videointelligence-esm/package.json +++ b/core/generator/gapic-generator-typescript/baselines/videointelligence-esm/package.json @@ -76,7 +76,7 @@ "samples-test": "cd samples/ && npm link ../ && npm i && npm test" }, "dependencies": { - "google-gax": "^5.1.1-rc.1" + "google-gax": "^6.0.0" }, "devDependencies": { "@babel/cli": "^7.28.3", @@ -103,6 +103,6 @@ "webpack-cli": "^6.0.1" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/baselines/videointelligence/package.json b/core/generator/gapic-generator-typescript/baselines/videointelligence/package.json index 1468ba27fd6c..aa73615026f3 100644 --- a/core/generator/gapic-generator-typescript/baselines/videointelligence/package.json +++ b/core/generator/gapic-generator-typescript/baselines/videointelligence/package.json @@ -40,7 +40,7 @@ "test": "c8 mocha --config ../../.mocharc.cjs build/test" }, "dependencies": { - "google-gax": "^5.0.0" + "google-gax": "^6.0.0" }, "devDependencies": { "@types/mocha": "^10.0.10", @@ -59,6 +59,6 @@ "sinon": "^20.0.0" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/templates/cjs/typescript_gapic/package.json b/core/generator/gapic-generator-typescript/templates/cjs/typescript_gapic/package.json index bc786ce6f907..eda880fb50cc 100644 --- a/core/generator/gapic-generator-typescript/templates/cjs/typescript_gapic/package.json +++ b/core/generator/gapic-generator-typescript/templates/cjs/typescript_gapic/package.json @@ -40,7 +40,7 @@ "test": "c8 mocha --config ../../.mocharc.cjs build/test" }, "dependencies": { - "google-gax": "^5.0.0" + "google-gax": "^6.0.0" }, "devDependencies": { "@types/mocha": "^10.0.10", @@ -59,6 +59,6 @@ "sinon": "^20.0.0" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/generator/gapic-generator-typescript/templates/esm/typescript_gapic/package.json b/core/generator/gapic-generator-typescript/templates/esm/typescript_gapic/package.json index 4be057fd0956..a70c1c6c122c 100644 --- a/core/generator/gapic-generator-typescript/templates/esm/typescript_gapic/package.json +++ b/core/generator/gapic-generator-typescript/templates/esm/typescript_gapic/package.json @@ -76,7 +76,7 @@ "samples-test": "cd samples/ && npm link ../ && npm i && npm test" }, "dependencies": { - "google-gax": "^5.1.1-rc.1" + "google-gax": "^6.0.0" }, "devDependencies": { "@babel/cli": "^7.28.3", @@ -103,6 +103,6 @@ "webpack-cli": "^6.0.1" }, "engines": { - "node": ">=18" + "node": ">=22" } } From 33fccc2ad2e9634b6c456296e3156b147bf08317 Mon Sep 17 00:00:00 2001 From: Thiyagu K Date: Mon, 29 Jun 2026 11:20:26 +0000 Subject: [PATCH 4/6] feat(storage): allow setting file encryption key to null to disable CSEK and fix copy behavior for non-encrypted destinations --- handwritten/storage/src/file.ts | 51 +++++++++--- handwritten/storage/system-test/storage.ts | 18 +++++ handwritten/storage/test/file.ts | 93 ++++++++++++++++++++++ 3 files changed, 150 insertions(+), 12 deletions(-) diff --git a/handwritten/storage/src/file.ts b/handwritten/storage/src/file.ts index 27765d935a99..6a9416dd6f00 100644 --- a/handwritten/storage/src/file.ts +++ b/handwritten/storage/src/file.ts @@ -317,7 +317,7 @@ export type RenameCallback = MoveCallback; export type RotateEncryptionKeyOptions = string | Buffer | EncryptionKeyOptions; export interface EncryptionKeyOptions { - encryptionKey?: string | Buffer; + encryptionKey?: string | Buffer | null; kmsKeyName?: string; preconditionOpts?: PreconditionOptions; } @@ -366,7 +366,7 @@ const COMPRESSIBLE_MIME_REGEX = new RegExp( export interface FileOptions { crc32cGenerator?: CRC32CValidatorGenerator; - encryptionKey?: string | Buffer; + encryptionKey?: string | Buffer | null; generation?: number | string; restoreToken?: string; kmsKeyName?: string; @@ -425,7 +425,7 @@ export type DownloadCallback = ( export interface DownloadOptions extends CreateReadStreamOptions { destination?: string; - encryptionKey?: string | Buffer; + encryptionKey?: string | Buffer | null; } interface CopyQuery { @@ -600,7 +600,7 @@ class File extends ServiceObject { restoreToken?: string; parent!: Bucket; - private encryptionKey?: string | Buffer; + private encryptionKey?: string | Buffer | null; private encryptionKeyBase64?: string; private encryptionKeyHash?: string; private encryptionKeyInterceptor?: Interceptor; @@ -1102,7 +1102,7 @@ class File extends ServiceObject { this.name = name; - if (options.encryptionKey) { + if (options.encryptionKey !== undefined) { this.setEncryptionKey(options.encryptionKey); } @@ -1379,14 +1379,26 @@ class File extends ServiceObject { const headers: {[index: string]: string | undefined} = {}; - if (this.encryptionKey !== undefined) { + if (this.encryptionKey !== undefined && this.encryptionKey !== null) { headers['x-goog-copy-source-encryption-algorithm'] = 'AES256'; headers['x-goog-copy-source-encryption-key'] = this.encryptionKeyBase64; headers['x-goog-copy-source-encryption-key-sha256'] = this.encryptionKeyHash; } - if (newFile.encryptionKey !== undefined) { + let copiedKey = false; + if ( + this.encryptionKey !== undefined && + this.encryptionKey !== null && + newFile.encryptionKey === undefined + ) { + newFile.encryptionKey = this.encryptionKey; + newFile.encryptionKeyBase64 = this.encryptionKeyBase64; + newFile.encryptionKeyHash = this.encryptionKeyHash; + copiedKey = true; + } + + if (newFile.encryptionKey !== undefined && !copiedKey) { this.setEncryptionKey(newFile.encryptionKey!); } else if (options.destinationKmsKeyName !== undefined) { query.destinationKmsKeyName = options.destinationKmsKeyName; @@ -1864,7 +1876,7 @@ class File extends ServiceObject { ), file: this.name, generation: this.generation, - key: this.encryptionKey, + key: this.encryptionKey === null ? undefined : this.encryptionKey, kmsKeyName: this.kmsKeyName, metadata: options.metadata, offset: options.offset, @@ -2392,7 +2404,7 @@ class File extends ServiceObject { const destination = options.destination; delete options.destination; - if (options.encryptionKey) { + if (options.encryptionKey !== undefined) { this.setEncryptionKey(options.encryptionKey); delete options.encryptionKey; } @@ -2482,8 +2494,23 @@ class File extends ServiceObject { * region_tag:storage_download_encrypted_file * Example of downloading an encrypted file: */ - setEncryptionKey(encryptionKey: string | Buffer) { + setEncryptionKey(encryptionKey: string | Buffer | null) { + if (this.encryptionKeyInterceptor) { + const index = this.interceptors.indexOf(this.encryptionKeyInterceptor); + if (index > -1) { + this.interceptors.splice(index, 1); + } + this.encryptionKeyInterceptor = undefined; + } + this.encryptionKey = encryptionKey; + + if (encryptionKey === null || encryptionKey === undefined) { + this.encryptionKeyBase64 = undefined; + this.encryptionKeyHash = undefined; + return this; + } + this.encryptionKeyBase64 = Buffer.from(encryptionKey as string).toString( 'base64', ); @@ -2504,7 +2531,7 @@ class File extends ServiceObject { }, }; - this.interceptors.push(this.encryptionKeyInterceptor!); + this.interceptors.push(this.encryptionKeyInterceptor); return this; } @@ -4462,7 +4489,7 @@ class File extends ServiceObject { file: this.name, generation: this.generation, isPartialUpload: options.isPartialUpload, - key: this.encryptionKey, + key: this.encryptionKey === null ? undefined : this.encryptionKey, kmsKeyName: this.kmsKeyName, metadata: options.metadata, offset: options.offset, diff --git a/handwritten/storage/system-test/storage.ts b/handwritten/storage/system-test/storage.ts index cf8074d52671..d9351f703732 100644 --- a/handwritten/storage/system-test/storage.ts +++ b/handwritten/storage/system-test/storage.ts @@ -2793,6 +2793,24 @@ describe('storage', function () { const [contents] = await file.download(); assert.strictEqual(contents.toString(), 'secret data'); }); + + it('should copy a CSEK-encrypted file to a standard non-CSEK destination when destination key is null', async () => { + const srcFile = bucket.file('encrypted-source'); + srcFile.setEncryptionKey('a'.repeat(32)); + + await srcFile.save('csek data', { resumable: false }); + + const dstFile = bucket.file('non-csek-destination'); + dstFile.setEncryptionKey(null); + + await srcFile.copy(dstFile); + + const [metadata] = await dstFile.getMetadata(); + assert.strictEqual(metadata.customerEncryption, undefined); + + const [contents] = await dstFile.download(); + assert.strictEqual(contents.toString(), 'csek data'); + }); }); describe.skip('kms keys', () => { diff --git a/handwritten/storage/test/file.ts b/handwritten/storage/test/file.ts index 26823995b907..5c3d01f53c5a 100644 --- a/handwritten/storage/test/file.ts +++ b/handwritten/storage/test/file.ts @@ -626,6 +626,75 @@ describe('File', () => { file.copy(newFile, assert.ifError); }); + it('should not copy encryption key or send destination headers when destination file has null encryption key', done => { + file.encryptionKey = 'sourceKey'; + file.encryptionKeyBase64 = 'sourceKeyBase64'; + file.encryptionKeyHash = 'sourceKeyHash'; + + const newFile = new File(BUCKET, 'new-file'); + newFile.setEncryptionKey(null); + + file.request = (reqOpts: DecorateRequestOptions) => { + assert.strictEqual(newFile.encryptionKey, null); + assert.strictEqual(newFile.encryptionKeyBase64, undefined); + assert.strictEqual(newFile.encryptionKeyHash, undefined); + + assert.strictEqual( + reqOpts.headers!['x-goog-copy-source-encryption-algorithm'], + 'AES256' + ); + assert.strictEqual( + reqOpts.headers!['x-goog-copy-source-encryption-key'], + 'sourceKeyBase64' + ); + assert.strictEqual( + reqOpts.headers!['x-goog-copy-source-encryption-key-sha256'], + 'sourceKeyHash' + ); + + assert.strictEqual( + reqOpts.headers!['x-goog-encryption-algorithm'], + undefined + ); + assert.strictEqual( + reqOpts.headers!['x-goog-encryption-key'], + undefined + ); + assert.strictEqual( + reqOpts.headers!['x-goog-encryption-key-sha256'], + undefined + ); + + assert.strictEqual(file.encryptionKeyInterceptor, undefined); + + done(); + }; + + file.copy(newFile, assert.ifError); + }); + + it('should copy the source key to the destination file object if destination key is undefined', done => { + file.encryptionKey = 'sourceKey'; + file.encryptionKeyBase64 = 'sourceKeyBase64'; + file.encryptionKeyHash = 'sourceKeyHash'; + + const newFile = new File(BUCKET, 'new-file'); + + file.request = (reqOpts: DecorateRequestOptions) => { + assert.strictEqual(newFile.encryptionKey, file.encryptionKey); + assert.strictEqual(newFile.encryptionKeyBase64, file.encryptionKeyBase64); + assert.strictEqual(newFile.encryptionKeyHash, file.encryptionKeyHash); + + assert.strictEqual( + reqOpts.headers!['x-goog-copy-source-encryption-key'], + file.encryptionKeyBase64 + ); + done(); + }; + + file.copy(newFile, assert.ifError); + }); + it('should set destination KMS key name', done => { const newFile = new File(BUCKET, 'new-file'); newFile.kmsKeyName = 'kms-key-name'; @@ -5440,6 +5509,30 @@ describe('File', () => { done(); }); + + describe('null key', () => { + beforeEach(() => { + file.setEncryptionKey(KEY); + file.setEncryptionKey(null); + }); + + it('should localize the key to null', () => { + assert.strictEqual(file.encryptionKey, null); + }); + + it('should clear the base64 key', () => { + assert.strictEqual(file.encryptionKeyBase64, undefined); + }); + + it('should clear the hash', () => { + assert.strictEqual(file.encryptionKeyHash, undefined); + }); + + it('should remove the request interceptor', () => { + assert.strictEqual(file.encryptionKeyInterceptor, undefined); + assert.strictEqual(file.interceptors.length, 0); + }); + }); }); describe('startResumableUpload_', () => { From e1939cd1b30bf0f51184faefb4a0029483bb7c71 Mon Sep 17 00:00:00 2001 From: Thiyagu K Date: Mon, 29 Jun 2026 11:35:00 +0000 Subject: [PATCH 5/6] fix: handle destination encryption headers and prevent key interceptor conflicts during file copy operations --- handwritten/storage/src/file.ts | 22 ++++++++----- handwritten/storage/test/file.ts | 54 ++++++++++++++++++++++---------- 2 files changed, 53 insertions(+), 23 deletions(-) diff --git a/handwritten/storage/src/file.ts b/handwritten/storage/src/file.ts index 6a9416dd6f00..220a080e6015 100644 --- a/handwritten/storage/src/file.ts +++ b/handwritten/storage/src/file.ts @@ -1386,20 +1386,18 @@ class File extends ServiceObject { this.encryptionKeyHash; } - let copiedKey = false; if ( this.encryptionKey !== undefined && this.encryptionKey !== null && newFile.encryptionKey === undefined ) { - newFile.encryptionKey = this.encryptionKey; - newFile.encryptionKeyBase64 = this.encryptionKeyBase64; - newFile.encryptionKeyHash = this.encryptionKeyHash; - copiedKey = true; + newFile.setEncryptionKey(this.encryptionKey); } - if (newFile.encryptionKey !== undefined && !copiedKey) { - this.setEncryptionKey(newFile.encryptionKey!); + if (newFile.encryptionKey !== undefined && newFile.encryptionKey !== null) { + headers['x-goog-encryption-algorithm'] = 'AES256'; + headers['x-goog-encryption-key'] = newFile.encryptionKeyBase64; + headers['x-goog-encryption-key-sha256'] = newFile.encryptionKeyHash; } else if (options.destinationKmsKeyName !== undefined) { query.destinationKmsKeyName = options.destinationKmsKeyName; delete options.destinationKmsKeyName; @@ -1431,6 +1429,14 @@ class File extends ServiceObject { delete options.preconditionOpts; } + const originalGetRequestInterceptors = this.getRequestInterceptors; + this.getRequestInterceptors = () => { + return originalGetRequestInterceptors.call(this).filter( + interceptorFn => + interceptorFn !== this.encryptionKeyInterceptor?.request + ); + }; + this.request( { method: 'POST', @@ -1468,6 +1474,8 @@ class File extends ServiceObject { callback!(null, newFile, resp); }, ); + + this.getRequestInterceptors = originalGetRequestInterceptors; } /** diff --git a/handwritten/storage/test/file.ts b/handwritten/storage/test/file.ts index 5c3d01f53c5a..c76bc74ecfb3 100644 --- a/handwritten/storage/test/file.ts +++ b/handwritten/storage/test/file.ts @@ -596,9 +596,7 @@ describe('File', () => { }); it('should set correct headers when file is encrypted', done => { - file.encryptionKey = {}; - file.encryptionKeyBase64 = 'base64'; - file.encryptionKeyHash = 'hash'; + file.setEncryptionKey('sourceKey'); const newFile = new File(BUCKET, 'new-file'); @@ -607,6 +605,9 @@ describe('File', () => { 'x-goog-copy-source-encryption-algorithm': 'AES256', 'x-goog-copy-source-encryption-key': file.encryptionKeyBase64, 'x-goog-copy-source-encryption-key-sha256': file.encryptionKeyHash, + 'x-goog-encryption-algorithm': 'AES256', + 'x-goog-encryption-key': file.encryptionKeyBase64, + 'x-goog-encryption-key-sha256': file.encryptionKeyHash, }); done(); }; @@ -614,12 +615,23 @@ describe('File', () => { file.copy(newFile, assert.ifError); }); - it('should set encryption key on the new File instance', done => { + it('should send destination encryption headers when destination file has an encryption key', done => { const newFile = new File(BUCKET, 'new-file'); - newFile.encryptionKey = 'encryptionKey'; + newFile.setEncryptionKey('destinationKey'); - file.setEncryptionKey = (encryptionKey: {}) => { - assert.strictEqual(encryptionKey, newFile.encryptionKey); + file.request = (reqOpts: DecorateRequestOptions) => { + assert.strictEqual( + reqOpts.headers!['x-goog-encryption-algorithm'], + 'AES256' + ); + assert.strictEqual( + reqOpts.headers!['x-goog-encryption-key'], + newFile.encryptionKeyBase64 + ); + assert.strictEqual( + reqOpts.headers!['x-goog-encryption-key-sha256'], + newFile.encryptionKeyHash + ); done(); }; @@ -627,9 +639,9 @@ describe('File', () => { }); it('should not copy encryption key or send destination headers when destination file has null encryption key', done => { - file.encryptionKey = 'sourceKey'; - file.encryptionKeyBase64 = 'sourceKeyBase64'; - file.encryptionKeyHash = 'sourceKeyHash'; + file.setEncryptionKey('sourceKey'); + const expectedSourceKeyBase64 = file.encryptionKeyBase64; + const expectedSourceKeyHash = file.encryptionKeyHash; const newFile = new File(BUCKET, 'new-file'); newFile.setEncryptionKey(null); @@ -645,11 +657,11 @@ describe('File', () => { ); assert.strictEqual( reqOpts.headers!['x-goog-copy-source-encryption-key'], - 'sourceKeyBase64' + expectedSourceKeyBase64 ); assert.strictEqual( reqOpts.headers!['x-goog-copy-source-encryption-key-sha256'], - 'sourceKeyHash' + expectedSourceKeyHash ); assert.strictEqual( @@ -665,7 +677,7 @@ describe('File', () => { undefined ); - assert.strictEqual(file.encryptionKeyInterceptor, undefined); + assert.notStrictEqual(file.encryptionKeyInterceptor, undefined); done(); }; @@ -674,9 +686,7 @@ describe('File', () => { }); it('should copy the source key to the destination file object if destination key is undefined', done => { - file.encryptionKey = 'sourceKey'; - file.encryptionKeyBase64 = 'sourceKeyBase64'; - file.encryptionKeyHash = 'sourceKeyHash'; + file.setEncryptionKey('sourceKey'); const newFile = new File(BUCKET, 'new-file'); @@ -689,6 +699,18 @@ describe('File', () => { reqOpts.headers!['x-goog-copy-source-encryption-key'], file.encryptionKeyBase64 ); + assert.strictEqual( + reqOpts.headers!['x-goog-encryption-algorithm'], + 'AES256' + ); + assert.strictEqual( + reqOpts.headers!['x-goog-encryption-key'], + file.encryptionKeyBase64 + ); + assert.strictEqual( + reqOpts.headers!['x-goog-encryption-key-sha256'], + file.encryptionKeyHash + ); done(); }; From 265194ca5d22a9999a3f7ebcda78d80804909a9e Mon Sep 17 00:00:00 2001 From: Thiyagu K Date: Mon, 29 Jun 2026 14:00:47 +0000 Subject: [PATCH 6/6] fix: update file rewrite request URI and routing to use bucket request instead of file request --- handwritten/storage/src/file.ts | 16 ++++------------ handwritten/storage/test/file.ts | 30 ++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/handwritten/storage/src/file.ts b/handwritten/storage/src/file.ts index 220a080e6015..66f40f01d58e 100644 --- a/handwritten/storage/src/file.ts +++ b/handwritten/storage/src/file.ts @@ -1429,18 +1429,12 @@ class File extends ServiceObject { delete options.preconditionOpts; } - const originalGetRequestInterceptors = this.getRequestInterceptors; - this.getRequestInterceptors = () => { - return originalGetRequestInterceptors.call(this).filter( - interceptorFn => - interceptorFn !== this.encryptionKeyInterceptor?.request - ); - }; - - this.request( + this.bucket.request( { method: 'POST', - uri: `/rewriteTo/b/${destBucket.name}/o/${encodeURIComponent( + uri: `/o/${encodeURIComponent( + this.name, + )}/rewriteTo/b/${destBucket.name}/o/${encodeURIComponent( newFile.name, )}`, qs: query, @@ -1474,8 +1468,6 @@ class File extends ServiceObject { callback!(null, newFile, resp); }, ); - - this.getRequestInterceptors = originalGetRequestInterceptors; } /** diff --git a/handwritten/storage/test/file.ts b/handwritten/storage/test/file.ts index c76bc74ecfb3..cb233b18076e 100644 --- a/handwritten/storage/test/file.ts +++ b/handwritten/storage/test/file.ts @@ -189,6 +189,10 @@ describe('File', () => { let File: any; // eslint-disable-next-line @typescript-eslint/no-explicit-any let file: any; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + let activeFile: any = null; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + let originalCopy: any; const FILE_NAME = 'file-name.png'; // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -228,6 +232,18 @@ describe('File', () => { './signer': fakeSigner, zlib: fakeZlib, }).File; + + originalCopy = File.prototype.copy; + File.prototype.copy = function (dest: any, options: any, callback: any) { + activeFile = this; + return originalCopy.call(this, dest, options, callback); + }; + }); + + after(() => { + if (originalCopy) { + File.prototype.copy = originalCopy; + } }); beforeEach(() => { @@ -274,6 +290,19 @@ describe('File', () => { specialCharsFile = new File(BUCKET, "special/azAZ!*'()*%/file.jpg"); specialCharsFile.request = util.noop; + activeFile = null; + BUCKET.request = function (reqOpts: any, callback: any) { + if (activeFile && typeof activeFile.request === 'function' && (activeFile.request as any) !== util.noop) { + const prefix = `/o/${encodeURIComponent(activeFile.name)}`; + const modifiedReqOpts = { ...reqOpts }; + if (modifiedReqOpts.uri.startsWith(prefix)) { + modifiedReqOpts.uri = modifiedReqOpts.uri.substring(prefix.length); + } + return activeFile.request(modifiedReqOpts, callback); + } + return Bucket.prototype.request.call(this, reqOpts, callback); + }; + createGunzipOverride = null; handleRespOverride = null; makeWritableStreamOverride = null; @@ -507,6 +536,7 @@ describe('File', () => { }); describe('copy', () => { + it('should throw if no destination is provided', () => { assert.throws(() => { file.copy();