Skip to content

feat(temp): Perps Controller integration#40078

Closed
gambinish wants to merge 369 commits intomainfrom
perps/poc-controller-integration-temp
Closed

feat(temp): Perps Controller integration#40078
gambinish wants to merge 369 commits intomainfrom
perps/poc-controller-integration-temp

Conversation

@gambinish
Copy link
Member

@gambinish gambinish commented Feb 13, 2026

Description

Summary

This PR integrates @metamask/perps-controller into MetaMask Extension, establishing the controller layer for perpetual futures trading functionality. It was scoped down from a larger feature branch to focus on controller integration only — the initial UI was handled in a separate "mocked" PR (#40076, which was merged first).

What's Included

Core controller setup:

  • PerpsController integrated via app/scripts/controllers/perps/infrastructure.ts — wires platform-specific infrastructure (KeyringController signing, MetaMetrics, Sentry, performance monitoring)
  • PerpsStreamBridge (app/scripts/controllers/perps/perps-stream-bridge.ts) — per-connection manager for WebSocket subscription lifecycle, bridging background controller streams to the UI outStream
  • Controller registered in metamask-controller.js with messenger, stream bridge, and API surface (perpsInit, perpsActivateStreaming, perpsViewActive, etc.)
  • Controller messenger defined in app/scripts/controller-init/messengers/perps-controller-messenger.ts

Dependencies:
@metamask/perps-controller@^1.0.0 (production package — preview dependency fully removed)

Related Branches

Open in GitHub Codespaces

Changelog

CHANGELOG entry: Integrate Perps Controller

Related issues

Fixes:

Manual testing steps

  1. Go to this page...

Screenshots/Recordings

Before

After

Pre-merge author checklist

Pre-merge reviewer checklist

  • I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed).
  • I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots.

Note

Medium Risk
Adds a new background controller and per-connection streaming lifecycle to metamask-controller plus new build/policy allowances for multiple ESM dependencies, which could affect runtime stability and bundle/permission constraints if misconfigured.

Overview
Integrates @metamask/perps-controller into the extension controller layer by registering a new PerpsController (with persisted-state merge and a defensive ensureInitialized guard) and exposing a background API surface (perpsInit, trading/data methods, and preferences helpers).

Adds a per-UI-connection PerpsStreamBridge to manage WebSocket subscription lifecycles and emit perpsStreamUpdate messages (static account/order/position streams plus dynamic price/orderbook/candle streams), including teardown on disconnect/testnet toggle/outstream end.

Updates controller messenger wiring and initialization plumbing, adds a geoblock fallback env var (MM_PERPS_BLOCKED_REGIONS), removes prior perps-controller mocks in Jest/webpack configs, and extends build/webpack/LavaMoat policies to allow the new perps and SDK ESM/transitive dependencies; includes comprehensive unit tests for the init logic, infrastructure stubs, and stream bridge.

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

@github-actions
Copy link
Contributor

CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes.

@socket-security
Copy link

socket-security bot commented Feb 13, 2026

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Added@​metamask/​perps-controller@​1.0.0721008389100
Addedws@​8.19.09810010086100
Updatedviem@​2.44.4 ⏵ 2.46.398 -1100100 +197100

View full report

@socket-security
Copy link

socket-security bot commented Feb 13, 2026

Caution

MetaMask internal reviewing guidelines:

  • Do not ignore-all
  • Each alert has instructions on how to review if you don't know what it means. If lost, ask your Security Liaison or the supply-chain group
  • Copy-paste ignore lines for specific packages or a group of one kind with a note on what research you did to deem it safe.
    @SocketSecurity ignore npm/PACKAGE@VERSION
Action Severity Alert  (click "▶" to expand/collapse)
Block Medium
System shell access: npm @inquirer/external-editor in module child_process

Module: child_process

Location: Package overview

From: ?npm/@metamask/perps-controller@1.0.0npm/@inquirer/external-editor@2.0.3

ℹ Read more on: This package | This alert | What is shell access?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should avoid accessing the shell which can reduce portability, and make it easier for malicious shell access to be introduced.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/@inquirer/external-editor@2.0.3. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
Network access: npm @metamask/perps-controller in module globalThis["fetch"]

Module: globalThis["fetch"]

Location: Package overview

From: package.jsonnpm/@metamask/perps-controller@1.0.0

ℹ Read more on: This package | This alert | What is network access?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should remove all network access that is functionally unnecessary. Consumers should audit network access to ensure legitimate use.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/@metamask/perps-controller@1.0.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
Network access: npm @myx-trade/sdk in module globalThis["fetch"]

Module: globalThis["fetch"]

Location: Package overview

From: ?npm/@metamask/perps-controller@1.0.0npm/@myx-trade/sdk@0.1.265

ℹ Read more on: This package | This alert | What is network access?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should remove all network access that is functionally unnecessary. Consumers should audit network access to ensure legitimate use.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/@myx-trade/sdk@0.1.265. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
Network access: npm @nktkas/hyperliquid in module globalThis["fetch"]

Module: globalThis["fetch"]

Location: Package overview

From: ?npm/@metamask/perps-controller@1.0.0npm/@nktkas/hyperliquid@0.30.3

ℹ Read more on: This package | This alert | What is network access?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should remove all network access that is functionally unnecessary. Consumers should audit network access to ensure legitimate use.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/@nktkas/hyperliquid@0.30.3. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
Network access: npm ethers in module globalThis["fetch"]

Module: globalThis["fetch"]

Location: Package overview

From: ?npm/@metamask/perps-controller@1.0.0npm/ethers@6.16.0

ℹ Read more on: This package | This alert | What is network access?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should remove all network access that is functionally unnecessary. Consumers should audit network access to ensure legitimate use.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/ethers@6.16.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
Network access: npm ethers in module net

Module: net

Location: Package overview

From: ?npm/@metamask/perps-controller@1.0.0npm/ethers@6.16.0

ℹ Read more on: This package | This alert | What is network access?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should remove all network access that is functionally unnecessary. Consumers should audit network access to ensure legitimate use.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/ethers@6.16.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
Network access: npm ethers in module http

Module: http

Location: Package overview

From: ?npm/@metamask/perps-controller@1.0.0npm/ethers@6.16.0

ℹ Read more on: This package | This alert | What is network access?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should remove all network access that is functionally unnecessary. Consumers should audit network access to ensure legitimate use.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/ethers@6.16.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
Network access: npm ethers in module https

Module: https

Location: Package overview

From: ?npm/@metamask/perps-controller@1.0.0npm/ethers@6.16.0

ℹ Read more on: This package | This alert | What is network access?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should remove all network access that is functionally unnecessary. Consumers should audit network access to ensure legitimate use.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/ethers@6.16.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
Network access: npm micro-eth-signer in module globalThis["fetch"]

Module: globalThis["fetch"]

Location: Package overview

From: ?npm/@metamask/perps-controller@1.0.0npm/micro-eth-signer@0.18.1

ℹ Read more on: This package | This alert | What is network access?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should remove all network access that is functionally unnecessary. Consumers should audit network access to ensure legitimate use.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/micro-eth-signer@0.18.1. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
Network access: npm wretch in module globalThis["fetch"]

Module: globalThis["fetch"]

Location: Package overview

From: ?npm/@metamask/perps-controller@1.0.0npm/wretch@2.11.1

ℹ Read more on: This package | This alert | What is network access?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should remove all network access that is functionally unnecessary. Consumers should audit network access to ensure legitimate use.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/wretch@2.11.1. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn Low
Potential code anomaly (AI signal): npm ethers is 100.0% likely to have a medium risk anomaly

Notes: The analyzed code fragment appears to be a conventional ABI interface utility (likely from a library like ethers.js) used to parse, encode, and decode Ethereum function calls, events, and errors. There is no evidence of malicious behavior such as data exfiltration, remote control, or code injection. Minor anomalies (typo in an error message and a partially commented/unfinished block) are present but do not constitute malicious activity. Overall security risk from this fragment is low, assuming it is used as intended within a trusted library context.

Confidence: 1.00

Severity: 0.60

From: ?npm/@metamask/perps-controller@1.0.0npm/ethers@6.16.0

ℹ Read more on: This package | This alert | What is an AI-detected potential code anomaly?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: An AI system found a low-risk anomaly in this package. It may still be fine to use, but you should check that it is safe before proceeding.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/ethers@6.16.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

View full report

@metamaskbotv2
Copy link
Contributor

metamaskbotv2 bot commented Feb 13, 2026

✨ Files requiring CODEOWNER review ✨

👨‍🔧 @MetaMask/extension-platform (1 files, +34 -0)
  • 📁 test/
    • 📁 e2e/
      • 📁 fixtures/
        • 📄 onboarding-fixture.json +34 -0

🕵️ @MetaMask/extension-privacy-reviewers (1 files, +1 -0)
  • 📄 privacy-snapshot.json +1 -0

👨‍🔧 @MetaMask/perps (4 files, +1370 -0)
  • 📁 app/
    • 📁 scripts/
      • 📁 controllers/
        • 📁 perps/
          • 📄 infrastructure.test.ts +79 -0
          • 📄 infrastructure.ts +176 -0
          • 📄 perps-stream-bridge.test.ts +865 -0
          • 📄 perps-stream-bridge.ts +250 -0

📜 @MetaMask/policy-reviewers (8 files, +1700 -0)
  • 📁 lavamoat/
    • 📁 browserify/
      • 📁 beta/
        • 📄 policy.json +231 -0
      • 📁 experimental/
        • 📄 policy.json +231 -0
      • 📁 flask/
        • 📄 policy.json +231 -0
      • 📁 main/
        • 📄 policy.json +231 -0
    • 📁 webpack/
      • 📁 mv2/
        • 📁 beta/
          • 📄 policy.json +194 -0
        • 📁 experimental/
          • 📄 policy.json +194 -0
        • 📁 flask/
          • 📄 policy.json +194 -0
        • 📁 main/
          • 📄 policy.json +194 -0

Tip

Follow the policy review process outlined in the LavaMoat Policy Review Process doc before expecting an approval from Policy Reviewers.


🧪 @MetaMask/qa (1 files, +34 -0)
  • 📁 test/
    • 📁 e2e/
      • 📁 fixtures/
        • 📄 onboarding-fixture.json +34 -0

Copy link

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

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

outStream.mmFinished = true;
this.removeListener('update', handleUpdate);
patchStore.destroy();
perpsStream.destroy();
Copy link

Choose a reason for hiding this comment

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

Misleading indentation places cleanup inside guard block

Low Severity

The perpsStream.destroy() call has 8 spaces of indentation while all other statements inside the same if (!outStream.mmFinished) block use 10 spaces. This makes it visually appear to sit at the same level as the if statement (i.e., outside the block), even though it is syntactically inside. The inconsistency could mislead a future contributor into thinking it's already outside the guard and accidentally moving it or duplicating cleanup logic.

Fix in Cursor Fix in Web

Copy link

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

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

Copy link

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

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

Copy link

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

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

Copy link

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

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

Copy link

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

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

Copy link

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

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

@sonarqubecloud
Copy link

sonarqubecloud bot commented Mar 9, 2026

@metamaskbotv2
Copy link
Contributor

metamaskbotv2 bot commented Mar 10, 2026

Builds ready [78ca711]
⚡ Performance Benchmarks
👆 Interaction Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Load New Accountload_new_account415264715183544715
total415264715183544715
Confirm Txconfirm_tx6088606161292861146129
total6088606161292861146129
Bridge User Actionsbridge_load_page2362302425239242
bridge_load_asset_picker1411391431142143
bridge_search_token7027027020702702
total107910741084410831084
🔌 Startup Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Standard HomeuiStartup14681201191012915101729
load12161006155710612611435
domContentLoaded12091000155310412561429
domInteractive291790182678
firstPaint167721201131219351
backgroundConnect22019943829221258
firstReactRender20134252330
initialActions208224
loadScripts1008810134510010491215
setupStore1464461627
numNetworkReqs312290192283
Power User HomeuiStartup20241672245014120972267
load11811058168814311751551
domContentLoaded11641051167813611601503
domInteractive3419234233548
firstPaint206771530205244374
backgroundConnect30826940029318375
firstReactRender271669102944
initialActions107115
loadScripts94283614251289431269
setupStore1783461931
numNetworkReqs68371824455168
🧭 User Journey Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Onboarding Import WalletimportWalletToSocialScreen2192172201220220
srpButtonToSrpForm94939619596
confirmSrpToPwForm21212102121
pwFormToMetricsScreen15151601616
metricsToWalletReadyScreen16151711617
doneButtonToHomeScreen65961175759699757
openAccountMenuToAccountListLoaded292529182934629272934
total39873896417711040484177
Onboarding New WalletcreateWalletToSocialScreen2182182191218219
srpButtonToPwForm1061031082107108
createPwToRecoveryScreen888088
skipBackupToMetricsScreen36353713537
agreeButtonToOnboardingSuccess16161601616
doneButtonToAssetList48646850816495508
total87185388915883889
Asset DetailsassetClickToPriceChart1141051268116126
total1141051268116126
Solana Asset DetailsassetClickToPriceChart77747927879
total77747927879
Import Srp HomeloginToHomeScreen21291875245521723102455
openAccountMenuAfterLogin524071115771
homeAfterImportWithNewWallet1672488248191424122481
total38522987451270444714512
Send TransactionsopenSendPageFromHome34204494344
selectTokenToSendFormLoaded23193252632
reviewTransactionToConfirmationPage8568478658861865
total9149139161916916
SwapopenSwapPageFromHome37295393453
fetchAndDisplaySwapQuotes270026932708527032708
total273527302746727322746
🌐 Dapp Page Load Benchmarks

Current Commit: 78ca711 | Date: 3/9/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.04s (±38ms) 🟡 | historical mean value: 1.05s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 727ms (±36ms) 🟢 | historical mean value: 740ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 80ms (±13ms) 🟢 | historical mean value: 83ms ⬇️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.04s 38ms 1.01s 1.33s 1.06s 1.33s
domContentLoaded 727ms 36ms 708ms 1000ms 751ms 1000ms
firstPaint 80ms 13ms 60ms 188ms 92ms 188ms
firstContentfulPaint 80ms 13ms 60ms 188ms 92ms 188ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 7.6 MiB (100%)
  • ui: 8.26 MiB (100%)
  • common: 10.99 MiB (100%)

geositta
geositta previously approved these changes Mar 10, 2026
Copy link
Contributor

@geositta geositta left a comment

Choose a reason for hiding this comment

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

Thanks for latest changes, this looks good to merge from my side.

The Perps deposit flow is now consistently routed through the controller backed confirmation path, duplicate hook paths were cleaned up, and confirm footer behavior is back to the standard queue flow.

Just one request - a stale jsdoc comment to cleanup.

* Navigate to the Activity tab when a confirmation disappears without
* explicit user action (e.g. dapp changes network). Per-type routing
* after user-initiated confirm/cancel is handled elsewhere (e.g.
* useShieldConfirm, usePerpsConfirm inside useTransactionConfirm).
Copy link
Contributor

Choose a reason for hiding this comment

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

Please update this comment reference now that usePerpsConfirm hook no longer exists.

this.#viewActive = active;
}

activateStreaming(
Copy link
Contributor

Choose a reason for hiding this comment

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

@gambinish I don’t see current UI callers of this so it would be safer to deprecate/remove this path to prevent regression.

Copy link
Member

Choose a reason for hiding this comment

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

Can this and the changes to index.tsx be reverted? Are these just remnants from the removed changes?

}));

jest.mock('./alerts/useSpenderAlerts', () => ({
useSpenderAlerts: () => [],
Copy link
Member

@matthewwalsh0 matthewwalsh0 Mar 10, 2026

Choose a reason for hiding this comment

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

Does this exist or all changes in this file also remnants?

@gambinish
Copy link
Member Author

We got enough pushback on this PR to warrant breaking it out into more incremental PRs. Here they are in order that they should be merged:

  1. feat: Install perps-controller v1, remove local mocked alias #40767
  2. feat: Integrate perps infrastructure and streaming bridge #40769
  3. feat: Add perps live stream hooks via stream provider #40779
  4. feat: integrate streams with perps ui #40781

Adding the do-not-merge label here to avoid inadvertently merging.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

DO-NOT-MERGE Pull requests that should not be merged size-XL team-perps Perps team

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

8 participants