Skip to content

Conversation

@cliffhall
Copy link
Owner

Summary

  • add a fetch option to SSEClientTransport and StreamableHTTPClientTransport
  • use the custom fetch implementation for SSE, HTTP POST and DELETE requests
  • ensure custom fetch can add auth headers in tests

Testing

  • npm install
  • npm test

https://chatgpt.com/codex/tasks/task_e_686405a312f48331b41322eb4cee87cb

Copy link

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

Choose a reason for hiding this comment

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

Summary of Changes

Hello @cliffhall, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces a significant enhancement by allowing the SSEClientTransport and StreamableHTTPClientTransport classes to accept a custom fetch implementation. This provides greater flexibility for integrating with various network environments, enabling custom authentication flows, proxying, or leveraging specific network libraries, thereby giving users more control over how network requests are made by these transports.

Highlights

  • Custom Fetch API Integration: I've added a new fetch option to both SSEClientTransportOptions and StreamableHTTPClientTransportOptions, allowing consumers to provide their own fetch-like function for network requests.
  • Enhanced Network Request Control: The provided custom fetch implementation is now utilized for all relevant network operations within both transports, including SSE connections (GET), JSON-RPC message sending (POST), and session termination (DELETE).
  • Improved Test Coverage: New test cases have been added for both SSEClientTransport and StreamableHTTPClientTransport to ensure that the custom fetch implementation is correctly used and can modify request headers, specifically for authentication.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in issue comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist is currently in preview and may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments to provide feedback.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

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

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 introduces the ability to use a custom fetch implementation for network requests in SSEClientTransport and StreamableHTTPClientTransport. The changes look good, but I've added some suggestions to consider using the nullish coalescing operator for conciseness.

Copy link

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

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 adds support for a custom fetch implementation to the SSEClientTransport and StreamableHTTPClientTransport. I've provided suggestions to improve code maintainability and test robustness.

cliffhall and others added 6 commits July 1, 2025 13:33
nullish coalescing operator ?? instead of the logical OR operator || to handle the case where this?._eventSourceInit?.fetch or this._fetch might be null or undefined but not falsy

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
nullish coalescing operator ?? instead of the logical OR operator || to handle the case where this?._eventSourceInit?.fetch or this._fetch might be null or undefined but not falsy

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
nullish coalescing operator ?? instead of the logical OR operator || to handle the case where this?._eventSourceInit?.fetch or this._fetch might be null or undefined but not falsy

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
nullish coalescing operator ?? instead of the logical OR operator || to handle the case where this?._eventSourceInit?.fetch or this._fetch might be null or undefined but not falsy

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
nullish coalescing operator ?? instead of the logical OR operator || to handle the case where this?._eventSourceInit?.fetch or this._fetch might be null or undefined but not falsy

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
  - More specific expectations in test "uses custom fetch implementation from options"

* In sse.ts
  - Import FetchLike from transport.ts

* In steramableHttp.ts
  - Import FetchLike from transport.ts
  - Export StartSSEOptions interface for testing

* In streamableHttp.test.ts
  - import StartSSEOptions from streamableHttp.ts
  - use StartSSEOptions instead of any in test "uses custom fetch implementation"

* In transport.ts
  - Add FetchLike function type
@cliffhall
Copy link
Owner Author

@gemini-code-assist summary

@gemini-code-assist
Copy link

Summary of Changes

This pull request significantly enhances the flexibility of the SSEClientTransport and StreamableHTTPClientTransport classes by enabling the injection of a custom fetch implementation. This change empowers users to exert fine-grained control over network requests, facilitating advanced use cases such as custom authentication flows or specialized request handling, thereby improving the adaptability of the transport layer.

Highlights

  • Custom Fetch Support: Added a fetch option to SSEClientTransport and StreamableHTTPClientTransport constructors, allowing consumers to provide their own custom fetch implementation for network requests.
  • Comprehensive Integration: The custom fetch implementation is now utilized for all internal network operations within these transports, including initial SSE connections (GET), sending messages (POST), and session termination (DELETE).
  • Type Standardization: Introduced a shared FetchLike type definition in src/shared/transport.ts to ensure consistent typing for custom fetch functions across the codebase.
  • Enhanced Test Coverage: New test cases were added to verify the correct usage and behavior of the custom fetch implementation, specifically ensuring proper authentication header propagation for various request types.
Changelog
  • src/client/sse.test.ts
    • Added a new test case to verify that SSEClientTransport correctly utilizes a custom fetch implementation for both initial connection and subsequent POST requests, ensuring proper header propagation.
  • src/client/sse.ts
    • Imported the new FetchLike type from src/shared/transport.ts.
    • Added a fetch option to SSEClientTransportOptions and a corresponding private _fetch property.
    • Updated internal fetch calls within _startOrAuth() and send() methods to use the provided custom fetch or fall back to the global fetch.
    • Applied nullish coalescing operator (??) for fetch fallback logic as per review suggestions.
  • src/client/streamableHttp.test.ts
    • Imported the StartSSEOptions interface for improved type safety in tests.
    • Added a new test case to confirm StreamableHTTPClientTransport uses the custom fetch implementation for all its network operations, including authentication.
    • Minor formatting adjustments.
  • src/client/streamableHttp.ts
    • Imported the new FetchLike type from src/shared/transport.ts.
    • Exported the StartSSEOptions interface.
    • Added a fetch option to StreamableHTTPClientTransportOptions and a corresponding private _fetch property.
    • Modified _startOrAuthSse(), send(), and terminate() methods to use the custom fetch implementation for their respective network requests.
    • Applied nullish coalescing operator (??) for fetch fallback logic as per review suggestions.
    • Minor formatting adjustments.
  • src/shared/transport.ts
    • Defined and exported the FetchLike type, standardizing the signature for custom fetch functions across the codebase.
    • Minor formatting adjustments to comments.
Activity
  • gemini-code-assist[bot] provided several suggestions to use the nullish coalescing operator (??) instead of the logical OR operator (||) for fetch fallback logic in src/client/sse.ts and src/client/streamableHttp.ts. These suggestions were addressed by the author.
  • gemini-code-assist[bot] recommended moving the FetchLike type definition to a shared location (src/shared/transport.ts) to avoid duplication, which the author fixed.
  • gemini-code-assist[bot] suggested more specific assertions in src/client/sse.test.ts to verify fetchWithAuth calls, which the author implemented.
  • gemini-code-assist[bot] advised exporting the StartSSEOptions interface from src/client/streamableHttp.ts for better type safety in tests, which the author also addressed.
  • cliffhall (the author) requested a summary from the bot.

@cliffhall cliffhall merged commit 9766edc into allow-custom-fetch Jul 1, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants