Skip to content

Provider emits warning: ObjectMultiplex - orphaned data for stream "publicConfig" #294

@h4l

Description

@h4l

I'm using createExternalExtensionProvider() to create a Provider to interact with MetaMask from another browser extension. This works well, but a side-effect is that a lot of warnings are logged to the console:

ObjectMultiplex - orphaned data for stream "publicConfig"

I looked into this, and my understanding is as follows:

  • The communication streams between the in page/extension provider and MetaMask itself multiplex multiple named streams over a single connection using ObjectMultiplex from @metamask/object-multiplex
  • The warning occurs when an ObjectMultiplex stream receives a message for a named substream that has not been created, so such messages will be ignored.
  • The MetaMask extension itself is sending messages to the Provider I create for the publicConfig named substream
    • I can see such messages being received from the Port opened to communicate with MetaMask from my extension
    • It's not that some legacy thing in my extension is using the publicConfig stream.
  • MetaMask's own injected contentscript ignores messages for the publicConfig substream, so web pages using MetaMask's provider don't show these warnings: https://github.com/MetaMask/metamask-extension/blob/c40dbb1ec72b91827debb2fffba4097a838f21c7/app/scripts/contentscript.js#L254
  • The StreamProvider in this repo that creates the ObjectMultiplex doesn't ignore publicConfig messages:
    const mux = new ObjectMultiplex();

Should StreamProvider ignore these messages itself, like MetaMask's contentscript does? I was tempted to open a PR to do this, but I don't have enough understanding of the legacy context around these messages to know if that makes sense.

It's not currently possible to customise the stream created by createExternalExtensionProvider() to filter these messages before they get to StreamProvider.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions