Skip to content

Conversation

@huggingbot
Copy link
Member

@huggingbot huggingbot commented Nov 10, 2025

Explanation

Implements cohort-based gating API support for Shield entry modal display based on user entry points (wallet_home, post_tx)

Changes

  • Add assignUserToCohort method to assign users to cohorts via backend API
  • Update getSubscriptionsEligibilities to accept optional balanceUsd parameter for cohort eligibility evaluation
  • Update submitSubscriptionUserEvents to include optional cohort parameter for event tracking
  • Add cohort-related types: Cohort, CohortName, AssignCohortRequest, GetSubscriptionsEligibilitiesRequest
  • Update SubscriptionEligibility type with cohort fields (cohorts, assignedCohort, hasAssignedCohortExpired)
  • Refactor SubscriptionService to use makeRequest helper for cleaner query parameter handling

References

Fixes https://consensyssoftware.atlassian.net/browse/SUBS-711

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've communicated my changes to consumers by updating changelogs for packages I've changed, highlighting breaking changes as necessary
  • I've prepared draft pull requests for clients and consumer packages to resolve any breaking changes

Note

Introduce cohort-based subscription gating: new assignUserToCohort, eligibility balanceCategory filtering, cohort-aware events, extended types/exports, and request helper refactor for query params.

  • Controller:
    • Add assignUserToCohort(request) and forwardable getSubscriptionsEligibilities(request?) to pass balanceCategory.
    • submitUserEvent now accepts optional cohort.
  • Service:
    • Implement assignUserToCohort (POST cohorts/assign).
    • Extend getSubscriptionsEligibilities(request?) to send balanceCategory as query param; normalize cohort fields in response.
    • Refactor #makeRequest to accept queryParams for URL construction.
  • Types/Constants/Exports:
    • Add cohort types Cohort, CohortName, BalanceCategory, AssignCohortRequest, GetSubscriptionsEligibilitiesRequest and constants COHORT_NAMES, BALANCE_CATEGORIES.
    • Extend SubscriptionEligibility with cohorts, assignedCohort, hasAssignedCohortExpired.
    • Add ShieldCohortAssigned to SubscriptionUserEvent.
    • Export new types/constants from index.
  • Tests/Docs:
    • Update unit tests for new methods/params and cohort payloads.
    • Update CHANGELOG.md reflecting additions and refactor.

Written by Cursor Bugbot for commit 2958797. This will update automatically on new commits. Configure here.

@huggingbot huggingbot requested a review from a team as a code owner November 10, 2025 10:40
@huggingbot huggingbot requested a review from a team as a code owner November 10, 2025 11:03
@huggingbot
Copy link
Member Author

@metamaskbot publish-preview

@github-actions
Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "2.0.0-preview-1a8571ae",
  "@metamask-previews/accounts-controller": "34.0.0-preview-1a8571ae",
  "@metamask-previews/address-book-controller": "7.0.0-preview-1a8571ae",
  "@metamask-previews/analytics-controller": "0.0.0-preview-1a8571ae",
  "@metamask-previews/announcement-controller": "8.0.0-preview-1a8571ae",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-1a8571ae",
  "@metamask-previews/approval-controller": "8.0.0-preview-1a8571ae",
  "@metamask-previews/assets-controllers": "87.1.1-preview-1a8571ae",
  "@metamask-previews/base-controller": "9.0.0-preview-1a8571ae",
  "@metamask-previews/bridge-controller": "59.0.0-preview-1a8571ae",
  "@metamask-previews/bridge-status-controller": "59.0.0-preview-1a8571ae",
  "@metamask-previews/build-utils": "3.0.4-preview-1a8571ae",
  "@metamask-previews/chain-agnostic-permission": "1.2.2-preview-1a8571ae",
  "@metamask-previews/claims-controller": "0.1.0-preview-1a8571ae",
  "@metamask-previews/composable-controller": "12.0.0-preview-1a8571ae",
  "@metamask-previews/controller-utils": "11.15.0-preview-1a8571ae",
  "@metamask-previews/core-backend": "4.0.0-preview-1a8571ae",
  "@metamask-previews/delegation-controller": "1.0.0-preview-1a8571ae",
  "@metamask-previews/earn-controller": "9.0.0-preview-1a8571ae",
  "@metamask-previews/eip-5792-middleware": "2.0.0-preview-1a8571ae",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-1a8571ae",
  "@metamask-previews/eip1193-permission-middleware": "1.0.2-preview-1a8571ae",
  "@metamask-previews/ens-controller": "18.0.0-preview-1a8571ae",
  "@metamask-previews/error-reporting-service": "3.0.0-preview-1a8571ae",
  "@metamask-previews/eth-block-tracker": "14.0.0-preview-1a8571ae",
  "@metamask-previews/eth-json-rpc-middleware": "21.0.0-preview-1a8571ae",
  "@metamask-previews/eth-json-rpc-provider": "5.0.1-preview-1a8571ae",
  "@metamask-previews/foundryup": "1.0.1-preview-1a8571ae",
  "@metamask-previews/gas-fee-controller": "25.0.0-preview-1a8571ae",
  "@metamask-previews/gator-permissions-controller": "0.4.0-preview-1a8571ae",
  "@metamask-previews/json-rpc-engine": "10.1.1-preview-1a8571ae",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-1a8571ae",
  "@metamask-previews/keyring-controller": "24.0.0-preview-1a8571ae",
  "@metamask-previews/logging-controller": "7.0.0-preview-1a8571ae",
  "@metamask-previews/message-manager": "14.0.0-preview-1a8571ae",
  "@metamask-previews/messenger": "0.3.0-preview-1a8571ae",
  "@metamask-previews/multichain-account-service": "2.1.0-preview-1a8571ae",
  "@metamask-previews/multichain-api-middleware": "1.2.4-preview-1a8571ae",
  "@metamask-previews/multichain-network-controller": "2.0.0-preview-1a8571ae",
  "@metamask-previews/multichain-transactions-controller": "6.0.0-preview-1a8571ae",
  "@metamask-previews/name-controller": "9.0.0-preview-1a8571ae",
  "@metamask-previews/network-controller": "25.0.0-preview-1a8571ae",
  "@metamask-previews/network-enablement-controller": "3.1.0-preview-1a8571ae",
  "@metamask-previews/notification-services-controller": "19.0.0-preview-1a8571ae",
  "@metamask-previews/permission-controller": "12.1.0-preview-1a8571ae",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-1a8571ae",
  "@metamask-previews/phishing-controller": "15.0.0-preview-1a8571ae",
  "@metamask-previews/polling-controller": "15.0.0-preview-1a8571ae",
  "@metamask-previews/preferences-controller": "21.0.0-preview-1a8571ae",
  "@metamask-previews/profile-sync-controller": "26.0.0-preview-1a8571ae",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-1a8571ae",
  "@metamask-previews/remote-feature-flag-controller": "2.0.0-preview-1a8571ae",
  "@metamask-previews/sample-controllers": "3.0.0-preview-1a8571ae",
  "@metamask-previews/seedless-onboarding-controller": "6.1.0-preview-1a8571ae",
  "@metamask-previews/selected-network-controller": "25.0.0-preview-1a8571ae",
  "@metamask-previews/shield-controller": "2.0.0-preview-1a8571ae",
  "@metamask-previews/signature-controller": "36.0.0-preview-1a8571ae",
  "@metamask-previews/subscription-controller": "3.3.0-preview-1a8571ae",
  "@metamask-previews/token-search-discovery-controller": "4.0.0-preview-1a8571ae",
  "@metamask-previews/transaction-controller": "61.1.0-preview-1a8571ae",
  "@metamask-previews/transaction-pay-controller": "3.1.0-preview-1a8571ae",
  "@metamask-previews/user-operation-controller": "40.0.0-preview-1a8571ae"
}

const path = 'subscriptions/eligibility';
const results = await this.#makeRequest<SubscriptionEligibility[]>(path);
let query: Record<string, string> | undefined;
if (request?.balanceUsd !== undefined) {
Copy link
Member

Choose a reason for hiding this comment

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

pls don't send the actual user balance. send the user balance category
0-100
100-1k
1k-10k
10k-100k
100k-1M
1M+

Copy link
Member Author

Choose a reason for hiding this comment

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

fixed here

@huggingbot
Copy link
Member Author

@metamaskbot publish-preview

@github-actions
Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "2.0.0-preview-7f5161b8",
  "@metamask-previews/accounts-controller": "34.0.0-preview-7f5161b8",
  "@metamask-previews/address-book-controller": "7.0.0-preview-7f5161b8",
  "@metamask-previews/analytics-controller": "0.0.0-preview-7f5161b8",
  "@metamask-previews/announcement-controller": "8.0.0-preview-7f5161b8",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-7f5161b8",
  "@metamask-previews/approval-controller": "8.0.0-preview-7f5161b8",
  "@metamask-previews/assets-controllers": "87.1.1-preview-7f5161b8",
  "@metamask-previews/base-controller": "9.0.0-preview-7f5161b8",
  "@metamask-previews/bridge-controller": "59.0.0-preview-7f5161b8",
  "@metamask-previews/bridge-status-controller": "59.0.0-preview-7f5161b8",
  "@metamask-previews/build-utils": "3.0.4-preview-7f5161b8",
  "@metamask-previews/chain-agnostic-permission": "1.2.2-preview-7f5161b8",
  "@metamask-previews/claims-controller": "0.1.0-preview-7f5161b8",
  "@metamask-previews/composable-controller": "12.0.0-preview-7f5161b8",
  "@metamask-previews/controller-utils": "11.15.0-preview-7f5161b8",
  "@metamask-previews/core-backend": "4.0.0-preview-7f5161b8",
  "@metamask-previews/delegation-controller": "1.0.0-preview-7f5161b8",
  "@metamask-previews/earn-controller": "9.0.0-preview-7f5161b8",
  "@metamask-previews/eip-5792-middleware": "2.0.0-preview-7f5161b8",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-7f5161b8",
  "@metamask-previews/eip1193-permission-middleware": "1.0.2-preview-7f5161b8",
  "@metamask-previews/ens-controller": "18.0.0-preview-7f5161b8",
  "@metamask-previews/error-reporting-service": "3.0.0-preview-7f5161b8",
  "@metamask-previews/eth-block-tracker": "14.0.0-preview-7f5161b8",
  "@metamask-previews/eth-json-rpc-middleware": "21.0.0-preview-7f5161b8",
  "@metamask-previews/eth-json-rpc-provider": "5.0.1-preview-7f5161b8",
  "@metamask-previews/foundryup": "1.0.1-preview-7f5161b8",
  "@metamask-previews/gas-fee-controller": "25.0.0-preview-7f5161b8",
  "@metamask-previews/gator-permissions-controller": "0.4.0-preview-7f5161b8",
  "@metamask-previews/json-rpc-engine": "10.1.1-preview-7f5161b8",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-7f5161b8",
  "@metamask-previews/keyring-controller": "24.0.0-preview-7f5161b8",
  "@metamask-previews/logging-controller": "7.0.0-preview-7f5161b8",
  "@metamask-previews/message-manager": "14.0.0-preview-7f5161b8",
  "@metamask-previews/messenger": "0.3.0-preview-7f5161b8",
  "@metamask-previews/multichain-account-service": "2.1.0-preview-7f5161b8",
  "@metamask-previews/multichain-api-middleware": "1.2.4-preview-7f5161b8",
  "@metamask-previews/multichain-network-controller": "2.0.0-preview-7f5161b8",
  "@metamask-previews/multichain-transactions-controller": "6.0.0-preview-7f5161b8",
  "@metamask-previews/name-controller": "9.0.0-preview-7f5161b8",
  "@metamask-previews/network-controller": "25.0.0-preview-7f5161b8",
  "@metamask-previews/network-enablement-controller": "3.1.0-preview-7f5161b8",
  "@metamask-previews/notification-services-controller": "19.0.0-preview-7f5161b8",
  "@metamask-previews/permission-controller": "12.1.0-preview-7f5161b8",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-7f5161b8",
  "@metamask-previews/phishing-controller": "15.0.0-preview-7f5161b8",
  "@metamask-previews/polling-controller": "15.0.0-preview-7f5161b8",
  "@metamask-previews/preferences-controller": "21.0.0-preview-7f5161b8",
  "@metamask-previews/profile-sync-controller": "26.0.0-preview-7f5161b8",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-7f5161b8",
  "@metamask-previews/remote-feature-flag-controller": "2.0.0-preview-7f5161b8",
  "@metamask-previews/sample-controllers": "3.0.0-preview-7f5161b8",
  "@metamask-previews/seedless-onboarding-controller": "6.1.0-preview-7f5161b8",
  "@metamask-previews/selected-network-controller": "25.0.0-preview-7f5161b8",
  "@metamask-previews/shield-controller": "2.0.0-preview-7f5161b8",
  "@metamask-previews/signature-controller": "36.0.0-preview-7f5161b8",
  "@metamask-previews/subscription-controller": "3.3.0-preview-7f5161b8",
  "@metamask-previews/token-search-discovery-controller": "4.0.0-preview-7f5161b8",
  "@metamask-previews/transaction-controller": "61.1.0-preview-7f5161b8",
  "@metamask-previews/transaction-pay-controller": "3.1.0-preview-7f5161b8",
  "@metamask-previews/user-operation-controller": "40.0.0-preview-7f5161b8"
}

@huggingbot
Copy link
Member Author

@metamaskbot publish-preview

@github-actions
Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "3.0.0-preview-29587976",
  "@metamask-previews/accounts-controller": "34.0.0-preview-29587976",
  "@metamask-previews/address-book-controller": "7.0.0-preview-29587976",
  "@metamask-previews/analytics-controller": "0.0.0-preview-29587976",
  "@metamask-previews/announcement-controller": "8.0.0-preview-29587976",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-29587976",
  "@metamask-previews/approval-controller": "8.0.0-preview-29587976",
  "@metamask-previews/assets-controllers": "88.0.0-preview-29587976",
  "@metamask-previews/base-controller": "9.0.0-preview-29587976",
  "@metamask-previews/bridge-controller": "60.0.0-preview-29587976",
  "@metamask-previews/bridge-status-controller": "60.0.0-preview-29587976",
  "@metamask-previews/build-utils": "3.0.4-preview-29587976",
  "@metamask-previews/chain-agnostic-permission": "1.2.2-preview-29587976",
  "@metamask-previews/claims-controller": "0.2.0-preview-29587976",
  "@metamask-previews/composable-controller": "12.0.0-preview-29587976",
  "@metamask-previews/controller-utils": "11.15.0-preview-29587976",
  "@metamask-previews/core-backend": "4.0.0-preview-29587976",
  "@metamask-previews/delegation-controller": "1.0.0-preview-29587976",
  "@metamask-previews/earn-controller": "10.0.0-preview-29587976",
  "@metamask-previews/eip-5792-middleware": "2.0.0-preview-29587976",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-29587976",
  "@metamask-previews/eip1193-permission-middleware": "1.0.2-preview-29587976",
  "@metamask-previews/ens-controller": "18.0.0-preview-29587976",
  "@metamask-previews/error-reporting-service": "3.0.0-preview-29587976",
  "@metamask-previews/eth-block-tracker": "14.0.0-preview-29587976",
  "@metamask-previews/eth-json-rpc-middleware": "21.0.0-preview-29587976",
  "@metamask-previews/eth-json-rpc-provider": "5.0.1-preview-29587976",
  "@metamask-previews/foundryup": "1.0.1-preview-29587976",
  "@metamask-previews/gas-fee-controller": "25.0.0-preview-29587976",
  "@metamask-previews/gator-permissions-controller": "0.4.0-preview-29587976",
  "@metamask-previews/json-rpc-engine": "10.1.1-preview-29587976",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-29587976",
  "@metamask-previews/keyring-controller": "24.0.0-preview-29587976",
  "@metamask-previews/logging-controller": "7.0.0-preview-29587976",
  "@metamask-previews/message-manager": "14.0.0-preview-29587976",
  "@metamask-previews/messenger": "0.3.0-preview-29587976",
  "@metamask-previews/multichain-account-service": "3.0.0-preview-29587976",
  "@metamask-previews/multichain-api-middleware": "1.2.4-preview-29587976",
  "@metamask-previews/multichain-network-controller": "2.0.0-preview-29587976",
  "@metamask-previews/multichain-transactions-controller": "6.0.0-preview-29587976",
  "@metamask-previews/name-controller": "9.0.0-preview-29587976",
  "@metamask-previews/network-controller": "25.0.0-preview-29587976",
  "@metamask-previews/network-enablement-controller": "3.1.0-preview-29587976",
  "@metamask-previews/notification-services-controller": "19.0.0-preview-29587976",
  "@metamask-previews/permission-controller": "12.1.0-preview-29587976",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-29587976",
  "@metamask-previews/phishing-controller": "15.0.0-preview-29587976",
  "@metamask-previews/polling-controller": "15.0.0-preview-29587976",
  "@metamask-previews/preferences-controller": "21.0.0-preview-29587976",
  "@metamask-previews/profile-sync-controller": "26.0.0-preview-29587976",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-29587976",
  "@metamask-previews/remote-feature-flag-controller": "2.0.0-preview-29587976",
  "@metamask-previews/sample-controllers": "3.0.0-preview-29587976",
  "@metamask-previews/seedless-onboarding-controller": "6.1.0-preview-29587976",
  "@metamask-previews/selected-network-controller": "25.0.0-preview-29587976",
  "@metamask-previews/shield-controller": "2.0.0-preview-29587976",
  "@metamask-previews/signature-controller": "36.0.0-preview-29587976",
  "@metamask-previews/subscription-controller": "3.3.0-preview-29587976",
  "@metamask-previews/token-search-discovery-controller": "4.0.0-preview-29587976",
  "@metamask-previews/transaction-controller": "61.1.0-preview-29587976",
  "@metamask-previews/transaction-pay-controller": "4.0.0-preview-29587976",
  "@metamask-previews/user-operation-controller": "40.0.0-preview-29587976"
}

@chaitanyapotti chaitanyapotti merged commit a24e3b3 into main Nov 11, 2025
271 checks passed
@chaitanyapotti chaitanyapotti deleted the feat/subscription-cohort-gating branch November 11, 2025 12:59
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.

4 participants