onChanged can only run once per page load.
It is used to trigger the config to be loaded from Twitch into JS
If you do a set (via EBS call or JS called) onChanged
is not called again
config set
is not a promise. It’s a sync call to store the config into Twitch.
That config is not sent to running instances of an extension.
See also: https://github.com/BarryCarlyon/twitch_misc/tree/main/extensions/config_service
When I do a config set via an EBS/API call, I also push out the same config over pubsub so running instances of extension recv the new configuration.
So to test what you are doing.
- page loads
- wait for onAuthorised
- load config via
onChanged
- hit a button to trigger a save event with the new config
- reload the page
If you are running the JS call to set multiple times very quickly then you will cause weirdness to occur. The API only has a 12 per minute rate limit iirc
So your HTML/JS needs to be something along the lines of, (some psudecode here)
window.Twitch.ext.onAuthorized(auth => {
// the page has loaded and is ready
loadConfig();
});
function loadConfig() {
window.Twitch.ext.configuration.onChanged(() => {
var broadcaster_config = window.Twitch.ext.configuration.broadcaster;
if (broadcaster_config && broadcaster_config.content) {
try{
broadcaster_config.content = JSON.parse(broadcaster_config.content);
// we have broadcaster config loaded and parsed it to JSON
} catch (e) {
}
}
buildConfigForm();
enableConfigForm();
});
}
function enableConfigForm() {
mySaveButton remove disabled
mySaveButton.addEventListener('click', () => {
serialise form/collect config from form
window.Twitch.ext.configuration.set("broadcaster", '1', JSON.strinfigy(theconfig));
});
}
(Note that .set accepts a string, so it doesn’t have to be JSON in theory)
That in some JS and some pseudo code will do the trick
Sync.
It doesn’t return anything, you cannot catch a succeed of a fail from it. It is fire and forget.
a window.Twitch.ext.onError
might catch something but might not (I don’t use set
in the front end too much myself I prefer the EBS/api calls)
You did enable the config service in the developer console for this version of the extension?
It’s under “capabilities”
With it disabled, you won’t get errors to the set
request (or API request). It just won’t load in the front end and the API is unpredicatble as the service is “disabled”
I have samples for processing config from onChanged but not set
it is JUST fire and forget (I don’t tend to use set)
My “debug all the things” Twitch Extension https://github.com/BarryCarlyon/twitch_extension_debug/blob/main/extension/panel/config_service.js has the config “parse” logic I tend to use.
TLDR
- It’s not a promise,
- you cannot catch success/fail with the config set calls persae but onError might report one.
It seems you tried to over engineer the config setting stuff but it doesn’t support it since it returns nothing.
EDIT
I had a spare two mintues to throw in a config tester into my TEST ALL THE THINGS
With https://github.com/BarryCarlyon/twitch_extension_debug/blob/main/extension/panel/config_service.js#L56 being the set from the form logic.
So if I do
And hit “Save Broadcaster Config”
Then the “running config” is still {"cat":"dog"}
and will remain that till until I reload the page.
Unless, I use PubSub (or something else) to forward the same config to running instances.
after reloading the page