Skip to content

feat(core-backend): add ramps activity service - #10304

Open
amitabh94 wants to merge 9 commits into
mainfrom
feat/ramps-activity-service
Open

amitabh94 wants to merge 9 commits into
mainfrom
feat/ramps-activity-service

Conversation

@amitabh94

Copy link
Copy Markdown
Contributor

Explanation

Adds RampsActivityService to @metamask/core-backend as the shared Mobile/Extension adapter for Gateway ramps lifecycle signals.

The service:

  • subscribes to ramps-activity.v1.<profileId> through BackendWebSocketService
  • derives the private channel from AuthenticationController:getSessionProfile
  • validates and minimizes the event envelope before publishing RampsActivityService:eventReceived
  • resubscribes after reconnect, profile sign-in changes, and keyring unlock
  • owns no ramps domain state and performs no REST requests

RampsController remains the domain owner and treats these events as refresh signals; GET remains authoritative. Keeping socket lifecycle in core-backend avoids duplicating reconnect/profile logic in Mobile and Extension.

References

Testing

  • yarn workspace @metamask/core-backend run jest --no-coverage src/ws/RampsActivityService.test.ts — 35 passed
  • yarn workspace @metamask/core-backend run test — passed; RampsActivityService at 100% statements/branches/functions/lines
  • yarn workspace @metamask/core-backend run build — passed
  • yarn workspace @metamask/core-backend run changelog:validate — passed
  • Full pre-push yarn lint — passed under Node 22.15.1

The monorepo-wide yarn build reaches an unrelated existing error in MultichainAccountWallet.ts (in-progress:delete-accounts); the changed package builds successfully.

Made with Cursor

amitabh94 and others added 7 commits September 20, 2026 03:16
Subscribe to autoramp-activity.v1 and emit eventReceived so clients can refresh authoritative NeoBank state.

Co-authored-by: Cursor <cursoragent@cursor.com>
Keep Autoramp messenger dependency unions package-internal so lint matches Core controller guidelines.

Co-authored-by: Cursor <cursoragent@cursor.com>
Subscribe to ramps-activity.v1 so Core matches the Gateway channel for all ramps lifecycle signals.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@amitabh94
amitabh94 requested review from a team as code owners September 20, 2026 08:58
@amitabh94
amitabh94 deployed to default-branch September 20, 2026 08:58 — with GitHub Actions Active
Co-authored-by: Cursor <cursoragent@cursor.com>

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 4d369a6. Configure here.

} catch (error) {
log('Unable to subscribe to ramps activity', { error });
}
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Concurrent subscribe can duplicate channels

Medium Severity

#subscribeToCurrentProfile and #replaceSubscription can run at the same time on init, sign-in, or unlock. BackendWebSocketService:connect publishes connectionStateChanged before it resolves, and the messenger does not wait for that handler. Both in-flight calls can pass channelHasSubscription and create two server subscriptions, so RampsActivityService:eventReceived fires twice for the rest of the session.

Additional Locations (2)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 4d369a6. Configure here.

@amitabh94

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-previews

@github-actions

Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@10.0.1-preview-9324e33
@metamask-previews/accounts-controller@40.0.0-preview-9324e33
@metamask-previews/address-book-controller@8.0.0-preview-9324e33
@metamask-previews/ai-controllers@2.0.0-preview-9324e33
@metamask-previews/analytics-controller@3.1.0-preview-9324e33
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-9324e33
@metamask-previews/announcement-controller@9.0.0-preview-9324e33
@metamask-previews/app-metadata-controller@3.0.0-preview-9324e33
@metamask-previews/approval-controller@10.0.0-preview-9324e33
@metamask-previews/assets-controller@16.1.0-preview-9324e33
@metamask-previews/assets-controllers@112.0.2-preview-9324e33
@metamask-previews/authenticated-user-storage@4.0.0-preview-9324e33
@metamask-previews/base-controller@10.0.0-preview-9324e33
@metamask-previews/base-data-service@2.0.0-preview-9324e33
@metamask-previews/bitcoin-regtest-up@2.0.0-preview-9324e33
@metamask-previews/bridge-controller@81.2.0-preview-9324e33
@metamask-previews/bridge-status-controller@76.3.0-preview-9324e33
@metamask-previews/build-utils@4.0.0-preview-9324e33
@metamask-previews/chain-agnostic-permission@2.0.0-preview-9324e33
@metamask-previews/chomp-api-service@5.0.0-preview-9324e33
@metamask-previews/claims-controller@1.0.1-preview-9324e33
@metamask-previews/client-controller@2.0.0-preview-9324e33
@metamask-previews/client-utils@3.0.2-preview-9324e33
@metamask-previews/compliance-controller@3.0.0-preview-9324e33
@metamask-previews/composable-controller@13.0.0-preview-9324e33
@metamask-previews/config-registry-controller@4.0.0-preview-9324e33
@metamask-previews/connectivity-controller@1.0.0-preview-9324e33
@metamask-previews/controller-utils@13.0.0-preview-9324e33
@metamask-previews/core-backend@11.0.0-preview-9324e33
@metamask-previews/cryptography@0.0.0-preview-9324e33
@metamask-previews/delegation-controller@4.0.0-preview-9324e33
@metamask-previews/earn-controller@13.0.0-preview-9324e33
@metamask-previews/eip-5792-middleware@4.0.0-preview-9324e33
@metamask-previews/eip-7702-internal-rpc-middleware@1.0.0-preview-9324e33
@metamask-previews/eip1193-permission-middleware@3.0.0-preview-9324e33
@metamask-previews/eth-block-tracker@16.0.0-preview-9324e33
@metamask-previews/eth-json-rpc-middleware@25.0.0-preview-9324e33
@metamask-previews/eth-json-rpc-provider@7.0.0-preview-9324e33
@metamask-previews/foundryup@2.0.0-preview-9324e33
@metamask-previews/gas-fee-controller@27.0.0-preview-9324e33
@metamask-previews/gator-permissions-controller@6.0.0-preview-9324e33
@metamask-previews/geolocation-controller@2.0.0-preview-9324e33
@metamask-previews/java-tron-up@2.0.0-preview-9324e33
@metamask-previews/json-rpc-engine@11.0.0-preview-9324e33
@metamask-previews/json-rpc-middleware-stream@9.0.0-preview-9324e33
@metamask-previews/keyring-controller@28.0.0-preview-9324e33
@metamask-previews/kyc-controller@0.4.0-preview-9324e33
@metamask-previews/local-node-utils@2.0.0-preview-9324e33
@metamask-previews/logging-controller@10.0.0-preview-9324e33
@metamask-previews/message-manager@15.0.0-preview-9324e33
@metamask-previews/messenger@3.0.0-preview-9324e33
@metamask-previews/messenger-cli@1.0.0-preview-9324e33
@metamask-previews/money-account-api-data-service@1.0.0-preview-9324e33
@metamask-previews/money-account-balance-service@3.0.0-preview-9324e33
@metamask-previews/money-account-controller@2.0.0-preview-9324e33
@metamask-previews/money-account-upgrade-controller@5.0.0-preview-9324e33
@metamask-previews/money-account-utils@2.0.0-preview-9324e33
@metamask-previews/multichain-account-service@14.0.0-preview-9324e33
@metamask-previews/multichain-api-middleware@5.0.0-preview-9324e33
@metamask-previews/multichain-network-controller@4.0.0-preview-9324e33
@metamask-previews/multichain-transactions-controller@8.0.0-preview-9324e33
@metamask-previews/name-controller@10.0.0-preview-9324e33
@metamask-previews/network-connection-banner-controller@1.0.0-preview-9324e33
@metamask-previews/network-controller@37.0.0-preview-9324e33
@metamask-previews/network-enablement-controller@7.0.0-preview-9324e33
@metamask-previews/notification-services-controller@29.0.0-preview-9324e33
@metamask-previews/passkey-controller@4.0.0-preview-9324e33
@metamask-previews/permission-controller@14.0.0-preview-9324e33
@metamask-previews/permission-log-controller@6.0.0-preview-9324e33
@metamask-previews/perps-controller@17.2.0-preview-9324e33
@metamask-previews/phishing-controller@18.1.0-preview-9324e33
@metamask-previews/platform-api-docs@0.2.1-preview-9324e33
@metamask-previews/polling-controller@17.0.0-preview-9324e33
@metamask-previews/preferences-controller@24.0.0-preview-9324e33
@metamask-previews/profile-metrics-controller@5.1.0-preview-9324e33
@metamask-previews/profile-sync-controller@32.1.1-preview-9324e33
@metamask-previews/ramps-controller@23.0.0-preview-9324e33
@metamask-previews/rate-limit-controller@8.0.0-preview-9324e33
@metamask-previews/react-data-query@2.0.0-preview-9324e33
@metamask-previews/remote-feature-flag-controller@7.0.0-preview-9324e33
@metamask-previews/sample-controllers@6.0.0-preview-9324e33
@metamask-previews/seedless-onboarding-controller@11.0.0-preview-9324e33
@metamask-previews/selected-network-controller@27.0.0-preview-9324e33
@metamask-previews/sentinel-api-service@2.0.0-preview-9324e33
@metamask-previews/shield-controller@7.0.1-preview-9324e33
@metamask-previews/signature-controller@40.0.0-preview-9324e33
@metamask-previews/smart-transactions-controller@27.0.1-preview-9324e33
@metamask-previews/snap-account-service@3.0.0-preview-9324e33
@metamask-previews/social-controllers@3.0.1-preview-9324e33
@metamask-previews/solana-test-validator-up@2.0.0-preview-9324e33
@metamask-previews/stellar-quickstart-up@0.0.0-preview-9324e33
@metamask-previews/storage-service@2.0.0-preview-9324e33
@metamask-previews/subscription-controller@9.1.0-preview-9324e33
@metamask-previews/transaction-controller@70.1.0-preview-9324e33
@metamask-previews/transaction-pay-controller@29.0.0-preview-9324e33
@metamask-previews/user-operation-controller@42.0.0-preview-9324e33
@metamask-previews/utils@12.0.0-preview-9324e33
@metamask-previews/wallet@14.0.0-preview-9324e33
@metamask-previews/wallet-cli@0.0.0-preview-9324e33

Co-authored-by: Cursor <cursoragent@cursor.com>
@amitabh94

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-previews

@github-actions

Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@10.0.1-preview-d1cca62
@metamask-previews/accounts-controller@40.0.0-preview-d1cca62
@metamask-previews/address-book-controller@8.0.0-preview-d1cca62
@metamask-previews/ai-controllers@2.0.0-preview-d1cca62
@metamask-previews/analytics-controller@3.1.0-preview-d1cca62
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-d1cca62
@metamask-previews/announcement-controller@9.0.0-preview-d1cca62
@metamask-previews/app-metadata-controller@3.0.0-preview-d1cca62
@metamask-previews/approval-controller@10.0.0-preview-d1cca62
@metamask-previews/assets-controller@16.1.0-preview-d1cca62
@metamask-previews/assets-controllers@112.0.2-preview-d1cca62
@metamask-previews/authenticated-user-storage@4.0.0-preview-d1cca62
@metamask-previews/base-controller@10.0.0-preview-d1cca62
@metamask-previews/base-data-service@2.0.0-preview-d1cca62
@metamask-previews/bitcoin-regtest-up@2.0.0-preview-d1cca62
@metamask-previews/bridge-controller@81.2.0-preview-d1cca62
@metamask-previews/bridge-status-controller@76.3.0-preview-d1cca62
@metamask-previews/build-utils@4.0.0-preview-d1cca62
@metamask-previews/chain-agnostic-permission@2.0.0-preview-d1cca62
@metamask-previews/chomp-api-service@5.0.0-preview-d1cca62
@metamask-previews/claims-controller@1.0.1-preview-d1cca62
@metamask-previews/client-controller@2.0.0-preview-d1cca62
@metamask-previews/client-utils@3.0.2-preview-d1cca62
@metamask-previews/compliance-controller@3.0.0-preview-d1cca62
@metamask-previews/composable-controller@13.0.0-preview-d1cca62
@metamask-previews/config-registry-controller@4.0.0-preview-d1cca62
@metamask-previews/connectivity-controller@1.0.0-preview-d1cca62
@metamask-previews/controller-utils@13.0.0-preview-d1cca62
@metamask-previews/core-backend@11.0.0-preview-d1cca62
@metamask-previews/cryptography@0.0.0-preview-d1cca62
@metamask-previews/delegation-controller@4.0.0-preview-d1cca62
@metamask-previews/earn-controller@13.0.0-preview-d1cca62
@metamask-previews/eip-5792-middleware@4.0.0-preview-d1cca62
@metamask-previews/eip-7702-internal-rpc-middleware@1.0.0-preview-d1cca62
@metamask-previews/eip1193-permission-middleware@3.0.0-preview-d1cca62
@metamask-previews/eth-block-tracker@16.0.0-preview-d1cca62
@metamask-previews/eth-json-rpc-middleware@25.0.0-preview-d1cca62
@metamask-previews/eth-json-rpc-provider@7.0.0-preview-d1cca62
@metamask-previews/foundryup@2.0.0-preview-d1cca62
@metamask-previews/gas-fee-controller@27.0.0-preview-d1cca62
@metamask-previews/gator-permissions-controller@6.0.0-preview-d1cca62
@metamask-previews/geolocation-controller@2.0.0-preview-d1cca62
@metamask-previews/java-tron-up@2.0.0-preview-d1cca62
@metamask-previews/json-rpc-engine@11.0.0-preview-d1cca62
@metamask-previews/json-rpc-middleware-stream@9.0.0-preview-d1cca62
@metamask-previews/keyring-controller@28.0.0-preview-d1cca62
@metamask-previews/kyc-controller@0.4.0-preview-d1cca62
@metamask-previews/local-node-utils@2.0.0-preview-d1cca62
@metamask-previews/logging-controller@10.0.0-preview-d1cca62
@metamask-previews/message-manager@15.0.0-preview-d1cca62
@metamask-previews/messenger@3.0.0-preview-d1cca62
@metamask-previews/messenger-cli@1.0.0-preview-d1cca62
@metamask-previews/money-account-api-data-service@1.0.0-preview-d1cca62
@metamask-previews/money-account-balance-service@3.0.0-preview-d1cca62
@metamask-previews/money-account-controller@2.0.0-preview-d1cca62
@metamask-previews/money-account-upgrade-controller@5.0.0-preview-d1cca62
@metamask-previews/money-account-utils@2.0.0-preview-d1cca62
@metamask-previews/multichain-account-service@14.0.0-preview-d1cca62
@metamask-previews/multichain-api-middleware@5.0.0-preview-d1cca62
@metamask-previews/multichain-network-controller@4.0.0-preview-d1cca62
@metamask-previews/multichain-transactions-controller@8.0.0-preview-d1cca62
@metamask-previews/name-controller@10.0.0-preview-d1cca62
@metamask-previews/network-connection-banner-controller@1.0.0-preview-d1cca62
@metamask-previews/network-controller@37.0.0-preview-d1cca62
@metamask-previews/network-enablement-controller@7.0.0-preview-d1cca62
@metamask-previews/notification-services-controller@29.0.0-preview-d1cca62
@metamask-previews/passkey-controller@4.0.0-preview-d1cca62
@metamask-previews/permission-controller@14.0.0-preview-d1cca62
@metamask-previews/permission-log-controller@6.0.0-preview-d1cca62
@metamask-previews/perps-controller@17.2.0-preview-d1cca62
@metamask-previews/phishing-controller@18.1.0-preview-d1cca62
@metamask-previews/platform-api-docs@0.2.1-preview-d1cca62
@metamask-previews/polling-controller@17.0.0-preview-d1cca62
@metamask-previews/preferences-controller@24.0.0-preview-d1cca62
@metamask-previews/profile-metrics-controller@5.1.0-preview-d1cca62
@metamask-previews/profile-sync-controller@32.1.1-preview-d1cca62
@metamask-previews/ramps-controller@23.0.0-preview-d1cca62
@metamask-previews/rate-limit-controller@8.0.0-preview-d1cca62
@metamask-previews/react-data-query@2.0.0-preview-d1cca62
@metamask-previews/remote-feature-flag-controller@7.0.0-preview-d1cca62
@metamask-previews/sample-controllers@6.0.0-preview-d1cca62
@metamask-previews/seedless-onboarding-controller@11.0.0-preview-d1cca62
@metamask-previews/selected-network-controller@27.0.0-preview-d1cca62
@metamask-previews/sentinel-api-service@2.0.0-preview-d1cca62
@metamask-previews/shield-controller@7.0.1-preview-d1cca62
@metamask-previews/signature-controller@40.0.0-preview-d1cca62
@metamask-previews/smart-transactions-controller@27.0.1-preview-d1cca62
@metamask-previews/snap-account-service@3.0.0-preview-d1cca62
@metamask-previews/social-controllers@3.0.1-preview-d1cca62
@metamask-previews/solana-test-validator-up@2.0.0-preview-d1cca62
@metamask-previews/stellar-quickstart-up@0.0.0-preview-d1cca62
@metamask-previews/storage-service@2.0.0-preview-d1cca62
@metamask-previews/subscription-controller@9.1.0-preview-d1cca62
@metamask-previews/transaction-controller@70.1.0-preview-d1cca62
@metamask-previews/transaction-pay-controller@29.0.0-preview-d1cca62
@metamask-previews/user-operation-controller@42.0.0-preview-d1cca62
@metamask-previews/utils@12.0.0-preview-d1cca62
@metamask-previews/wallet@14.0.0-preview-d1cca62
@metamask-previews/wallet-cli@0.0.0-preview-d1cca62

@amitabh94

amitabh94 commented Sep 20, 2026

Copy link
Copy Markdown
Contributor Author

Mobile consumer PR: MetaMask/metamask-mobile#36526 (uses @metamask-previews/core-backend@11.0.0-preview-d1cca62).

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