Skip to content

feat: Migrate MultiProvider from js-sdk-contrib #1234

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 10 commits into
base: main
Choose a base branch
from

Conversation

jonathannorris
Copy link
Member

@jonathannorris jonathannorris commented Aug 15, 2025

This PR migrates the MultiProvider functionality from the js-sdk-contrib repository into the main js-sdk, providing built-in support for multi-provider evaluation strategies. Addresses #1217

What's Changed

  • Added MultiProvider for server SDK with support for multiple evaluation strategies
  • Added WebMultiProvider for web SDK with web-specific optimizations
  • Included 3 evaluation strategies: FirstMatch, FirstSuccessful, and Comparison
  • Comprehensive test coverage for both server and web implementations
  • Updated documentation with usage examples and strategy explanations

Testing

  • ✅ All existing tests pass
  • ✅ New comprehensive test suites for both server and web MultiProvider
  • ✅ ESLint compliance across all new code

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 @jonathannorris, 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 integrates the MultiProvider feature directly into the OpenFeature SDK, enhancing its capability to manage and evaluate feature flags from multiple sources simultaneously. This migration provides a robust framework for scenarios like gradual migrations between flag providers, combining different data sources, or comparing flag values across systems. The implementation includes distinct server and web SDK components, complete with various evaluation strategies and comprehensive testing, streamlining multi-provider operations for developers.

Highlights

  • Core Functionality Migration: The MultiProvider functionality has been migrated from js-sdk-contrib directly into the main SDK, providing native support for managing multiple feature flag providers.
  • Platform-Specific Implementations: Dedicated MultiProvider implementations are now available for both server-side (MultiProvider) and web-side (WebMultiProvider) SDKs, optimized for their respective environments.
  • New Evaluation Strategies: Three distinct evaluation strategies are included: FirstMatchStrategy (default), FirstSuccessfulStrategy, and ComparisonStrategy, offering flexible control over how flags are resolved across multiple providers.
  • Enhanced Test Coverage: Comprehensive test coverage has been added for both server and web implementations, ensuring reliability and stability of the new MultiProvider features.
  • Updated Documentation: Detailed documentation has been updated for both server and web SDKs, providing clear usage examples and explanations of the new MultiProvider and its strategies.
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 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. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

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.

@jonathannorris jonathannorris force-pushed the feat-migrate-multi-provider branch from e388496 to 6b1d6d2 Compare August 15, 2025 19:46
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 MultiProvider functionality for both server and web SDKs, which is a fantastic addition. The implementation is robust and well-tested. I've identified a few areas for improvement, primarily in the documentation to ensure it accurately reflects the implementation, especially for the ComparisonStrategy. Additionally, there are some minor opportunities for code refinement, such as removing redundant logging and a leftover TODO comment. Overall, great work on this significant feature.

@jonathannorris jonathannorris marked this pull request as ready for review August 15, 2025 21:09
@jonathannorris jonathannorris requested review from a team as code owners August 15, 2025 21:09
Copy link

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR migrates the MultiProvider functionality from the js-sdk-contrib repository into the main OpenFeature JS SDK, providing built-in support for multiple provider evaluation strategies. The implementation includes server and web variants with comprehensive testing and documentation.

Key Changes:

  • Added MultiProvider for server SDK and WebMultiProvider for web SDK with support for multiple evaluation strategies
  • Implemented three evaluation strategies: FirstMatch, FirstSuccessful, and Comparison
  • Added comprehensive test coverage for both server and web implementations
  • Updated documentation with usage examples and strategy explanations

Reviewed Changes

Copilot reviewed 30 out of 31 changed files in this pull request and generated 6 comments.

File Description
packages/server/src/provider/multi-provider/ Server implementation with async evaluation, hook handling, and tracking support
packages/web/src/provider/multi-provider/ Web implementation with synchronous evaluation and web-specific optimizations
packages//test/multi-provider.spec.ts Comprehensive test suites covering all strategies and edge cases
packages/*/README.md Updated documentation with usage examples and Multi-Provider sections
Comments suppressed due to low confidence (1)

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant