Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions packages/ramps-controller/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,14 @@ 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.

## [17.2.0]

### Added
Expand Down
50 changes: 0 additions & 50 deletions packages/ramps-controller/src/featureFlags.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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'],
Expand Down
24 changes: 0 additions & 24 deletions packages/ramps-controller/src/featureFlags.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 0 additions & 1 deletion packages/ramps-controller/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down