From 9759c8384a0fb8aab054155f85dbe01dc070c5f7 Mon Sep 17 00:00:00 2001 From: Shane Austrie Date: Mon, 27 Jul 2026 12:43:41 -0700 Subject: [PATCH 1/2] fix(ramps-controller): drop unused headless minimumVersion helper --- packages/ramps-controller/CHANGELOG.md | 4 ++ .../ramps-controller/src/featureFlags.test.ts | 50 ------------------- packages/ramps-controller/src/featureFlags.ts | 24 --------- packages/ramps-controller/src/index.ts | 1 - 4 files changed, 4 insertions(+), 75 deletions(-) diff --git a/packages/ramps-controller/CHANGELOG.md b/packages/ramps-controller/CHANGELOG.md index d76121f7636..39c99955275 100644 --- a/packages/ramps-controller/CHANGELOG.md +++ b/packages/ramps-controller/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Removed + +- **BREAKING:** Remove `getHeadlessAllProvidersMinimumVersion`; app-version gating for `moneyHeadlessAllProviders` is owned by the LaunchDarkly `versions` wrapper (processed by `RemoteFeatureFlagController`), not a payload `minimumVersion` field. `featureVersion` fail-closed enablement and `providerIds` allowlisting are unchanged. ([#9658](https://github.com/MetaMask/core/pull/9658)) + ## [17.2.0] ### Added diff --git a/packages/ramps-controller/src/featureFlags.test.ts b/packages/ramps-controller/src/featureFlags.test.ts index 83659e8797b..53c0d68cd70 100644 --- a/packages/ramps-controller/src/featureFlags.test.ts +++ b/packages/ramps-controller/src/featureFlags.test.ts @@ -2,7 +2,6 @@ import type { Json } from '@metamask/utils'; import { HEADLESS_ALL_PROVIDERS_FEATURE_VERSION, - getHeadlessAllProvidersMinimumVersion, MONEY_HEADLESS_ALL_PROVIDERS_FLAG_KEY, getHeadlessProviderAllowlist, isHeadlessAllProvidersEnabled, @@ -328,55 +327,6 @@ describe('featureVersion gating', () => { }); }); -describe('getHeadlessAllProvidersMinimumVersion', () => { - it('returns the minimumVersion carried by an enabled payload', () => { - expect( - getHeadlessAllProvidersMinimumVersion({ - remoteFeatureFlags: { - [MONEY_HEADLESS_ALL_PROVIDERS_FLAG_KEY]: { - enabled: true, - featureVersion: '1', - minimumVersion: '8.6.0', - } as Json, - }, - }), - ).toBe('8.6.0'); - }); - - it('returns undefined for the boolean form, disabled payloads, and blank values', () => { - expect( - getHeadlessAllProvidersMinimumVersion({ - remoteFeatureFlags: { - [MONEY_HEADLESS_ALL_PROVIDERS_FLAG_KEY]: true, - }, - }), - ).toBeUndefined(); - expect( - getHeadlessAllProvidersMinimumVersion({ - remoteFeatureFlags: { - [MONEY_HEADLESS_ALL_PROVIDERS_FLAG_KEY]: { - enabled: false, - featureVersion: '1', - minimumVersion: '8.6.0', - } as Json, - }, - }), - ).toBeUndefined(); - expect( - getHeadlessAllProvidersMinimumVersion({ - remoteFeatureFlags: { - [MONEY_HEADLESS_ALL_PROVIDERS_FLAG_KEY]: { - enabled: true, - featureVersion: '1', - minimumVersion: ' ', - } as Json, - }, - }), - ).toBeUndefined(); - expect(getHeadlessAllProvidersMinimumVersion(null)).toBeUndefined(); - }); -}); - describe('normalizeHeadlessProviderId', () => { it.each([ ['/providers/moonpay', 'moonpay'], diff --git a/packages/ramps-controller/src/featureFlags.ts b/packages/ramps-controller/src/featureFlags.ts index c5fe446b1d8..95993805dab 100644 --- a/packages/ramps-controller/src/featureFlags.ts +++ b/packages/ramps-controller/src/featureFlags.ts @@ -82,30 +82,6 @@ function isEnabledPayload(value: Json | undefined): value is { ); } -/** - * The `minimumVersion` carried by an enabled payload, or `undefined` for the - * boolean form, a disabled payload, or a malformed field. This package cannot - * compare app versions itself; mobile validates the value through its shared - * `validatedVersionGatedFeatureFlag` util, and the LaunchDarkly `versions` - * wrapper provides the server-side gate. - * - * @param remoteFeatureFlagState - `RemoteFeatureFlagController` state (or the - * relevant subset of it). - * @returns The minimum app version the payload declares, or `undefined`. - */ -export function getHeadlessAllProvidersMinimumVersion( - remoteFeatureFlagState: HeadlessFeatureFlagsLookup | null | undefined, -): string | undefined { - const value = resolveFlagValue(remoteFeatureFlagState); - if (!isEnabledPayload(value)) { - return undefined; - } - const { minimumVersion } = value; - return typeof minimumVersion === 'string' && minimumVersion.trim() !== '' - ? minimumVersion - : undefined; -} - /** * Coerces a payload field into a provider-id list: keeps only string entries, * trims them, and drops empties. An empty or malformed level is treated as diff --git a/packages/ramps-controller/src/index.ts b/packages/ramps-controller/src/index.ts index 5d258a257e4..239e3a5b7ec 100644 --- a/packages/ramps-controller/src/index.ts +++ b/packages/ramps-controller/src/index.ts @@ -144,7 +144,6 @@ export type { HeadlessFeatureFlagsLookup } from './featureFlags.js'; export { HEADLESS_ALL_PROVIDERS_FEATURE_VERSION, MONEY_HEADLESS_ALL_PROVIDERS_FLAG_KEY, - getHeadlessAllProvidersMinimumVersion, getHeadlessProviderAllowlist, isHeadlessAllProvidersEnabled, } from './featureFlags.js'; From aa04b1508b70baa406af8c795948ec31072867d2 Mon Sep 17 00:00:00 2001 From: Shane Austrie Date: Mon, 27 Jul 2026 12:44:17 -0700 Subject: [PATCH 2/2] chore: update CHANGELOG PR link to #9668 --- packages/ramps-controller/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ramps-controller/CHANGELOG.md b/packages/ramps-controller/CHANGELOG.md index 39c99955275..0d9dd8aff73 100644 --- a/packages/ramps-controller/CHANGELOG.md +++ b/packages/ramps-controller/CHANGELOG.md @@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Removed -- **BREAKING:** Remove `getHeadlessAllProvidersMinimumVersion`; app-version gating for `moneyHeadlessAllProviders` is owned by the LaunchDarkly `versions` wrapper (processed by `RemoteFeatureFlagController`), not a payload `minimumVersion` field. `featureVersion` fail-closed enablement and `providerIds` allowlisting are unchanged. ([#9658](https://github.com/MetaMask/core/pull/9658)) +- **BREAKING:** Remove `getHeadlessAllProvidersMinimumVersion`; app-version gating for `moneyHeadlessAllProviders` is owned by the LaunchDarkly `versions` wrapper (processed by `RemoteFeatureFlagController`), not a payload `minimumVersion` field. `featureVersion` fail-closed enablement and `providerIds` allowlisting are unchanged. ([#9668](https://github.com/MetaMask/core/pull/9668)) ## [17.2.0]