fix(http_fetcher): use undici.fetch when dispatcher is present#4097
Merged
khassel merged 1 commit intoMagicMirrorOrg:developfrom Apr 8, 2026
Merged
fix(http_fetcher): use undici.fetch when dispatcher is present#4097khassel merged 1 commit intoMagicMirrorOrg:developfrom
khassel merged 1 commit intoMagicMirrorOrg:developfrom
Conversation
Node's built-in fetch() and npm undici@8's Agent have incompatible internal handler interfaces. Passing an undici Agent as dispatcher to globalThis.fetch() throws "invalid onRequestStart method". Use undici.fetch only when a custom dispatcher is set (selfSignedCert), keeping globalThis.fetch for all other requests. Fixes MagicMirrorOrg#4093
4 tasks
khassel
approved these changes
Apr 8, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What's the problem?
The
selfSignedCertoption passes an undiciAgentasdispatchertofetch(). But Node's built-infetch()and undici@8'sAgentuse different internal handler APIs - passing them together throws:What's the fix?
When
selfSignedCertis enabled (i.e. adispatcheris set), use undici's ownfetch()instead of the global one. For all other requests, keep usingglobalThis.fetch.Why not just always use undici's fetch?
That would fix the crash - but it would break some tests. MSW (Mock Service Worker), which is used in our test suite to intercept HTTP requests, only hooks into
globalThis.fetch. Undici's fetch bypasses those interceptors entirely, so tests would start making real network requests instead of getting the mocked responses. We could rewrite all tests to use undici-compatible mocking instead - but that would be a massive change for no real benefit.Fixes #4093