Skip to content

feat(storage)!: migrate HTTP transport layer from teeny-request to gaxios - #9443

Open
thiyaguk09 wants to merge 47 commits into
mainfrom
storage-gaxios-migration
Open

thiyaguk09 wants to merge 47 commits into
mainfrom
storage-gaxios-migration

Conversation

@thiyaguk09

@thiyaguk09 thiyaguk09 commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

Replaces legacy teeny-request and retry-request wrappers with the gaxios v7+ engine.

BREAKING CHANGE: Migrates response headers to standard Web Headers objects and replaces ApiError with GaxiosError.

  • apiResponse.headers is now a WHATWG Headers instance (use .get('header-name')).
  • ApiError is no longer exported from root; callers should use GaxiosError or base Error.
  • Minimum runtime environment aligned to Node.js >= 22.
  • Low-level request options migrate from uri/qs/json to url/params/data.
    See MIGRATION.md for complete details.

thiyaguk09 and others added 15 commits September 24, 2026 05:47
* fix(storage): standardize URL formatting and enhance transport retry

* fix storage transport & retry issues

* fix

* Update handwritten/storage/src/file.ts

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* fix(storage): interceptors test

* fix(storage): standardize URL formatting and enhance transport retry

* refactor(storage): remove Service.ts and migrate logic to StorageTransport (#8283)

- Remove Service.ts and common.ts files from handwritten/storage

- Migrate remaining functionality to StorageTransport

- chore(ci): upgrade conformance tests to Node 18

* fix(storage): standardize URL formatting and enhance transport retry

* refactor(storage): remove Service.ts and migrate logic to StorageTransport (#8283)

- Remove Service.ts and common.ts files from handwritten/storage

- Migrate remaining functionality to StorageTransport

- chore(ci): upgrade conformance tests to Node 18

* fix(storage): standardize URL formatting and enhance transport retry

* refactor(storage): remove Service.ts and migrate logic to StorageTransport (#8283)

- Remove Service.ts and common.ts files from handwritten/storage

- Migrate remaining functionality to StorageTransport

- chore(ci): upgrade conformance tests to Node 18

* fix(storage): standardize URL formatting and enhance transport retry

* refactor(storage): remove Service.ts and migrate logic to StorageTransport (#8283)

- Remove Service.ts and common.ts files from handwritten/storage

- Migrate remaining functionality to StorageTransport

- chore(ci): upgrade conformance tests to Node 18

* feat: implement robust storage conformance test retry framework with request interception and test bench integration

* fix: correct response handler for binary/resumable uploads and improve etag check

- Updated `responseHandler` to correctly handle different payload types:
- Plain objects are mutated with `.headers` and `.status` and
returned.
- Binary payloads (Buffer/Stream) return raw data to prevent dangerous
mutations.
- Primitives (e.g., empty strings) return the full `GaxiosResponse`
wrapper to preserve access to headers like `Location` for resumable
upload initiation.
- Fixed `hasPrecondition` logic to safely parse stringified JSON or
inspect objects directly for an `etag` property. This prevents false
positives on raw text payloads containing the word "etag" and false
negatives on object payloads.

* fix(storage): standardize URL formatting and enhance transport retry

* refactor(storage): remove Service.ts and migrate logic to StorageTransport (#8283)

- Remove Service.ts and common.ts files from handwritten/storage

- Migrate remaining functionality to StorageTransport

- chore(ci): upgrade conformance tests to Node 18

* fix(storage): standardize URL formatting and enhance transport retry

* refactor(storage): remove Service.ts and migrate logic to StorageTransport (#8283)

- Remove Service.ts and common.ts files from handwritten/storage

- Migrate remaining functionality to StorageTransport

- chore(ci): upgrade conformance tests to Node 18

* refactor(storage): replace constructor-based type checks with structural checks and decouple retry logic into idempotent and transient error utilities.

* fix(storage): standardize URL formatting and enhance transport retry

* refactor(storage): remove Service.ts and migrate logic to StorageTransport (#8283)

- Remove Service.ts and common.ts files from handwritten/storage

- Migrate remaining functionality to StorageTransport

- chore(ci): upgrade conformance tests to Node 18

* refactor(storage): update storage-transport to return full GaxiosResponse and align downstream resource methods

* fix: update file request URL construction to support custom protocol endpoints

* fix(storage): standardize URL formatting and enhance transport retry

* refactor(storage): remove Service.ts and migrate logic to StorageTransport (#8283)

- Remove Service.ts and common.ts files from handwritten/storage

- Migrate remaining functionality to StorageTransport

- chore(ci): upgrade conformance tests to Node 18

* fix(storage): standardize URL formatting and enhance transport retry

* refactor(storage): remove Service.ts and migrate logic to StorageTransport (#8283)

- Remove Service.ts and common.ts files from handwritten/storage

- Migrate remaining functionality to StorageTransport

- chore(ci): upgrade conformance tests to Node 18

* refactor(storage): introduce ENCRYPTION_ALGORITHM_AES256 constant to replace hardcoded strings in File class

* fix(storage): merge request headers correctly in file.ts and add missing linting suppressions to ServiceObject

* fix(storage): standardize URL formatting and enhance transport retry

* refactor(storage): remove Service.ts and migrate logic to StorageTransport (#8283)

- Remove Service.ts and common.ts files from handwritten/storage

- Migrate remaining functionality to StorageTransport

- chore(ci): upgrade conformance tests to Node 18

* test: add bytes method to mock Gaxios responses in storage tests

* fix(storage): standardize URL formatting and enhance transport retry

* refactor(storage): remove Service.ts and migrate logic to StorageTransport (#8283)

- Remove Service.ts and common.ts files from handwritten/storage

- Migrate remaining functionality to StorageTransport

- chore(ci): upgrade conformance tests to Node 18

* fix(storage): standardize URL formatting and enhance transport retry

* refactor(storage): remove Service.ts and migrate logic to StorageTransport (#8283)

- Remove Service.ts and common.ts files from handwritten/storage

- Migrate remaining functionality to StorageTransport

- chore(ci): upgrade conformance tests to Node 18

* fix(storage): standardize URL formatting and enhance transport retry

* refactor(storage): remove Service.ts and migrate logic to StorageTransport (#8283)

- Remove Service.ts and common.ts files from handwritten/storage

- Migrate remaining functionality to StorageTransport

- chore(ci): upgrade conformance tests to Node 18

* fix(storage): standardize URL formatting and enhance transport retry

* refactor(storage): remove Service.ts and migrate logic to StorageTransport (#8283)

- Remove Service.ts and common.ts files from handwritten/storage

- Migrate remaining functionality to StorageTransport

- chore(ci): upgrade conformance tests to Node 18

* test: add bytes method to mock Gaxios response in acl and headers tests

* fix(storage): standardize URL formatting and enhance transport retry

* refactor(storage): remove Service.ts and migrate logic to StorageTransport (#8283)

- Remove Service.ts and common.ts files from handwritten/storage

- Migrate remaining functionality to StorageTransport

- chore(ci): upgrade conformance tests to Node 18

* test: add bytes method to mock Gaxios response in acl and headers tests

* fix(storage): standardize URL formatting and enhance transport retry

* refactor(storage): remove Service.ts and migrate logic to StorageTransport (#8283)

- Remove Service.ts and common.ts files from handwritten/storage

- Migrate remaining functionality to StorageTransport

- chore(ci): upgrade conformance tests to Node 18

* test: add bytes method to mock Gaxios response in acl and headers tests

* fix(storage): standardize URL formatting and enhance transport retry

* refactor(storage): remove Service.ts and migrate logic to StorageTransport (#8283)

- Remove Service.ts and common.ts files from handwritten/storage

- Migrate remaining functionality to StorageTransport

- chore(ci): upgrade conformance tests to Node 18

* test: add bytes method to mock Gaxios response in acl and headers tests

* fix(storage): standardize URL formatting and enhance transport retry

* refactor(storage): remove Service.ts and migrate logic to StorageTransport (#8283)

- Remove Service.ts and common.ts files from handwritten/storage

- Migrate remaining functionality to StorageTransport

- chore(ci): upgrade conformance tests to Node 18

* fix(storage): standardize URL formatting and enhance transport retry

* refactor(storage): remove Service.ts and migrate logic to StorageTransport (#8283)

- Remove Service.ts and common.ts files from handwritten/storage

- Migrate remaining functionality to StorageTransport

- chore(ci): upgrade conformance tests to Node 18

* refactor: improve type safety and validation logic in isBucket helper function

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
…es (#8190)

Hoists the generation of `persistentInvocationId` to the beginning of
the
upload process in `Bucket.upload` and `File.save`. This ensures that
retried multipart upload attempts reuse the same invocation ID in the
`x-goog-api-client` header, rather than generating a new one for each
attempt.

Thank you for opening a Pull Request! Before submitting your PR, there
are a few things you can do to make sure it goes smoothly:
- [ ] Make sure to open an issue as a
[bug/issue](https://github.com/googleapis/{{metadata['repo']['name']}}/issues)
before writing your code! That way we can discuss the change, evaluate
designs, and agree on the general idea
- [ ] Ensure the tests and linter pass
- [ ] Code coverage does not decrease (if any source code was changed)
- [ ] Appropriate docs were updated (if necessary)

Fixes #<issue_number_goes_here> 🦕

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
…to ensure streams are correctly piped before upload start

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request refactors the storage library's transport layer by replacing the legacy teeny-request and Service class with a new StorageTransport class built on gaxios and google-auth-library. This includes updating core classes (Bucket, File, Acl, Iam, Notification, Channel, and HmacKey) to use the new transport and gaxios types, upgrading dependencies, and updating the test suites accordingly. The review feedback focuses on improving StorageTransport robustness and performance, specifically by avoiding double-callback invocations in asynchronous handling, properly distinguishing payload types for backward compatibility, pre-calculating request flags to avoid redundant JSON parsing, and cleaning up stream event listeners to prevent memory leaks.

@thiyaguk09
thiyaguk09 force-pushed the storage-gaxios-migration branch from 6da6a4e to e409ee5 Compare September 24, 2026 09:02
@thiyaguk09
thiyaguk09 marked this pull request as ready for review September 24, 2026 13:54
@thiyaguk09
thiyaguk09 requested review from a team as code owners September 24, 2026 13:54
@thiyaguk09
thiyaguk09 requested a review from a team as a code owner October 6, 2026 11:24
@thiyaguk09
thiyaguk09 removed the request for review from a team October 6, 2026 11:25
@github-actions
github-actions Bot requested a review from feywind October 6, 2026 11:46
@thiyaguk09
thiyaguk09 force-pushed the storage-gaxios-migration branch from ab86096 to 985fdb4 Compare October 6, 2026 13:50
@thiyaguk09
thiyaguk09 removed the request for review from feywind October 6, 2026 14:58
@thiyaguk09 thiyaguk09 changed the title feat!: migrate HTTP transport layer from teeny-request to gaxios feat(storage)!: migrate HTTP transport layer from teeny-request to gaxios Oct 6, 2026
@thiyaguk09 thiyaguk09 added the api: storage Issues related to the Cloud Storage API. label Oct 9, 2026
@github-actions
github-actions Bot requested a review from shivanee-p October 14, 2026 09:34

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

api: storage Issues related to the Cloud Storage API.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant