Skip to content

chore: add OHLCVService for real-time candlestick WebSocket streaming#8695

Open
sahar-fehri wants to merge 29 commits into
mainfrom
chore/add-ohlcv-websocket
Open

chore: add OHLCVService for real-time candlestick WebSocket streaming#8695
sahar-fehri wants to merge 29 commits into
mainfrom
chore/add-ohlcv-websocket

Conversation

@sahar-fehri
Copy link
Copy Markdown
Contributor

@sahar-fehri sahar-fehri commented May 5, 2026

Explanation

Architecture Overview

┌─────────────────┐        messenger         ┌──────────────────────────┐
│   OHLCVService   │ ─── calls actions ────► │  BackendWebSocketService  │
│  (domain logic)  │                          │  (raw WS connection)      │
│                  │ ◄── listens to events ── │                           │
└────────┬────────┘                           └──────────┬───────────────┘
         │                                               │
    publishes events                              actual WebSocket
    to UI consumers                          (connect, auth, reconnect,
                                              heartbeat, JSON framing)
         │
         ▼
┌──────────────────┐
│   Mobile UI       │
│  (React hooks)    │
│  useOHLCVRealtime │
└──────────────────┘

What

  • Add OHLCVService for real-time OHLCV (candlestick) data streaming via the backend WebSocket gateway
  • Move all WebSocket-related files (BackendWebSocketService, AccountActivityService) into a new src/ws/ directory per code review feedback

Why

  • Enable real-time chart updates on the Token Details screen without polling
  • Reduce API load by replacing periodic HTTP calls with persistent WebSocket subscriptions
  • Organize WebSocket code into a dedicated ws/ folder for better discoverability

New files

  • src/ws/ohlcv/OHLCVService.ts — main service with subscribe/unsubscribe semantics, reference counting, grace-period unsubscribe, idempotency checks, chain-status forwarding, and automatic resubscription on reconnect
  • src/ws/ohlcv/OHLCVService.test.ts — 22 unit tests covering all paths (100% branch coverage)
  • src/ws/ohlcv/OHLCVService-method-action-types.ts — auto-generated messenger action types
  • src/ws/ohlcv/types.tsOHLCVBar and OHLCVSubscriptionOptions types
  • src/ws/ohlcv/index.ts — barrel exports

Modified files

  • src/index.ts — added exports for OHLCVService, its types, and allowed actions/events; updated import paths to ./ws/
  • eslint-suppressions.json — updated paths for moved files, added suppressions for new test file
  • CHANGELOG.md — documented new service and exports

Moved files (no logic changes)

  • src/BackendWebSocketService.tssrc/ws/BackendWebSocketService.ts
  • src/BackendWebSocketService.test.tssrc/ws/BackendWebSocketService.test.ts
  • src/BackendWebSocketService-method-action-types.tssrc/ws/BackendWebSocketService-method-action-types.ts
  • src/AccountActivityService.tssrc/ws/AccountActivityService.ts
  • src/AccountActivityService.test.tssrc/ws/AccountActivityService.test.ts
  • src/AccountActivityService-method-action-types.tssrc/ws/AccountActivityService-method-action-types.ts
  • Only import path updates (./logger../logger, ./types../types, test helper paths)

Key design decisions

  • UI-driven lifecycle — unlike AccountActivityService (auto-subscribes on account change), OHLCVService exposes subscribe()/unsubscribe() called by the UI when the chart mounts/unmounts
  • Reference counting — multiple UI consumers subscribing to the same assetId/interval/currency share one WebSocket subscription
  • Grace period (3s) — when all consumers unsubscribe, actual WS unsubscribe is delayed 3 seconds to absorb rapid navigation (Token A → Token B → Token A)
  • Idempotency — uses channelHasSubscription before subscribing; duplicate calls are no-ops (React Strict Mode safe)
  • Chain status — listens to system-notifications.v1.market-data.v1 (auto-subscribed by server) and publishes OHLCVService:chainStatusChanged
  • Disconnect handling — on WebSocket disconnect, publishes chainStatusChanged { status: 'down' } for all tracked chains, triggering UI polling fallback
  • Reconnect — resubscribes all active channels when WebSocket reconnects (no sessionId needed for OHLCV; UI polling fallback covers the gap)
  • init() method — system notification callback registered in init() (not constructor) to comply with messenger-in-constructor lint rule

Events published

  • OHLCVService:barUpdated{ channel, bar: OHLCVBar } — new candle data from WebSocket
  • OHLCVService:chainStatusChanged{ chainIds, status, timestamp? } — chain up/down (server notification or WS disconnect)
  • OHLCVService:subscriptionError{ channel, error, operation } — subscribe or unsubscribe failure

References

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
  • I've introduced breaking changes in this PR and have prepared draft pull requests for clients and consumer packages to resolve them

Note

Medium Risk
Adds a new WebSocket-based OHLCV streaming service with ref-counting, timers, and reconnection logic, which could affect subscription lifecycle and reconnect behavior if misused. Also moves existing WebSocket services into src/ws/, so any missed import/export updates could break consumers.

Overview
Adds real-time OHLCV candlestick streaming via WebSocket. Introduces OHLCVService (plus types, messenger action types, and exports) that wraps BackendWebSocketService to provide subscribe/unsubscribe semantics for market-data.v1 channels, including reference counting, a 3s grace-period unsubscribe, idempotent subscribe checks, reconnect resubscription, chain up/down forwarding from system notifications, and error reporting via OHLCVService:subscriptionError.

Reorganizes WebSocket code and public exports. Moves BackendWebSocketService and AccountActivityService into src/ws/ and updates src/index.ts exports accordingly; adds async-mutex as a new dependency for concurrency control; and updates the changelog and ESLint suppressions for the new paths/tests.

Reviewed by Cursor Bugbot for commit 150787a. Bugbot is set up for automated code reviews on this repo. Configure here.

@sahar-fehri sahar-fehri changed the title chore: add ohlcv websocket chore: add OHLCVService for real-time candlestick WebSocket streaming May 5, 2026
@sahar-fehri sahar-fehri force-pushed the chore/add-ohlcv-websocket branch from 2d69c0f to bd0d4d2 Compare May 5, 2026 13:04
@sahar-fehri
Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 5, 2026

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@7.2.0-preview-bd0d4d2e9
@metamask-previews/accounts-controller@38.0.0-preview-bd0d4d2e9
@metamask-previews/address-book-controller@7.1.1-preview-bd0d4d2e9
@metamask-previews/ai-controllers@0.6.3-preview-bd0d4d2e9
@metamask-previews/analytics-controller@1.0.1-preview-bd0d4d2e9
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-bd0d4d2e9
@metamask-previews/announcement-controller@8.1.0-preview-bd0d4d2e9
@metamask-previews/app-metadata-controller@2.0.1-preview-bd0d4d2e9
@metamask-previews/approval-controller@9.0.1-preview-bd0d4d2e9
@metamask-previews/assets-controller@6.3.0-preview-bd0d4d2e9
@metamask-previews/assets-controllers@105.1.0-preview-bd0d4d2e9
@metamask-previews/authenticated-user-storage@1.0.0-preview-bd0d4d2e9
@metamask-previews/base-controller@9.1.0-preview-bd0d4d2e9
@metamask-previews/base-data-service@0.1.1-preview-bd0d4d2e9
@metamask-previews/bridge-controller@71.0.0-preview-bd0d4d2e9
@metamask-previews/bridge-status-controller@71.1.0-preview-bd0d4d2e9
@metamask-previews/build-utils@3.0.4-preview-bd0d4d2e9
@metamask-previews/chain-agnostic-permission@1.5.0-preview-bd0d4d2e9
@metamask-previews/chomp-api-service@3.0.0-preview-bd0d4d2e9
@metamask-previews/claims-controller@0.5.0-preview-bd0d4d2e9
@metamask-previews/client-controller@1.0.1-preview-bd0d4d2e9
@metamask-previews/compliance-controller@2.0.0-preview-bd0d4d2e9
@metamask-previews/composable-controller@12.0.1-preview-bd0d4d2e9
@metamask-previews/config-registry-controller@0.3.0-preview-bd0d4d2e9
@metamask-previews/connectivity-controller@0.2.0-preview-bd0d4d2e9
@metamask-previews/controller-utils@11.20.0-preview-bd0d4d2e9
@metamask-previews/core-backend@6.2.1-preview-bd0d4d2e9
@metamask-previews/delegation-controller@3.0.0-preview-bd0d4d2e9
@metamask-previews/earn-controller@12.1.0-preview-bd0d4d2e9
@metamask-previews/eip-5792-middleware@3.0.3-preview-bd0d4d2e9
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.0-preview-bd0d4d2e9
@metamask-previews/eip1193-permission-middleware@2.0.0-preview-bd0d4d2e9
@metamask-previews/ens-controller@19.1.1-preview-bd0d4d2e9
@metamask-previews/eth-block-tracker@15.0.1-preview-bd0d4d2e9
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-bd0d4d2e9
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-bd0d4d2e9
@metamask-previews/foundryup@1.0.1-preview-bd0d4d2e9
@metamask-previews/gas-fee-controller@26.1.1-preview-bd0d4d2e9
@metamask-previews/gator-permissions-controller@4.0.0-preview-bd0d4d2e9
@metamask-previews/geolocation-controller@0.1.2-preview-bd0d4d2e9
@metamask-previews/json-rpc-engine@10.3.0-preview-bd0d4d2e9
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-bd0d4d2e9
@metamask-previews/keyring-controller@25.4.0-preview-bd0d4d2e9
@metamask-previews/logging-controller@8.0.1-preview-bd0d4d2e9
@metamask-previews/message-manager@14.1.1-preview-bd0d4d2e9
@metamask-previews/messenger@1.2.0-preview-bd0d4d2e9
@metamask-previews/messenger-cli@0.2.0-preview-bd0d4d2e9
@metamask-previews/money-account-balance-service@0.2.0-preview-bd0d4d2e9
@metamask-previews/money-account-controller@0.2.0-preview-bd0d4d2e9
@metamask-previews/money-account-upgrade-controller@1.3.0-preview-bd0d4d2e9
@metamask-previews/multichain-account-service@8.0.1-preview-bd0d4d2e9
@metamask-previews/multichain-api-middleware@3.0.0-preview-bd0d4d2e9
@metamask-previews/multichain-network-controller@3.1.0-preview-bd0d4d2e9
@metamask-previews/multichain-transactions-controller@7.1.0-preview-bd0d4d2e9
@metamask-previews/name-controller@9.1.1-preview-bd0d4d2e9
@metamask-previews/network-controller@30.1.0-preview-bd0d4d2e9
@metamask-previews/network-enablement-controller@5.1.0-preview-bd0d4d2e9
@metamask-previews/notification-services-controller@23.1.0-preview-bd0d4d2e9
@metamask-previews/passkey-controller@2.0.0-preview-bd0d4d2e9
@metamask-previews/permission-controller@13.0.0-preview-bd0d4d2e9
@metamask-previews/permission-log-controller@5.1.0-preview-bd0d4d2e9
@metamask-previews/perps-controller@5.0.0-preview-bd0d4d2e9
@metamask-previews/phishing-controller@17.1.1-preview-bd0d4d2e9
@metamask-previews/polling-controller@16.0.4-preview-bd0d4d2e9
@metamask-previews/preferences-controller@23.1.0-preview-bd0d4d2e9
@metamask-previews/profile-metrics-controller@3.1.3-preview-bd0d4d2e9
@metamask-previews/profile-sync-controller@28.0.2-preview-bd0d4d2e9
@metamask-previews/ramps-controller@13.2.0-preview-bd0d4d2e9
@metamask-previews/rate-limit-controller@7.0.1-preview-bd0d4d2e9
@metamask-previews/react-data-query@0.2.0-preview-bd0d4d2e9
@metamask-previews/remote-feature-flag-controller@4.2.0-preview-bd0d4d2e9
@metamask-previews/sample-controllers@4.0.4-preview-bd0d4d2e9
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-bd0d4d2e9
@metamask-previews/selected-network-controller@26.1.1-preview-bd0d4d2e9
@metamask-previews/shield-controller@5.1.1-preview-bd0d4d2e9
@metamask-previews/signature-controller@39.2.0-preview-bd0d4d2e9
@metamask-previews/snap-account-service@0.0.0-preview-bd0d4d2e9
@metamask-previews/social-controllers@2.2.0-preview-bd0d4d2e9
@metamask-previews/storage-service@1.0.1-preview-bd0d4d2e9
@metamask-previews/subscription-controller@6.1.2-preview-bd0d4d2e9
@metamask-previews/transaction-controller@65.0.0-preview-bd0d4d2e9
@metamask-previews/transaction-pay-controller@21.0.0-preview-bd0d4d2e9
@metamask-previews/user-operation-controller@41.2.0-preview-bd0d4d2e9

@sahar-fehri
Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@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@7.3.0-preview-3569042f0
@metamask-previews/accounts-controller@38.0.0-preview-3569042f0
@metamask-previews/address-book-controller@7.1.1-preview-3569042f0
@metamask-previews/ai-controllers@0.6.3-preview-3569042f0
@metamask-previews/analytics-controller@1.0.1-preview-3569042f0
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-3569042f0
@metamask-previews/announcement-controller@8.1.0-preview-3569042f0
@metamask-previews/app-metadata-controller@2.0.1-preview-3569042f0
@metamask-previews/approval-controller@9.0.1-preview-3569042f0
@metamask-previews/assets-controller@7.0.0-preview-3569042f0
@metamask-previews/assets-controllers@106.0.0-preview-3569042f0
@metamask-previews/authenticated-user-storage@1.0.0-preview-3569042f0
@metamask-previews/base-controller@9.1.0-preview-3569042f0
@metamask-previews/base-data-service@0.1.1-preview-3569042f0
@metamask-previews/bridge-controller@72.0.1-preview-3569042f0
@metamask-previews/bridge-status-controller@71.1.1-preview-3569042f0
@metamask-previews/build-utils@3.0.4-preview-3569042f0
@metamask-previews/chain-agnostic-permission@1.6.0-preview-3569042f0
@metamask-previews/chomp-api-service@3.0.0-preview-3569042f0
@metamask-previews/claims-controller@0.5.0-preview-3569042f0
@metamask-previews/client-controller@1.0.1-preview-3569042f0
@metamask-previews/compliance-controller@2.0.0-preview-3569042f0
@metamask-previews/composable-controller@12.0.1-preview-3569042f0
@metamask-previews/config-registry-controller@0.3.0-preview-3569042f0
@metamask-previews/connectivity-controller@0.2.0-preview-3569042f0
@metamask-previews/controller-utils@11.20.0-preview-3569042f0
@metamask-previews/core-backend@6.2.1-preview-3569042f0
@metamask-previews/delegation-controller@3.0.0-preview-3569042f0
@metamask-previews/earn-controller@12.1.0-preview-3569042f0
@metamask-previews/eip-5792-middleware@3.0.3-preview-3569042f0
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.0-preview-3569042f0
@metamask-previews/eip1193-permission-middleware@2.0.0-preview-3569042f0
@metamask-previews/ens-controller@19.1.1-preview-3569042f0
@metamask-previews/eth-block-tracker@15.0.1-preview-3569042f0
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-3569042f0
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-3569042f0
@metamask-previews/foundryup@1.0.1-preview-3569042f0
@metamask-previews/gas-fee-controller@26.2.0-preview-3569042f0
@metamask-previews/gator-permissions-controller@4.1.0-preview-3569042f0
@metamask-previews/geolocation-controller@0.1.2-preview-3569042f0
@metamask-previews/json-rpc-engine@10.5.0-preview-3569042f0
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-3569042f0
@metamask-previews/keyring-controller@25.5.0-preview-3569042f0
@metamask-previews/logging-controller@8.0.1-preview-3569042f0
@metamask-previews/message-manager@14.1.1-preview-3569042f0
@metamask-previews/messenger@1.2.0-preview-3569042f0
@metamask-previews/messenger-cli@0.2.0-preview-3569042f0
@metamask-previews/money-account-balance-service@1.0.0-preview-3569042f0
@metamask-previews/money-account-controller@0.3.0-preview-3569042f0
@metamask-previews/money-account-upgrade-controller@1.3.1-preview-3569042f0
@metamask-previews/multichain-account-service@9.0.0-preview-3569042f0
@metamask-previews/multichain-api-middleware@3.1.0-preview-3569042f0
@metamask-previews/multichain-network-controller@3.1.0-preview-3569042f0
@metamask-previews/multichain-transactions-controller@7.1.0-preview-3569042f0
@metamask-previews/name-controller@9.1.1-preview-3569042f0
@metamask-previews/network-controller@30.1.0-preview-3569042f0
@metamask-previews/network-enablement-controller@5.1.0-preview-3569042f0
@metamask-previews/notification-services-controller@23.1.0-preview-3569042f0
@metamask-previews/passkey-controller@2.0.1-preview-3569042f0
@metamask-previews/permission-controller@13.1.0-preview-3569042f0
@metamask-previews/permission-log-controller@5.1.0-preview-3569042f0
@metamask-previews/perps-controller@6.0.0-preview-3569042f0
@metamask-previews/phishing-controller@17.1.1-preview-3569042f0
@metamask-previews/polling-controller@16.0.4-preview-3569042f0
@metamask-previews/preferences-controller@23.1.0-preview-3569042f0
@metamask-previews/profile-metrics-controller@3.1.3-preview-3569042f0
@metamask-previews/profile-sync-controller@28.0.2-preview-3569042f0
@metamask-previews/ramps-controller@13.3.0-preview-3569042f0
@metamask-previews/rate-limit-controller@7.0.1-preview-3569042f0
@metamask-previews/react-data-query@0.2.0-preview-3569042f0
@metamask-previews/remote-feature-flag-controller@4.2.0-preview-3569042f0
@metamask-previews/sample-controllers@4.0.4-preview-3569042f0
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-3569042f0
@metamask-previews/selected-network-controller@26.1.1-preview-3569042f0
@metamask-previews/shield-controller@5.1.1-preview-3569042f0
@metamask-previews/signature-controller@39.2.0-preview-3569042f0
@metamask-previews/snap-account-service@0.0.0-preview-3569042f0
@metamask-previews/social-controllers@2.2.0-preview-3569042f0
@metamask-previews/storage-service@1.0.1-preview-3569042f0
@metamask-previews/subscription-controller@6.1.2-preview-3569042f0
@metamask-previews/transaction-controller@65.2.0-preview-3569042f0
@metamask-previews/transaction-pay-controller@22.1.0-preview-3569042f0
@metamask-previews/user-operation-controller@41.2.0-preview-3569042f0

@sahar-fehri
Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@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@7.3.0-preview-181ae75e1
@metamask-previews/accounts-controller@38.0.0-preview-181ae75e1
@metamask-previews/address-book-controller@7.1.1-preview-181ae75e1
@metamask-previews/ai-controllers@0.6.3-preview-181ae75e1
@metamask-previews/analytics-controller@1.0.1-preview-181ae75e1
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-181ae75e1
@metamask-previews/announcement-controller@8.1.0-preview-181ae75e1
@metamask-previews/app-metadata-controller@2.0.1-preview-181ae75e1
@metamask-previews/approval-controller@9.0.1-preview-181ae75e1
@metamask-previews/assets-controller@7.0.0-preview-181ae75e1
@metamask-previews/assets-controllers@106.0.0-preview-181ae75e1
@metamask-previews/authenticated-user-storage@1.0.0-preview-181ae75e1
@metamask-previews/base-controller@9.1.0-preview-181ae75e1
@metamask-previews/base-data-service@0.1.1-preview-181ae75e1
@metamask-previews/bridge-controller@72.0.1-preview-181ae75e1
@metamask-previews/bridge-status-controller@71.1.1-preview-181ae75e1
@metamask-previews/build-utils@3.0.4-preview-181ae75e1
@metamask-previews/chain-agnostic-permission@1.6.0-preview-181ae75e1
@metamask-previews/chomp-api-service@3.0.0-preview-181ae75e1
@metamask-previews/claims-controller@0.5.0-preview-181ae75e1
@metamask-previews/client-controller@1.0.1-preview-181ae75e1
@metamask-previews/compliance-controller@2.0.0-preview-181ae75e1
@metamask-previews/composable-controller@12.0.1-preview-181ae75e1
@metamask-previews/config-registry-controller@0.3.0-preview-181ae75e1
@metamask-previews/connectivity-controller@0.2.0-preview-181ae75e1
@metamask-previews/controller-utils@11.20.0-preview-181ae75e1
@metamask-previews/core-backend@6.2.1-preview-181ae75e1
@metamask-previews/delegation-controller@3.0.0-preview-181ae75e1
@metamask-previews/earn-controller@12.1.0-preview-181ae75e1
@metamask-previews/eip-5792-middleware@3.0.3-preview-181ae75e1
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.0-preview-181ae75e1
@metamask-previews/eip1193-permission-middleware@2.0.0-preview-181ae75e1
@metamask-previews/ens-controller@19.1.1-preview-181ae75e1
@metamask-previews/eth-block-tracker@15.0.1-preview-181ae75e1
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-181ae75e1
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-181ae75e1
@metamask-previews/foundryup@1.0.1-preview-181ae75e1
@metamask-previews/gas-fee-controller@26.2.0-preview-181ae75e1
@metamask-previews/gator-permissions-controller@4.1.0-preview-181ae75e1
@metamask-previews/geolocation-controller@0.1.2-preview-181ae75e1
@metamask-previews/json-rpc-engine@10.5.0-preview-181ae75e1
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-181ae75e1
@metamask-previews/keyring-controller@25.5.0-preview-181ae75e1
@metamask-previews/logging-controller@8.0.1-preview-181ae75e1
@metamask-previews/message-manager@14.1.1-preview-181ae75e1
@metamask-previews/messenger@1.2.0-preview-181ae75e1
@metamask-previews/messenger-cli@0.2.0-preview-181ae75e1
@metamask-previews/money-account-balance-service@1.0.0-preview-181ae75e1
@metamask-previews/money-account-controller@0.3.0-preview-181ae75e1
@metamask-previews/money-account-upgrade-controller@1.3.1-preview-181ae75e1
@metamask-previews/multichain-account-service@9.0.0-preview-181ae75e1
@metamask-previews/multichain-api-middleware@3.1.0-preview-181ae75e1
@metamask-previews/multichain-network-controller@3.1.0-preview-181ae75e1
@metamask-previews/multichain-transactions-controller@7.1.0-preview-181ae75e1
@metamask-previews/name-controller@9.1.1-preview-181ae75e1
@metamask-previews/network-controller@30.1.0-preview-181ae75e1
@metamask-previews/network-enablement-controller@5.1.0-preview-181ae75e1
@metamask-previews/notification-services-controller@23.1.0-preview-181ae75e1
@metamask-previews/passkey-controller@2.0.1-preview-181ae75e1
@metamask-previews/permission-controller@13.1.0-preview-181ae75e1
@metamask-previews/permission-log-controller@5.1.0-preview-181ae75e1
@metamask-previews/perps-controller@6.0.0-preview-181ae75e1
@metamask-previews/phishing-controller@17.1.1-preview-181ae75e1
@metamask-previews/polling-controller@16.0.4-preview-181ae75e1
@metamask-previews/preferences-controller@23.1.0-preview-181ae75e1
@metamask-previews/profile-metrics-controller@3.1.3-preview-181ae75e1
@metamask-previews/profile-sync-controller@28.0.2-preview-181ae75e1
@metamask-previews/ramps-controller@13.3.0-preview-181ae75e1
@metamask-previews/rate-limit-controller@7.0.1-preview-181ae75e1
@metamask-previews/react-data-query@0.2.0-preview-181ae75e1
@metamask-previews/remote-feature-flag-controller@4.2.0-preview-181ae75e1
@metamask-previews/sample-controllers@4.0.4-preview-181ae75e1
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-181ae75e1
@metamask-previews/selected-network-controller@26.1.1-preview-181ae75e1
@metamask-previews/shield-controller@5.1.1-preview-181ae75e1
@metamask-previews/signature-controller@39.2.0-preview-181ae75e1
@metamask-previews/snap-account-service@0.0.0-preview-181ae75e1
@metamask-previews/social-controllers@2.2.0-preview-181ae75e1
@metamask-previews/storage-service@1.0.1-preview-181ae75e1
@metamask-previews/subscription-controller@6.1.2-preview-181ae75e1
@metamask-previews/transaction-controller@65.2.0-preview-181ae75e1
@metamask-previews/transaction-pay-controller@22.1.0-preview-181ae75e1
@metamask-previews/user-operation-controller@41.2.0-preview-181ae75e1

@sahar-fehri
Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@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@7.3.0-preview-f3d53de3e
@metamask-previews/accounts-controller@38.1.0-preview-f3d53de3e
@metamask-previews/address-book-controller@7.1.2-preview-f3d53de3e
@metamask-previews/ai-controllers@0.6.3-preview-f3d53de3e
@metamask-previews/analytics-controller@1.0.1-preview-f3d53de3e
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-f3d53de3e
@metamask-previews/announcement-controller@8.1.0-preview-f3d53de3e
@metamask-previews/app-metadata-controller@2.0.1-preview-f3d53de3e
@metamask-previews/approval-controller@9.0.1-preview-f3d53de3e
@metamask-previews/assets-controller@7.0.1-preview-f3d53de3e
@metamask-previews/assets-controllers@106.0.1-preview-f3d53de3e
@metamask-previews/authenticated-user-storage@1.0.1-preview-f3d53de3e
@metamask-previews/base-controller@9.1.0-preview-f3d53de3e
@metamask-previews/base-data-service@0.1.2-preview-f3d53de3e
@metamask-previews/bridge-controller@72.0.2-preview-f3d53de3e
@metamask-previews/bridge-status-controller@71.1.2-preview-f3d53de3e
@metamask-previews/build-utils@3.0.4-preview-f3d53de3e
@metamask-previews/chain-agnostic-permission@1.6.1-preview-f3d53de3e
@metamask-previews/chomp-api-service@3.0.1-preview-f3d53de3e
@metamask-previews/claims-controller@0.5.1-preview-f3d53de3e
@metamask-previews/client-controller@1.0.1-preview-f3d53de3e
@metamask-previews/compliance-controller@2.0.1-preview-f3d53de3e
@metamask-previews/composable-controller@12.0.1-preview-f3d53de3e
@metamask-previews/config-registry-controller@0.3.1-preview-f3d53de3e
@metamask-previews/connectivity-controller@0.2.0-preview-f3d53de3e
@metamask-previews/controller-utils@12.0.0-preview-f3d53de3e
@metamask-previews/core-backend@6.2.2-preview-f3d53de3e
@metamask-previews/delegation-controller@3.0.0-preview-f3d53de3e
@metamask-previews/earn-controller@12.1.1-preview-f3d53de3e
@metamask-previews/eip-5792-middleware@3.0.3-preview-f3d53de3e
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-f3d53de3e
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-f3d53de3e
@metamask-previews/ens-controller@19.1.2-preview-f3d53de3e
@metamask-previews/eth-block-tracker@15.0.1-preview-f3d53de3e
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-f3d53de3e
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-f3d53de3e
@metamask-previews/foundryup@1.0.1-preview-f3d53de3e
@metamask-previews/gas-fee-controller@26.2.1-preview-f3d53de3e
@metamask-previews/gator-permissions-controller@4.1.1-preview-f3d53de3e
@metamask-previews/geolocation-controller@0.1.3-preview-f3d53de3e
@metamask-previews/json-rpc-engine@10.5.0-preview-f3d53de3e
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-f3d53de3e
@metamask-previews/keyring-controller@25.5.0-preview-f3d53de3e
@metamask-previews/logging-controller@8.0.2-preview-f3d53de3e
@metamask-previews/message-manager@14.1.2-preview-f3d53de3e
@metamask-previews/messenger@1.2.0-preview-f3d53de3e
@metamask-previews/messenger-cli@0.2.0-preview-f3d53de3e
@metamask-previews/money-account-balance-service@1.0.1-preview-f3d53de3e
@metamask-previews/money-account-controller@0.3.0-preview-f3d53de3e
@metamask-previews/money-account-upgrade-controller@1.3.2-preview-f3d53de3e
@metamask-previews/multichain-account-service@9.0.0-preview-f3d53de3e
@metamask-previews/multichain-api-middleware@3.1.1-preview-f3d53de3e
@metamask-previews/multichain-network-controller@3.1.1-preview-f3d53de3e
@metamask-previews/multichain-transactions-controller@7.1.0-preview-f3d53de3e
@metamask-previews/name-controller@9.1.2-preview-f3d53de3e
@metamask-previews/network-controller@31.0.0-preview-f3d53de3e
@metamask-previews/network-enablement-controller@5.1.1-preview-f3d53de3e
@metamask-previews/notification-services-controller@23.1.1-preview-f3d53de3e
@metamask-previews/passkey-controller@2.0.1-preview-f3d53de3e
@metamask-previews/permission-controller@13.1.1-preview-f3d53de3e
@metamask-previews/permission-log-controller@5.1.0-preview-f3d53de3e
@metamask-previews/perps-controller@6.0.1-preview-f3d53de3e
@metamask-previews/phishing-controller@17.1.2-preview-f3d53de3e
@metamask-previews/polling-controller@16.0.5-preview-f3d53de3e
@metamask-previews/preferences-controller@23.1.0-preview-f3d53de3e
@metamask-previews/profile-metrics-controller@3.1.4-preview-f3d53de3e
@metamask-previews/profile-sync-controller@28.0.2-preview-f3d53de3e
@metamask-previews/ramps-controller@13.3.1-preview-f3d53de3e
@metamask-previews/rate-limit-controller@7.0.1-preview-f3d53de3e
@metamask-previews/react-data-query@0.2.0-preview-f3d53de3e
@metamask-previews/remote-feature-flag-controller@4.2.1-preview-f3d53de3e
@metamask-previews/sample-controllers@5.0.0-preview-f3d53de3e
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-f3d53de3e
@metamask-previews/selected-network-controller@26.1.2-preview-f3d53de3e
@metamask-previews/shield-controller@5.1.2-preview-f3d53de3e
@metamask-previews/signature-controller@39.2.1-preview-f3d53de3e
@metamask-previews/snap-account-service@0.0.0-preview-f3d53de3e
@metamask-previews/social-controllers@2.2.1-preview-f3d53de3e
@metamask-previews/storage-service@1.0.1-preview-f3d53de3e
@metamask-previews/subscription-controller@6.1.3-preview-f3d53de3e
@metamask-previews/transaction-controller@65.3.0-preview-f3d53de3e
@metamask-previews/transaction-pay-controller@22.2.0-preview-f3d53de3e
@metamask-previews/user-operation-controller@41.2.1-preview-f3d53de3e

@sahar-fehri
Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@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@7.3.0-preview-1f601d6f4
@metamask-previews/accounts-controller@38.1.0-preview-1f601d6f4
@metamask-previews/address-book-controller@7.1.2-preview-1f601d6f4
@metamask-previews/ai-controllers@0.6.3-preview-1f601d6f4
@metamask-previews/analytics-controller@1.0.1-preview-1f601d6f4
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-1f601d6f4
@metamask-previews/announcement-controller@8.1.0-preview-1f601d6f4
@metamask-previews/app-metadata-controller@2.0.1-preview-1f601d6f4
@metamask-previews/approval-controller@9.0.1-preview-1f601d6f4
@metamask-previews/assets-controller@7.0.1-preview-1f601d6f4
@metamask-previews/assets-controllers@106.0.1-preview-1f601d6f4
@metamask-previews/authenticated-user-storage@1.0.1-preview-1f601d6f4
@metamask-previews/base-controller@9.1.0-preview-1f601d6f4
@metamask-previews/base-data-service@0.1.2-preview-1f601d6f4
@metamask-previews/bridge-controller@72.0.2-preview-1f601d6f4
@metamask-previews/bridge-status-controller@71.1.2-preview-1f601d6f4
@metamask-previews/build-utils@3.0.4-preview-1f601d6f4
@metamask-previews/chain-agnostic-permission@1.6.1-preview-1f601d6f4
@metamask-previews/chomp-api-service@3.0.1-preview-1f601d6f4
@metamask-previews/claims-controller@0.5.1-preview-1f601d6f4
@metamask-previews/client-controller@1.0.1-preview-1f601d6f4
@metamask-previews/compliance-controller@2.0.1-preview-1f601d6f4
@metamask-previews/composable-controller@12.0.1-preview-1f601d6f4
@metamask-previews/config-registry-controller@0.3.1-preview-1f601d6f4
@metamask-previews/connectivity-controller@0.2.0-preview-1f601d6f4
@metamask-previews/controller-utils@12.0.0-preview-1f601d6f4
@metamask-previews/core-backend@6.2.2-preview-1f601d6f4
@metamask-previews/delegation-controller@3.0.0-preview-1f601d6f4
@metamask-previews/earn-controller@12.1.1-preview-1f601d6f4
@metamask-previews/eip-5792-middleware@3.0.3-preview-1f601d6f4
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-1f601d6f4
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-1f601d6f4
@metamask-previews/ens-controller@19.1.2-preview-1f601d6f4
@metamask-previews/eth-block-tracker@15.0.1-preview-1f601d6f4
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-1f601d6f4
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-1f601d6f4
@metamask-previews/foundryup@1.0.1-preview-1f601d6f4
@metamask-previews/gas-fee-controller@26.2.1-preview-1f601d6f4
@metamask-previews/gator-permissions-controller@4.1.1-preview-1f601d6f4
@metamask-previews/geolocation-controller@0.1.3-preview-1f601d6f4
@metamask-previews/json-rpc-engine@10.5.0-preview-1f601d6f4
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-1f601d6f4
@metamask-previews/keyring-controller@25.5.0-preview-1f601d6f4
@metamask-previews/logging-controller@8.0.2-preview-1f601d6f4
@metamask-previews/message-manager@14.1.2-preview-1f601d6f4
@metamask-previews/messenger@1.2.0-preview-1f601d6f4
@metamask-previews/messenger-cli@0.2.0-preview-1f601d6f4
@metamask-previews/money-account-balance-service@1.0.1-preview-1f601d6f4
@metamask-previews/money-account-controller@0.3.0-preview-1f601d6f4
@metamask-previews/money-account-upgrade-controller@1.3.2-preview-1f601d6f4
@metamask-previews/multichain-account-service@9.0.0-preview-1f601d6f4
@metamask-previews/multichain-api-middleware@3.1.1-preview-1f601d6f4
@metamask-previews/multichain-network-controller@3.1.1-preview-1f601d6f4
@metamask-previews/multichain-transactions-controller@7.1.0-preview-1f601d6f4
@metamask-previews/name-controller@9.1.2-preview-1f601d6f4
@metamask-previews/network-controller@31.0.0-preview-1f601d6f4
@metamask-previews/network-enablement-controller@5.1.1-preview-1f601d6f4
@metamask-previews/notification-services-controller@23.1.1-preview-1f601d6f4
@metamask-previews/passkey-controller@2.0.1-preview-1f601d6f4
@metamask-previews/permission-controller@13.1.1-preview-1f601d6f4
@metamask-previews/permission-log-controller@5.1.0-preview-1f601d6f4
@metamask-previews/perps-controller@6.0.1-preview-1f601d6f4
@metamask-previews/phishing-controller@17.1.2-preview-1f601d6f4
@metamask-previews/polling-controller@16.0.5-preview-1f601d6f4
@metamask-previews/preferences-controller@23.1.0-preview-1f601d6f4
@metamask-previews/profile-metrics-controller@3.1.4-preview-1f601d6f4
@metamask-previews/profile-sync-controller@28.0.2-preview-1f601d6f4
@metamask-previews/ramps-controller@13.3.1-preview-1f601d6f4
@metamask-previews/rate-limit-controller@7.0.1-preview-1f601d6f4
@metamask-previews/react-data-query@0.2.0-preview-1f601d6f4
@metamask-previews/remote-feature-flag-controller@4.2.1-preview-1f601d6f4
@metamask-previews/sample-controllers@5.0.0-preview-1f601d6f4
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-1f601d6f4
@metamask-previews/selected-network-controller@26.1.2-preview-1f601d6f4
@metamask-previews/shield-controller@5.1.2-preview-1f601d6f4
@metamask-previews/signature-controller@39.2.1-preview-1f601d6f4
@metamask-previews/snap-account-service@0.0.0-preview-1f601d6f4
@metamask-previews/social-controllers@2.2.1-preview-1f601d6f4
@metamask-previews/storage-service@1.0.1-preview-1f601d6f4
@metamask-previews/subscription-controller@6.1.3-preview-1f601d6f4
@metamask-previews/transaction-controller@65.3.0-preview-1f601d6f4
@metamask-previews/transaction-pay-controller@22.2.0-preview-1f601d6f4
@metamask-previews/user-operation-controller@41.2.1-preview-1f601d6f4

@sahar-fehri
Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@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@7.3.0-preview-510d33d51
@metamask-previews/accounts-controller@38.1.0-preview-510d33d51
@metamask-previews/address-book-controller@7.1.2-preview-510d33d51
@metamask-previews/ai-controllers@0.6.3-preview-510d33d51
@metamask-previews/analytics-controller@1.0.1-preview-510d33d51
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-510d33d51
@metamask-previews/announcement-controller@8.1.0-preview-510d33d51
@metamask-previews/app-metadata-controller@2.0.1-preview-510d33d51
@metamask-previews/approval-controller@9.0.1-preview-510d33d51
@metamask-previews/assets-controller@7.0.1-preview-510d33d51
@metamask-previews/assets-controllers@106.0.1-preview-510d33d51
@metamask-previews/authenticated-user-storage@1.0.1-preview-510d33d51
@metamask-previews/base-controller@9.1.0-preview-510d33d51
@metamask-previews/base-data-service@0.1.2-preview-510d33d51
@metamask-previews/bridge-controller@72.0.2-preview-510d33d51
@metamask-previews/bridge-status-controller@71.1.2-preview-510d33d51
@metamask-previews/build-utils@3.0.4-preview-510d33d51
@metamask-previews/chain-agnostic-permission@1.6.1-preview-510d33d51
@metamask-previews/chomp-api-service@3.0.1-preview-510d33d51
@metamask-previews/claims-controller@0.5.1-preview-510d33d51
@metamask-previews/client-controller@1.0.1-preview-510d33d51
@metamask-previews/compliance-controller@2.0.1-preview-510d33d51
@metamask-previews/composable-controller@12.0.1-preview-510d33d51
@metamask-previews/config-registry-controller@0.3.1-preview-510d33d51
@metamask-previews/connectivity-controller@0.2.0-preview-510d33d51
@metamask-previews/controller-utils@12.0.0-preview-510d33d51
@metamask-previews/core-backend@6.2.2-preview-510d33d51
@metamask-previews/delegation-controller@3.0.0-preview-510d33d51
@metamask-previews/earn-controller@12.1.1-preview-510d33d51
@metamask-previews/eip-5792-middleware@3.0.3-preview-510d33d51
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-510d33d51
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-510d33d51
@metamask-previews/ens-controller@19.1.2-preview-510d33d51
@metamask-previews/eth-block-tracker@15.0.1-preview-510d33d51
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-510d33d51
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-510d33d51
@metamask-previews/foundryup@1.0.1-preview-510d33d51
@metamask-previews/gas-fee-controller@26.2.1-preview-510d33d51
@metamask-previews/gator-permissions-controller@4.1.1-preview-510d33d51
@metamask-previews/geolocation-controller@0.1.3-preview-510d33d51
@metamask-previews/json-rpc-engine@10.5.0-preview-510d33d51
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-510d33d51
@metamask-previews/keyring-controller@25.5.0-preview-510d33d51
@metamask-previews/logging-controller@8.0.2-preview-510d33d51
@metamask-previews/message-manager@14.1.2-preview-510d33d51
@metamask-previews/messenger@1.2.0-preview-510d33d51
@metamask-previews/messenger-cli@0.2.0-preview-510d33d51
@metamask-previews/money-account-balance-service@1.0.1-preview-510d33d51
@metamask-previews/money-account-controller@0.3.0-preview-510d33d51
@metamask-previews/money-account-upgrade-controller@1.3.2-preview-510d33d51
@metamask-previews/multichain-account-service@9.0.0-preview-510d33d51
@metamask-previews/multichain-api-middleware@3.1.1-preview-510d33d51
@metamask-previews/multichain-network-controller@3.1.1-preview-510d33d51
@metamask-previews/multichain-transactions-controller@7.1.0-preview-510d33d51
@metamask-previews/name-controller@9.1.2-preview-510d33d51
@metamask-previews/network-controller@31.0.0-preview-510d33d51
@metamask-previews/network-enablement-controller@5.1.1-preview-510d33d51
@metamask-previews/notification-services-controller@23.1.1-preview-510d33d51
@metamask-previews/passkey-controller@2.0.1-preview-510d33d51
@metamask-previews/permission-controller@13.1.1-preview-510d33d51
@metamask-previews/permission-log-controller@5.1.0-preview-510d33d51
@metamask-previews/perps-controller@6.0.1-preview-510d33d51
@metamask-previews/phishing-controller@17.1.2-preview-510d33d51
@metamask-previews/polling-controller@16.0.5-preview-510d33d51
@metamask-previews/preferences-controller@23.1.0-preview-510d33d51
@metamask-previews/profile-metrics-controller@3.1.4-preview-510d33d51
@metamask-previews/profile-sync-controller@28.0.2-preview-510d33d51
@metamask-previews/ramps-controller@13.3.1-preview-510d33d51
@metamask-previews/rate-limit-controller@7.0.1-preview-510d33d51
@metamask-previews/react-data-query@0.2.0-preview-510d33d51
@metamask-previews/remote-feature-flag-controller@4.2.1-preview-510d33d51
@metamask-previews/sample-controllers@5.0.0-preview-510d33d51
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-510d33d51
@metamask-previews/selected-network-controller@26.1.2-preview-510d33d51
@metamask-previews/shield-controller@5.1.2-preview-510d33d51
@metamask-previews/signature-controller@39.2.1-preview-510d33d51
@metamask-previews/snap-account-service@0.0.0-preview-510d33d51
@metamask-previews/social-controllers@2.2.1-preview-510d33d51
@metamask-previews/storage-service@1.0.1-preview-510d33d51
@metamask-previews/subscription-controller@6.1.3-preview-510d33d51
@metamask-previews/transaction-controller@65.3.0-preview-510d33d51
@metamask-previews/transaction-pay-controller@22.2.0-preview-510d33d51
@metamask-previews/user-operation-controller@41.2.1-preview-510d33d51

channel,
refCount: entry.refCount,
});
return;
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

When trying to create a new subscription and that entry has a running gracePeriodTimer, it means refCount just hit 0 and the channel is waiting to be unsubscribed but the WebSocket subscription is still alive.
In that case; cancel the timer, clear it, bump refCount back to 1, and return early; no need to call connect or subscribe on the WebSocket since the subscription never actually got torn down

if (entry && entry.refCount > 0) {
entry.refCount += 1;
return;
}
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

If the channel entry exists and refCount > 0, it means there's already an active subscription with at least one consumer. So it just bumps the count and returns=> no connect, no subscribe, no WebSocket traffic at all. Multiple UI components share the same underlying WebSocket subscription.


export type OHLCVServiceActions = OHLCVServiceMethodActions;

export const OHLCV_SERVICE_ALLOWED_ACTIONS = [
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Oh interesting, so we rely on the BackendWebSocketService to add support for this? Nice.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Yes BackendWebSocketService is the shared infra that is handling the WS connection lifecycle
Actions OHLCVService calls on BackendWebSocketService

BackendWebSocketService:connect               — ensure WS is open
BackendWebSocketService:subscribe             — create server-side subscription
BackendWebSocketService:channelHasSubscription — idempotency check
BackendWebSocketService:getSubscriptionsByChannel — for unsubscribing
BackendWebSocketService:forceReconnection     — tear down + rebuild on errors
BackendWebSocketService:addChannelCallback    — register system-notification listener
BackendWebSocketService:removeChannelCallback — cleanup on destroy

Comment thread packages/core-backend/src/ws/AccountActivityService.ts
Comment thread packages/core-backend/src/ws/AccountActivityService.test.ts
Copy link
Copy Markdown
Contributor

@Kriys94 Kriys94 left a comment

Choose a reason for hiding this comment

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

Overall, LGTM. I have a very small question about the reliability of ChannelEntry and its counter.

// =============================================================================

type ChannelEntry = {
refCount: number;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I have some doubts about the reliability of the counter here with some edge cases. Do you think what Cursor returns could be valid?

Image

@sahar-fehri
Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

Comment thread packages/core-backend/src/ws/ohlcv/OHLCVService.ts
@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@7.3.0-preview-c7e584108
@metamask-previews/accounts-controller@38.1.0-preview-c7e584108
@metamask-previews/address-book-controller@7.1.2-preview-c7e584108
@metamask-previews/ai-controllers@0.6.3-preview-c7e584108
@metamask-previews/analytics-controller@1.0.1-preview-c7e584108
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-c7e584108
@metamask-previews/announcement-controller@8.1.0-preview-c7e584108
@metamask-previews/app-metadata-controller@2.0.1-preview-c7e584108
@metamask-previews/approval-controller@9.0.1-preview-c7e584108
@metamask-previews/assets-controller@7.0.1-preview-c7e584108
@metamask-previews/assets-controllers@106.0.1-preview-c7e584108
@metamask-previews/authenticated-user-storage@1.0.1-preview-c7e584108
@metamask-previews/base-controller@9.1.0-preview-c7e584108
@metamask-previews/base-data-service@0.1.2-preview-c7e584108
@metamask-previews/bridge-controller@72.0.2-preview-c7e584108
@metamask-previews/bridge-status-controller@71.1.2-preview-c7e584108
@metamask-previews/build-utils@3.0.4-preview-c7e584108
@metamask-previews/chain-agnostic-permission@1.6.1-preview-c7e584108
@metamask-previews/chomp-api-service@3.0.1-preview-c7e584108
@metamask-previews/claims-controller@0.5.1-preview-c7e584108
@metamask-previews/client-controller@1.0.1-preview-c7e584108
@metamask-previews/compliance-controller@2.0.1-preview-c7e584108
@metamask-previews/composable-controller@12.0.1-preview-c7e584108
@metamask-previews/config-registry-controller@0.3.1-preview-c7e584108
@metamask-previews/connectivity-controller@0.2.0-preview-c7e584108
@metamask-previews/controller-utils@12.0.0-preview-c7e584108
@metamask-previews/core-backend@6.2.2-preview-c7e584108
@metamask-previews/delegation-controller@3.0.0-preview-c7e584108
@metamask-previews/earn-controller@12.1.1-preview-c7e584108
@metamask-previews/eip-5792-middleware@3.0.3-preview-c7e584108
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-c7e584108
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-c7e584108
@metamask-previews/ens-controller@19.1.2-preview-c7e584108
@metamask-previews/eth-block-tracker@15.0.1-preview-c7e584108
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-c7e584108
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-c7e584108
@metamask-previews/foundryup@1.0.1-preview-c7e584108
@metamask-previews/gas-fee-controller@26.2.1-preview-c7e584108
@metamask-previews/gator-permissions-controller@4.1.1-preview-c7e584108
@metamask-previews/geolocation-controller@0.1.3-preview-c7e584108
@metamask-previews/json-rpc-engine@10.5.0-preview-c7e584108
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-c7e584108
@metamask-previews/keyring-controller@25.5.0-preview-c7e584108
@metamask-previews/logging-controller@8.0.2-preview-c7e584108
@metamask-previews/message-manager@14.1.2-preview-c7e584108
@metamask-previews/messenger@1.2.0-preview-c7e584108
@metamask-previews/messenger-cli@0.2.0-preview-c7e584108
@metamask-previews/money-account-balance-service@1.0.1-preview-c7e584108
@metamask-previews/money-account-controller@0.3.0-preview-c7e584108
@metamask-previews/money-account-upgrade-controller@1.3.2-preview-c7e584108
@metamask-previews/multichain-account-service@9.0.0-preview-c7e584108
@metamask-previews/multichain-api-middleware@3.1.1-preview-c7e584108
@metamask-previews/multichain-network-controller@3.1.1-preview-c7e584108
@metamask-previews/multichain-transactions-controller@7.1.0-preview-c7e584108
@metamask-previews/name-controller@9.1.2-preview-c7e584108
@metamask-previews/network-controller@31.0.0-preview-c7e584108
@metamask-previews/network-enablement-controller@5.1.1-preview-c7e584108
@metamask-previews/notification-services-controller@23.1.1-preview-c7e584108
@metamask-previews/passkey-controller@2.0.1-preview-c7e584108
@metamask-previews/permission-controller@13.1.1-preview-c7e584108
@metamask-previews/permission-log-controller@5.1.0-preview-c7e584108
@metamask-previews/perps-controller@6.0.1-preview-c7e584108
@metamask-previews/phishing-controller@17.1.2-preview-c7e584108
@metamask-previews/polling-controller@16.0.5-preview-c7e584108
@metamask-previews/preferences-controller@23.1.0-preview-c7e584108
@metamask-previews/profile-metrics-controller@3.1.4-preview-c7e584108
@metamask-previews/profile-sync-controller@28.0.2-preview-c7e584108
@metamask-previews/ramps-controller@13.3.1-preview-c7e584108
@metamask-previews/rate-limit-controller@7.0.1-preview-c7e584108
@metamask-previews/react-data-query@0.2.0-preview-c7e584108
@metamask-previews/remote-feature-flag-controller@4.2.1-preview-c7e584108
@metamask-previews/sample-controllers@5.0.0-preview-c7e584108
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-c7e584108
@metamask-previews/selected-network-controller@26.1.2-preview-c7e584108
@metamask-previews/shield-controller@5.1.2-preview-c7e584108
@metamask-previews/signature-controller@39.2.1-preview-c7e584108
@metamask-previews/snap-account-service@0.0.0-preview-c7e584108
@metamask-previews/social-controllers@2.2.1-preview-c7e584108
@metamask-previews/storage-service@1.0.1-preview-c7e584108
@metamask-previews/subscription-controller@6.1.3-preview-c7e584108
@metamask-previews/transaction-controller@65.3.0-preview-c7e584108
@metamask-previews/transaction-pay-controller@22.2.0-preview-c7e584108
@metamask-previews/user-operation-controller@41.2.1-preview-c7e584108

Comment thread packages/core-backend/src/ws/ohlcv/OHLCVService.ts
Comment thread packages/core-backend/src/ws/ohlcv/OHLCVService.ts
*/
async subscribe(options: OHLCVSubscriptionOptions): Promise<void> {
const channel = this.#buildChannel(options);
return this.#withChannelLock(channel, () => this.#subscribeInner(channel));
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I think you can use import { Mutex } from 'async-mutex'; its already used in other Controllers

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Comment thread packages/core-backend/src/ws/ohlcv/OHLCVService.ts
Comment thread packages/core-backend/src/ws/ohlcv/OHLCVService.ts Outdated
@sahar-fehri
Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

Copy link
Copy Markdown

@cursor cursor Bot left a comment

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 337abd9. Configure here.

Comment thread packages/core-backend/src/ws/ohlcv/OHLCVService.ts
@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@7.3.0-preview-337abd924
@metamask-previews/accounts-controller@38.1.1-preview-337abd924
@metamask-previews/address-book-controller@7.1.2-preview-337abd924
@metamask-previews/ai-controllers@0.6.3-preview-337abd924
@metamask-previews/analytics-controller@1.0.1-preview-337abd924
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-337abd924
@metamask-previews/announcement-controller@8.1.0-preview-337abd924
@metamask-previews/app-metadata-controller@2.0.1-preview-337abd924
@metamask-previews/approval-controller@9.0.1-preview-337abd924
@metamask-previews/assets-controller@7.1.1-preview-337abd924
@metamask-previews/assets-controllers@108.0.0-preview-337abd924
@metamask-previews/authenticated-user-storage@1.0.1-preview-337abd924
@metamask-previews/base-controller@9.1.0-preview-337abd924
@metamask-previews/base-data-service@0.1.2-preview-337abd924
@metamask-previews/bridge-controller@72.0.4-preview-337abd924
@metamask-previews/bridge-status-controller@71.1.4-preview-337abd924
@metamask-previews/build-utils@3.0.4-preview-337abd924
@metamask-previews/chain-agnostic-permission@1.6.1-preview-337abd924
@metamask-previews/chomp-api-service@3.1.0-preview-337abd924
@metamask-previews/claims-controller@0.5.1-preview-337abd924
@metamask-previews/client-controller@1.0.1-preview-337abd924
@metamask-previews/compliance-controller@2.0.1-preview-337abd924
@metamask-previews/composable-controller@12.0.1-preview-337abd924
@metamask-previews/config-registry-controller@0.3.1-preview-337abd924
@metamask-previews/connectivity-controller@0.2.0-preview-337abd924
@metamask-previews/controller-utils@12.1.0-preview-337abd924
@metamask-previews/core-backend@6.2.2-preview-337abd924
@metamask-previews/delegation-controller@3.0.0-preview-337abd924
@metamask-previews/earn-controller@12.1.2-preview-337abd924
@metamask-previews/eip-5792-middleware@3.0.3-preview-337abd924
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-337abd924
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-337abd924
@metamask-previews/ens-controller@19.1.3-preview-337abd924
@metamask-previews/eth-block-tracker@15.0.1-preview-337abd924
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-337abd924
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-337abd924
@metamask-previews/foundryup@1.0.1-preview-337abd924
@metamask-previews/gas-fee-controller@26.2.1-preview-337abd924
@metamask-previews/gator-permissions-controller@4.1.2-preview-337abd924
@metamask-previews/geolocation-controller@0.1.3-preview-337abd924
@metamask-previews/json-rpc-engine@10.5.0-preview-337abd924
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-337abd924
@metamask-previews/keyring-controller@25.5.0-preview-337abd924
@metamask-previews/logging-controller@8.0.2-preview-337abd924
@metamask-previews/message-manager@14.1.2-preview-337abd924
@metamask-previews/messenger@1.2.0-preview-337abd924
@metamask-previews/messenger-cli@0.2.0-preview-337abd924
@metamask-previews/money-account-balance-service@1.0.2-preview-337abd924
@metamask-previews/money-account-controller@0.3.0-preview-337abd924
@metamask-previews/money-account-upgrade-controller@2.0.1-preview-337abd924
@metamask-previews/multichain-account-service@9.0.0-preview-337abd924
@metamask-previews/multichain-api-middleware@3.1.2-preview-337abd924
@metamask-previews/multichain-network-controller@3.1.1-preview-337abd924
@metamask-previews/multichain-transactions-controller@7.1.0-preview-337abd924
@metamask-previews/name-controller@9.1.2-preview-337abd924
@metamask-previews/network-controller@32.0.0-preview-337abd924
@metamask-previews/network-enablement-controller@5.1.1-preview-337abd924
@metamask-previews/notification-services-controller@23.1.1-preview-337abd924
@metamask-previews/passkey-controller@2.0.1-preview-337abd924
@metamask-previews/permission-controller@13.1.1-preview-337abd924
@metamask-previews/permission-log-controller@5.1.0-preview-337abd924
@metamask-previews/perps-controller@6.0.1-preview-337abd924
@metamask-previews/phishing-controller@17.1.2-preview-337abd924
@metamask-previews/polling-controller@16.0.5-preview-337abd924
@metamask-previews/preferences-controller@23.1.0-preview-337abd924
@metamask-previews/profile-metrics-controller@3.1.4-preview-337abd924
@metamask-previews/profile-sync-controller@28.0.2-preview-337abd924
@metamask-previews/ramps-controller@13.3.1-preview-337abd924
@metamask-previews/rate-limit-controller@7.0.1-preview-337abd924
@metamask-previews/react-data-query@0.2.0-preview-337abd924
@metamask-previews/remote-feature-flag-controller@4.2.1-preview-337abd924
@metamask-previews/sample-controllers@5.0.1-preview-337abd924
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-337abd924
@metamask-previews/selected-network-controller@26.1.3-preview-337abd924
@metamask-previews/shield-controller@5.1.2-preview-337abd924
@metamask-previews/signature-controller@39.2.2-preview-337abd924
@metamask-previews/snap-account-service@0.0.0-preview-337abd924
@metamask-previews/social-controllers@2.2.1-preview-337abd924
@metamask-previews/storage-service@1.0.1-preview-337abd924
@metamask-previews/subscription-controller@6.1.3-preview-337abd924
@metamask-previews/transaction-controller@65.3.0-preview-337abd924
@metamask-previews/transaction-pay-controller@22.3.1-preview-337abd924
@metamask-previews/user-operation-controller@41.2.2-preview-337abd924

@sahar-fehri
Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@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@7.3.0-preview-150787a7d
@metamask-previews/accounts-controller@38.1.1-preview-150787a7d
@metamask-previews/address-book-controller@7.1.2-preview-150787a7d
@metamask-previews/ai-controllers@0.6.3-preview-150787a7d
@metamask-previews/analytics-controller@1.0.1-preview-150787a7d
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-150787a7d
@metamask-previews/announcement-controller@8.1.0-preview-150787a7d
@metamask-previews/app-metadata-controller@2.0.1-preview-150787a7d
@metamask-previews/approval-controller@9.0.1-preview-150787a7d
@metamask-previews/assets-controller@7.1.1-preview-150787a7d
@metamask-previews/assets-controllers@108.0.0-preview-150787a7d
@metamask-previews/authenticated-user-storage@1.0.1-preview-150787a7d
@metamask-previews/base-controller@9.1.0-preview-150787a7d
@metamask-previews/base-data-service@0.1.2-preview-150787a7d
@metamask-previews/bridge-controller@72.0.4-preview-150787a7d
@metamask-previews/bridge-status-controller@71.1.4-preview-150787a7d
@metamask-previews/build-utils@3.0.4-preview-150787a7d
@metamask-previews/chain-agnostic-permission@1.6.1-preview-150787a7d
@metamask-previews/chomp-api-service@3.1.0-preview-150787a7d
@metamask-previews/claims-controller@0.5.1-preview-150787a7d
@metamask-previews/client-controller@1.0.1-preview-150787a7d
@metamask-previews/compliance-controller@2.0.1-preview-150787a7d
@metamask-previews/composable-controller@12.0.1-preview-150787a7d
@metamask-previews/config-registry-controller@0.3.1-preview-150787a7d
@metamask-previews/connectivity-controller@0.2.0-preview-150787a7d
@metamask-previews/controller-utils@12.1.0-preview-150787a7d
@metamask-previews/core-backend@6.2.2-preview-150787a7d
@metamask-previews/delegation-controller@3.0.0-preview-150787a7d
@metamask-previews/earn-controller@12.1.2-preview-150787a7d
@metamask-previews/eip-5792-middleware@3.0.3-preview-150787a7d
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-150787a7d
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-150787a7d
@metamask-previews/ens-controller@19.1.3-preview-150787a7d
@metamask-previews/eth-block-tracker@15.0.1-preview-150787a7d
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-150787a7d
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-150787a7d
@metamask-previews/foundryup@1.0.1-preview-150787a7d
@metamask-previews/gas-fee-controller@26.2.1-preview-150787a7d
@metamask-previews/gator-permissions-controller@4.1.2-preview-150787a7d
@metamask-previews/geolocation-controller@0.1.3-preview-150787a7d
@metamask-previews/json-rpc-engine@10.5.0-preview-150787a7d
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-150787a7d
@metamask-previews/keyring-controller@25.5.0-preview-150787a7d
@metamask-previews/logging-controller@8.0.2-preview-150787a7d
@metamask-previews/message-manager@14.1.2-preview-150787a7d
@metamask-previews/messenger@1.2.0-preview-150787a7d
@metamask-previews/messenger-cli@0.2.0-preview-150787a7d
@metamask-previews/money-account-balance-service@1.0.2-preview-150787a7d
@metamask-previews/money-account-controller@0.3.0-preview-150787a7d
@metamask-previews/money-account-upgrade-controller@2.0.1-preview-150787a7d
@metamask-previews/multichain-account-service@9.0.0-preview-150787a7d
@metamask-previews/multichain-api-middleware@3.1.2-preview-150787a7d
@metamask-previews/multichain-network-controller@3.1.1-preview-150787a7d
@metamask-previews/multichain-transactions-controller@7.1.0-preview-150787a7d
@metamask-previews/name-controller@9.1.2-preview-150787a7d
@metamask-previews/network-controller@32.0.0-preview-150787a7d
@metamask-previews/network-enablement-controller@5.1.1-preview-150787a7d
@metamask-previews/notification-services-controller@23.1.1-preview-150787a7d
@metamask-previews/passkey-controller@2.0.1-preview-150787a7d
@metamask-previews/permission-controller@13.1.1-preview-150787a7d
@metamask-previews/permission-log-controller@5.1.0-preview-150787a7d
@metamask-previews/perps-controller@6.0.1-preview-150787a7d
@metamask-previews/phishing-controller@17.1.2-preview-150787a7d
@metamask-previews/polling-controller@16.0.5-preview-150787a7d
@metamask-previews/preferences-controller@23.1.0-preview-150787a7d
@metamask-previews/profile-metrics-controller@3.1.4-preview-150787a7d
@metamask-previews/profile-sync-controller@28.0.2-preview-150787a7d
@metamask-previews/ramps-controller@13.3.1-preview-150787a7d
@metamask-previews/rate-limit-controller@7.0.1-preview-150787a7d
@metamask-previews/react-data-query@0.2.0-preview-150787a7d
@metamask-previews/remote-feature-flag-controller@4.2.1-preview-150787a7d
@metamask-previews/sample-controllers@5.0.1-preview-150787a7d
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-150787a7d
@metamask-previews/selected-network-controller@26.1.3-preview-150787a7d
@metamask-previews/shield-controller@5.1.2-preview-150787a7d
@metamask-previews/signature-controller@39.2.2-preview-150787a7d
@metamask-previews/snap-account-service@0.0.0-preview-150787a7d
@metamask-previews/social-controllers@2.2.1-preview-150787a7d
@metamask-previews/storage-service@1.0.1-preview-150787a7d
@metamask-previews/subscription-controller@6.1.3-preview-150787a7d
@metamask-previews/transaction-controller@65.3.0-preview-150787a7d
@metamask-previews/transaction-pay-controller@22.3.1-preview-150787a7d
@metamask-previews/user-operation-controller@41.2.2-preview-150787a7d

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.

3 participants