reown-com/react-native-examples

[bug]: MaxListenersExceededWarning: Possible EventEmitter memory leak detected

edenmeshulam opened this issue · 2 comments

Description

useEffect(() => {
    if (
      copyDialog ||
      approvalModal ||
      signTypedDataModal ||
      signModal ||
      sendTransactionModal
    ) {
      web3wallet.on('session_proposal', onSessionProposal);
      web3wallet.on('session_request', onSessionRequest);
    }
  }, [
    WCURI,
    approvalModal,
    copyDialog,
    signModal,
    signTypedDataModal,
    sendTransactionModal,
    requestEventData,
    requestSession,
    onSessionProposal,
    onSessionRequest,
    successPair,
  ]);

This code example is causing a multiple event listeners error, why do we need to call this event every state change?
when I call that event once time after initializing it works well without the error, but after some messages are received the connect stops receiving messages and I need to restart the app.

Issue Environment

  • dapps/v2Explorer
  • wallets/rn_cli_wallet
  • wallets/rn_cli_wallet_068_5
  • wallets/expo_wallet
  • wallets/web3wallet_tutorial
  • In my own code

Output of npx react-native info

System:
OS: macOS 13.4.1
CPU: (10) arm64 Apple M1 Pro
Memory: 108.92 MB / 32.00 GB
Shell: 5.9 - /bin/zsh
Binaries:
Node: 16.20.0 - /usr/local/bin/node
Yarn: 1.22.19 - /usr/local/bin/yarn
npm: 8.19.4 - /usr/local/bin/npm
Watchman: 2023.09.04.00 - /usr/local/bin/watchman
Managers:
CocoaPods: 1.11.3 - /usr/local/bin/pod
SDKs:
iOS SDK:
Platforms: DriverKit 22.4, iOS 16.4, macOS 13.3, tvOS 16.4, watchOS 9.4
Android SDK: Not Found
IDEs:
Android Studio: 2022.1 AI-221.6008.13.2211.9514443
Xcode: 14.3.1/14E300c - /usr/bin/xcodebuild
Languages:
Java: 17.0.6 - /usr/bin/javac
npmPackages:
@react-native-community/cli: Not Found
react: 17.0.2 => 17.0.2
react-native: ^0.68.0 => 0.68.7

Steps to reproduce

Call the session_proposal and session_request events once only after the initialization.
then call some message a couple of times and after some time it stops working,

Snack, code example, screenshot, or link to a repository

const onInitialize = useCallback(async () => {
    try {
      await createWeb3Wallet();
      if (web3wallet) {
        web3wallet.on('session_proposal', onSessionProposal);
        web3wallet.on('session_request', onSessionRequest);
        web3wallet.on('session_delete', onSessionDelete);
        setInitialized(true);
      }
    } catch (err: unknown) {
      console.log('Error for initializing', err);
    }
  }, []);

Any news ?

@edenmeshulam i think it's related to this: https://github.com/orgs/WalletConnect/discussions/3368#discussioncomment-6710452

Also, please check wallets/rn_cli_wallet implementation as it contains some refactors.

If its still happening, feel free to reach again with an MRE and we'll reopen this.