404 in Hosted Test - NoSuchKey

Hi everyone,

I’m getting a 404 when in Hosted Test (all is working fine in Local Test, appart from an annoying and unrelated CORS thing).

I’m using React.

The problem doesn’t seem to fit any of the obvious ones:

  • I’m uploading a ZIP that is inside the build folder. The only contained folder is ‘static’. I’ve looked for a way to flatten it but there isn’t an easy one, so I figured it can’t the issue.
  • My assets are served via relative paths (screenshot of the assets manifest attached).
  • My react-routes all start with ‘*/’ (I’ve also tried with ‘./’, ‘**/’ and the plain ‘panel.html’.
  • In my package.json, I have the “homepage”: “.”,

Not sure where to go from here, please help :smiley:

Your zip likely contained a folder of files instead of the files.

Your second screenshot: What you uploaded didn’t include a panel.html file.
Your third screeenshot: you didn’t generate a panel.html file

Your last screenshot: You can’t use “routing” with a single entry point like this in a Twitch Extension. Since the server didn’t route to your entry point, it routed to panel.html which doesn’t exist.

Twitch’s Extension CDN is “dumb” it expects HTML, and you’ve tried to use “intelligence”

For React specific help you might want to pop over to the Developer Discord and post in the Extnesion help (or JS help) channels TwitchDev

Thanks Barry, this was really helpful.

So I have to handle the ‘routing’ manually with an if-else in the App.js? How can I know that the Config or Panel pages are called?

Twitch extensions “expect” HTML files to exist.
You define the HTML files for each view in the console.

So you choose

I don’t know I don’t use react.

When buidling extensions I seperate my “config” and “dashboard” JS from my “viewer” JS to keep the bundle for each view minimal.

So each “view” is a seperate “app” in this regard. To keep the bundle/file size low (very useful for mobile viewers and prevents “leaking” my management code to viewers)

Thanks Barry!

As suggested on the Discord, I ended up using a single entry point (specifying the same file in the console) and then checking the query params to render the Panel or Config.