Skip to content

feat: advanced chart core implementation - #10521

Merged
sahar-fehri merged 2 commits into
mainfrom
feat/advanced-chart-core-implementation
Sep 29, 2026
Merged

sahar-fehri merged 2 commits into
mainfrom
feat/advanced-chart-core-implementation

Conversation

@sahar-fehri

@sahar-fehri sahar-fehri commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

Explanation

Add the full implementation of @metamask/advanced-chart-core — the platform-agnostic TradingView Advanced Charts WebView engine, ported from metamask-mobile.

Stacked on #10520 (bootstrap/scaffold PR).

What this PR adds

Core engine (src/core/)

  • bootstrap.ts — WebView initialization, state seeding, Phase 1 handler registration
  • bridge.ts — JSON framing/parsing for host communication, delegates transport to the active host
  • host.ts — Injectable ChartHostTransport interface with setHostTransport/getHostTransport
  • state.ts — Centralized chart state management
  • dataLifecycle.ts, loadLibrary.ts, resolution.ts, timeUtils.ts, timezone.ts — Data lifecycle, TradingView library loading, resolution helpers

Platform adapters (src/platform/)

  • reactNativeHost.ts — React Native WebView transport (default, preserves existing mobile behavior)
  • iframeHost.ts — Browser/extension iframe transport with origin allowlisting

Features (src/features/)

  • indicators/ — Technical indicator overlays, legend, resize, studies, sub-pane management
  • volume/ — Volume chart overlay

Widget (src/widget/)

  • initChart.ts, datafeed.ts, chartType.ts — TradingView widget initialization and data feed
  • theme.ts, visualOverrides.ts, scaleLayout.ts — Theming and layout
  • ohlcvIngestion.ts — OHLCV candle data ingestion
  • priceFormatter.ts, tvDomHelpers.ts, externalLinkBridge.ts — Utilities

Overlays (src/overlays/)

  • tradeMarkers/ — Trade execution marker rendering with hit-testing and animation
  • positionLines/ — Open position line overlays
  • socialLeaderboard/ — Social leaderboard overlay
  • focusTime/ — Focus time overlay

Messages (src/messages/)

  • handler.ts, contract.ts — Inbound message handling and message contract types

Pagination (src/pagination/)

  • priceApi.ts, rnBacked.ts — Historical price data pagination

Entry points

  • src/index.ts — Mobile RN WebView IIFE entry (auto-boots with createReactNativeHost)
  • src/host-entry.ts — Side-effect-free entry for non-mobile hosts (extension iframe)

Monorepo changes

  • oxlint.config.ts — Adds env: { browser: true } override for packages/advanced-chart-core/**
  • oxlint-suppressions.json — Adds suppression entries for vendored mobile code
  • package.json — Adds jest-environment-jsdom and ./host subpath export

Test coverage

  • 40 test suites, 563 tests, all passing
  • Coverage across all modules

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
Large new chart/WebView surface area tied to RN messaging and TradingView behavior; regressions would affect in-app charts, though risk is tempered by extensive tests and largely ported logic.

Overview
Delivers the full @metamask/advanced-chart-core WebView engine (ported from mobile chartLogic.js), replacing the package placeholder/greeter test with a modular bootstrap, RN↔WebView messaging, centralized state, and TradingView widget lifecycle.

Bootstrap and wiring: bootstrap() reads config via injectable ChartHostTransport (React Native default in index.ts; ./host export for iframe/extension hosts), registers inbound handlers (OHLCV, theme, indicators, volume, overlays, pagination), preloads the TV library, and creates the widget on first OHLCV data—including initial visible-range timeframe and chart-ready hooks (crosshair, legend, trade markers, etc.).

Tooling: Jest runs in jsdom package-wide; oxlint gets a browser env override for this package plus suppressions for vendored/test patterns. package.json adds jest-environment-jsdom, a ./host subpath export, and drops unused messenger/typedoc dev scripts.

Tests: Replaces the smoke test with broad unit coverage (core, bridge, bootstrap dispatch paths, indicators/legend, and related modules) using test reset hooks and mocked DOM/RN bridge.

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

@sahar-fehri
sahar-fehri requested review from a team as code owners September 28, 2026 13:28
@sahar-fehri
sahar-fehri added this pull request to stack #10522 September 28, 2026 13:28
@sahar-fehri sahar-fehri changed the title Feat/advanced chart core implementation feat: add advanced-chart-core implementation Sep 28, 2026
@sahar-fehri sahar-fehri changed the title feat: add advanced-chart-core implementation feat: advanced chart core implementation Sep 28, 2026
@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@11.0.0-preview-452564c37
@metamask-previews/accounts-controller@40.0.0-preview-452564c37
@metamask-previews/address-book-controller@8.0.0-preview-452564c37
@metamask-previews/advanced-chart-core@0.0.0-preview-452564c37
@metamask-previews/ai-controllers@2.0.0-preview-452564c37
@metamask-previews/analytics-controller@3.2.0-preview-452564c37
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-452564c37
@metamask-previews/announcement-controller@9.0.0-preview-452564c37
@metamask-previews/app-metadata-controller@3.0.0-preview-452564c37
@metamask-previews/approval-controller@10.0.0-preview-452564c37
@metamask-previews/assets-controller@17.0.0-preview-452564c37
@metamask-previews/assets-controllers@112.0.4-preview-452564c37
@metamask-previews/authenticated-user-storage@4.1.0-preview-452564c37
@metamask-previews/base-controller@10.0.0-preview-452564c37
@metamask-previews/base-data-service@2.1.0-preview-452564c37
@metamask-previews/bitcoin-regtest-up@2.0.0-preview-452564c37
@metamask-previews/bridge-controller@81.3.3-preview-452564c37
@metamask-previews/bridge-status-controller@76.3.3-preview-452564c37
@metamask-previews/build-utils@4.0.0-preview-452564c37
@metamask-previews/chain-agnostic-permission@2.0.0-preview-452564c37
@metamask-previews/chomp-api-service@6.0.0-preview-452564c37
@metamask-previews/claims-controller@1.0.2-preview-452564c37
@metamask-previews/client-controller@2.0.0-preview-452564c37
@metamask-previews/client-utils@3.0.3-preview-452564c37
@metamask-previews/compliance-controller@3.0.0-preview-452564c37
@metamask-previews/composable-controller@13.0.0-preview-452564c37
@metamask-previews/config-registry-controller@4.0.0-preview-452564c37
@metamask-previews/connectivity-controller@1.0.0-preview-452564c37
@metamask-previews/controller-utils@13.0.0-preview-452564c37
@metamask-previews/core-backend@11.0.0-preview-452564c37
@metamask-previews/cryptography@0.0.0-preview-452564c37
@metamask-previews/delegation-controller@4.0.0-preview-452564c37
@metamask-previews/earn-controller@13.0.2-preview-452564c37
@metamask-previews/eip-5792-middleware@4.0.1-preview-452564c37
@metamask-previews/eip-7702-internal-rpc-middleware@1.0.0-preview-452564c37
@metamask-previews/eip1193-permission-middleware@3.0.0-preview-452564c37
@metamask-previews/eth-block-tracker@16.0.0-preview-452564c37
@metamask-previews/eth-json-rpc-middleware@25.0.0-preview-452564c37
@metamask-previews/eth-json-rpc-provider@7.0.0-preview-452564c37
@metamask-previews/foundryup@2.0.0-preview-452564c37
@metamask-previews/gas-fee-controller@27.0.0-preview-452564c37
@metamask-previews/gator-permissions-controller@6.0.1-preview-452564c37
@metamask-previews/geolocation-controller@2.0.0-preview-452564c37
@metamask-previews/java-tron-up@2.0.0-preview-452564c37
@metamask-previews/json-rpc-engine@11.0.0-preview-452564c37
@metamask-previews/json-rpc-middleware-stream@9.0.0-preview-452564c37
@metamask-previews/keyring-controller@28.1.0-preview-452564c37
@metamask-previews/kyc-controller@0.6.0-preview-452564c37
@metamask-previews/local-node-utils@2.0.0-preview-452564c37
@metamask-previews/logging-controller@10.0.0-preview-452564c37
@metamask-previews/message-manager@15.0.0-preview-452564c37
@metamask-previews/messenger@3.0.0-preview-452564c37
@metamask-previews/messenger-cli@1.0.0-preview-452564c37
@metamask-previews/money-account-api-data-service@2.0.0-preview-452564c37
@metamask-previews/money-account-balance-service@3.1.0-preview-452564c37
@metamask-previews/money-account-controller@2.0.0-preview-452564c37
@metamask-previews/money-account-upgrade-controller@5.1.0-preview-452564c37
@metamask-previews/money-account-utils@2.1.0-preview-452564c37
@metamask-previews/multichain-account-service@14.1.0-preview-452564c37
@metamask-previews/multichain-api-middleware@5.0.0-preview-452564c37
@metamask-previews/multichain-network-controller@4.0.0-preview-452564c37
@metamask-previews/multichain-transactions-controller@8.0.0-preview-452564c37
@metamask-previews/name-controller@10.0.0-preview-452564c37
@metamask-previews/network-connection-banner-controller@1.0.0-preview-452564c37
@metamask-previews/network-controller@37.0.0-preview-452564c37
@metamask-previews/network-enablement-controller@7.0.1-preview-452564c37
@metamask-previews/notification-services-controller@29.0.2-preview-452564c37
@metamask-previews/passkey-controller@4.1.0-preview-452564c37
@metamask-previews/permission-controller@14.0.0-preview-452564c37
@metamask-previews/permission-log-controller@6.0.0-preview-452564c37
@metamask-previews/perps-controller@18.0.1-preview-452564c37
@metamask-previews/phishing-controller@18.1.1-preview-452564c37
@metamask-previews/platform-api-docs@0.2.1-preview-452564c37
@metamask-previews/polling-controller@17.0.0-preview-452564c37
@metamask-previews/preferences-controller@24.0.0-preview-452564c37
@metamask-previews/profile-metrics-controller@5.1.2-preview-452564c37
@metamask-previews/profile-sync-controller@33.0.0-preview-452564c37
@metamask-previews/ramps-controller@26.0.0-preview-452564c37
@metamask-previews/rate-limit-controller@8.0.0-preview-452564c37
@metamask-previews/react-data-query@2.0.0-preview-452564c37
@metamask-previews/remote-feature-flag-controller@7.0.0-preview-452564c37
@metamask-previews/sample-controllers@6.0.0-preview-452564c37
@metamask-previews/seedless-onboarding-controller@11.0.1-preview-452564c37
@metamask-previews/selected-network-controller@27.0.0-preview-452564c37
@metamask-previews/sentinel-api-service@2.0.0-preview-452564c37
@metamask-previews/shield-controller@7.0.3-preview-452564c37
@metamask-previews/signature-controller@40.0.0-preview-452564c37
@metamask-previews/smart-transactions-controller@27.0.3-preview-452564c37
@metamask-previews/snap-account-service@4.0.0-preview-452564c37
@metamask-previews/social-controllers@3.4.0-preview-452564c37
@metamask-previews/solana-test-validator-up@2.0.0-preview-452564c37
@metamask-previews/stellar-quickstart-up@0.0.0-preview-452564c37
@metamask-previews/storage-service@2.0.0-preview-452564c37
@metamask-previews/subscription-controller@10.0.1-preview-452564c37
@metamask-previews/transaction-controller@72.0.1-preview-452564c37
@metamask-previews/transaction-pay-controller@29.2.3-preview-452564c37
@metamask-previews/user-operation-controller@42.0.1-preview-452564c37
@metamask-previews/utils@12.0.0-preview-452564c37
@metamask-previews/wallet@15.0.1-preview-452564c37
@metamask-previews/wallet-cli@0.0.0-preview-452564c37

Comment thread oxlint-suppressions.json
@sahar-fehri
sahar-fehri force-pushed the feat/advanced-chart-core-implementation branch from 452564c to 45c2cd5 Compare September 28, 2026 14:47

@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.

Stale Bugbot comment from a previous run.

Comment thread packages/advanced-chart-core/src/widget/initChart.ts
Comment thread packages/advanced-chart-core/src/widget/ohlcvIngestion.ts
Comment thread packages/advanced-chart-core/src/overlays/tradeMarkers/index.ts
Comment thread packages/advanced-chart-core/src/overlays/positionLines/index.ts
Comment thread packages/advanced-chart-core/src/widget/ohlcvIngestion.ts
Comment thread packages/advanced-chart-core/src/pagination/priceApi.ts
Base automatically changed from chore/bootstrap-advanced-chart-core to main September 28, 2026 16:00
@sahar-fehri
sahar-fehri force-pushed the feat/advanced-chart-core-implementation branch from 45c2cd5 to f9dcb55 Compare September 28, 2026 16:00

@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 2 potential issues.

There are 5 total unresolved issues (including 3 from previous reviews).

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 f9dcb55. Configure here.

Comment thread packages/advanced-chart-core/src/widget/ohlcvIngestion.ts
Comment thread packages/advanced-chart-core/src/pagination/rnBacked.ts
@sahar-fehri
sahar-fehri force-pushed the feat/advanced-chart-core-implementation branch from f9dcb55 to d518059 Compare September 29, 2026 06:44
@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@11.0.0-preview-d518059
@metamask-previews/accounts-controller@40.0.0-preview-d518059
@metamask-previews/address-book-controller@8.0.0-preview-d518059
@metamask-previews/advanced-chart-core@0.0.0-preview-d518059
@metamask-previews/ai-controllers@2.0.0-preview-d518059
@metamask-previews/analytics-controller@3.2.0-preview-d518059
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-d518059
@metamask-previews/announcement-controller@9.0.0-preview-d518059
@metamask-previews/app-metadata-controller@3.0.0-preview-d518059
@metamask-previews/approval-controller@10.0.0-preview-d518059
@metamask-previews/assets-controller@17.0.0-preview-d518059
@metamask-previews/assets-controllers@112.0.4-preview-d518059
@metamask-previews/authenticated-user-storage@4.1.0-preview-d518059
@metamask-previews/base-controller@10.0.0-preview-d518059
@metamask-previews/base-data-service@2.1.0-preview-d518059
@metamask-previews/bitcoin-regtest-up@2.0.0-preview-d518059
@metamask-previews/bridge-controller@81.3.3-preview-d518059
@metamask-previews/bridge-status-controller@76.3.3-preview-d518059
@metamask-previews/build-utils@4.0.0-preview-d518059
@metamask-previews/chain-agnostic-permission@2.0.0-preview-d518059
@metamask-previews/chomp-api-service@6.0.0-preview-d518059
@metamask-previews/claims-controller@1.0.2-preview-d518059
@metamask-previews/client-controller@2.0.0-preview-d518059
@metamask-previews/client-utils@3.0.3-preview-d518059
@metamask-previews/compliance-controller@3.0.0-preview-d518059
@metamask-previews/composable-controller@13.0.0-preview-d518059
@metamask-previews/config-registry-controller@4.0.0-preview-d518059
@metamask-previews/connectivity-controller@1.0.0-preview-d518059
@metamask-previews/controller-utils@13.0.0-preview-d518059
@metamask-previews/core-backend@11.0.0-preview-d518059
@metamask-previews/cryptography@0.0.0-preview-d518059
@metamask-previews/delegation-controller@4.0.0-preview-d518059
@metamask-previews/earn-controller@13.0.2-preview-d518059
@metamask-previews/eip-5792-middleware@4.0.1-preview-d518059
@metamask-previews/eip-7702-internal-rpc-middleware@1.0.0-preview-d518059
@metamask-previews/eip1193-permission-middleware@3.0.0-preview-d518059
@metamask-previews/eth-block-tracker@16.0.0-preview-d518059
@metamask-previews/eth-json-rpc-middleware@25.0.0-preview-d518059
@metamask-previews/eth-json-rpc-provider@7.0.0-preview-d518059
@metamask-previews/foundryup@2.0.0-preview-d518059
@metamask-previews/gas-fee-controller@27.0.0-preview-d518059
@metamask-previews/gator-permissions-controller@6.0.1-preview-d518059
@metamask-previews/geolocation-controller@2.0.0-preview-d518059
@metamask-previews/java-tron-up@2.0.0-preview-d518059
@metamask-previews/json-rpc-engine@11.0.0-preview-d518059
@metamask-previews/json-rpc-middleware-stream@9.0.0-preview-d518059
@metamask-previews/keyring-controller@28.1.0-preview-d518059
@metamask-previews/kyc-controller@0.6.0-preview-d518059
@metamask-previews/local-node-utils@2.0.0-preview-d518059
@metamask-previews/logging-controller@10.0.0-preview-d518059
@metamask-previews/message-manager@15.0.0-preview-d518059
@metamask-previews/messenger@3.0.0-preview-d518059
@metamask-previews/messenger-cli@1.0.0-preview-d518059
@metamask-previews/money-account-api-data-service@2.1.0-preview-d518059
@metamask-previews/money-account-balance-service@3.1.1-preview-d518059
@metamask-previews/money-account-controller@2.0.0-preview-d518059
@metamask-previews/money-account-upgrade-controller@5.1.0-preview-d518059
@metamask-previews/money-account-utils@2.1.0-preview-d518059
@metamask-previews/multichain-account-service@14.1.0-preview-d518059
@metamask-previews/multichain-api-middleware@5.0.0-preview-d518059
@metamask-previews/multichain-network-controller@4.0.0-preview-d518059
@metamask-previews/multichain-transactions-controller@8.0.0-preview-d518059
@metamask-previews/name-controller@10.0.0-preview-d518059
@metamask-previews/network-connection-banner-controller@1.0.0-preview-d518059
@metamask-previews/network-controller@37.0.0-preview-d518059
@metamask-previews/network-enablement-controller@7.0.1-preview-d518059
@metamask-previews/notification-services-controller@29.0.2-preview-d518059
@metamask-previews/passkey-controller@4.1.0-preview-d518059
@metamask-previews/permission-controller@14.0.0-preview-d518059
@metamask-previews/permission-log-controller@6.0.0-preview-d518059
@metamask-previews/perps-controller@18.0.1-preview-d518059
@metamask-previews/phishing-controller@18.1.1-preview-d518059
@metamask-previews/platform-api-docs@0.2.1-preview-d518059
@metamask-previews/polling-controller@17.0.0-preview-d518059
@metamask-previews/preferences-controller@24.0.0-preview-d518059
@metamask-previews/profile-metrics-controller@5.1.2-preview-d518059
@metamask-previews/profile-sync-controller@33.0.0-preview-d518059
@metamask-previews/ramps-controller@26.0.1-preview-d518059
@metamask-previews/rate-limit-controller@8.0.0-preview-d518059
@metamask-previews/react-data-query@2.0.0-preview-d518059
@metamask-previews/remote-feature-flag-controller@7.0.0-preview-d518059
@metamask-previews/sample-controllers@6.0.0-preview-d518059
@metamask-previews/seedless-onboarding-controller@11.0.1-preview-d518059
@metamask-previews/selected-network-controller@27.0.0-preview-d518059
@metamask-previews/sentinel-api-service@2.0.0-preview-d518059
@metamask-previews/shield-controller@7.0.3-preview-d518059
@metamask-previews/signature-controller@40.0.0-preview-d518059
@metamask-previews/smart-transactions-controller@27.0.3-preview-d518059
@metamask-previews/snap-account-service@4.0.0-preview-d518059
@metamask-previews/social-controllers@3.4.0-preview-d518059
@metamask-previews/solana-test-validator-up@2.0.0-preview-d518059
@metamask-previews/stellar-quickstart-up@0.0.0-preview-d518059
@metamask-previews/storage-service@2.0.0-preview-d518059
@metamask-previews/subscription-controller@10.0.1-preview-d518059
@metamask-previews/transaction-controller@72.0.1-preview-d518059
@metamask-previews/transaction-pay-controller@29.2.3-preview-d518059
@metamask-previews/user-operation-controller@42.0.1-preview-d518059
@metamask-previews/utils@12.0.0-preview-d518059
@metamask-previews/wallet@15.0.1-preview-d518059
@metamask-previews/wallet-cli@0.0.0-preview-d518059

@sahar-fehri
sahar-fehri added this pull request to the merge queue Sep 29, 2026
Merged via the queue into main with commit 2d243ac Sep 29, 2026
342 checks passed
@sahar-fehri
sahar-fehri deleted the feat/advanced-chart-core-implementation branch September 29, 2026 08:45
@cursor cursor Bot mentioned this pull request Sep 29, 2026
4 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants