Extension for Bachelor Thesis

Hey there! :slight_smile:
I have a questions regarding the extensions.

I’m Olli and a computer science student and doing my bachelor’s thesis atm. I developed a game called CrowdChess, where the audience is playing chess as a team against the AI without a streamer in between. This means, all the interaction comes over the chat by writing commands, similar to Twitch Plays Pokemon. Since with the new API more interaction becomes possible, I’m currently building an panel-extension for CrowdChess, which allow the viewer to press buttons, instead of just typing their votes in the chat.

I completed the extensions onboarding process successfully, by entering my personal Tax information. No I’m asking myself, since I’m not planing to make any money with that extension, if this “CrowdChess Extension” will be accepted? Meaning that it will be available on the extension store for free. It will be only used in the context of my study, therefore it’s specifically tied to my channel’s page, from where I broadcast. I included two images, so that you make yourself a better picture, what I’m talking about.


I’m looking forward to hear from you! :blush:
Thanks!

Yes.

Well,

Extensions can be whitelisted to singular channels. I have two of them (two extensions whitelisted to different single channels).

Can’t 100% for sure say that Twitch will accept it, I’m not Twitch :stuck_out_tongue:

Also this probably shouldn’t be in the ideas/voting category

There are many questions jumbled together.

The idea of viewers in a channel collectively playing chess seems fine. It depends on the implementation as to whether it is approved. Monetisation has nothing to do with whether an Extension submitted for review is approved. We explicitly provide the ability to lock the channels upon which an Extension can appear via a broadcaster whitelist.

2 Likes

@rbartlet & @BarryCarlyon thanks for answer guys, that cleared up things a lot! :hugs:

Meantime I started developing my extension and was wondering about using my own web-socket connection, instead of using PubSub’s web-socket. I was reading in an other thread:

Using websockets in Extensions?

where it says, that it’s fine to use web-sockets for the communication between the EBS and extension, as long as it’s uses TLS. I’m using the extension boilerplate sample provided by Twitch,

let options = {
   key  : fs.readFileSync('../certs/testing.key'),
   cert : fs.readFileSync('../certs/testing.crt')
};

var server = https.createServer(options, app);

where the server uses node’s ‘https’ module and established a HTTP protocol over TLS/SSL. On the client side for the web-socket connection, I use socket.io and connect to it like this:

var socket = io.connect("wss://localhost:8080 ", {
    reconnection: true,
    transports: ['websocket']
});

This connection is will be secure, using ssl encryption.

It says in the documentation that, it is best practice, whenever I communicate with my EBS, to send the JWT and verify it using my extension’s shared secret. Will this way of implementing the server-client communication through socket.io secure enough, or do I also need to include the JWT, even when I only emit events between server & client? I’m a bit confused here…

Follow up question: Since I want use a second panel, I created a second extension (basically I just added another .html page to my extension boilerplate and referenced the url in twitch of my second extension), which uses the same mechanics as stated above. This means that each client on my channel will establish two socket-connections, one for each extension, but with the same endpoint, my EBS. Is this fine or does this cause a problem, which I am not aware of? Hope you can shed some light on the matter…:confused:

Once again, here is a screenshot:

Nice, but look at using nginx to handle your SSL termination in production, and be warning if you get a LOAD of people on your stream, you’ll need to scale your websocket!

Sounds good to me THUMBSUPEMOJI

Most of what you have said sounds fine, but… there is one area that raises questions for me - the use of two (co-operating) extensions. My questions primarily relate to a lack of understanding around intent. For example:

  • What are your thoughts on consistently managing identity?
  • What does this mean from an installation/configuration perspective?
  • I am not certain how this would/could be reviewed by our review team, unless each extension is able to operate in isolation… Do you plan on allowing extension independence?

Hey there, it’s me again. Your feedback last time made think a lot and I reconsidered some decisions, which in the end helped a lot to finish my extensions now. Once again thanks a lot! :sunglasses:

I decided to go with Ajax instead of WebSockets, which made it possible to develop multiple extensions using the same backend. For the security issue, it was enough for me to obtain a free license from CertBot and replace the testing.key testing.cert with the real one.

Here is an up-to-date screenshot of all the three final extensions:

Once approved and whitelisted for a group of chess broadcasters, I will perform a study of 45 minutes, where everyone will play CrowdChess using those extensions. Regarding the collected data of Twitch-user, I would like to know what are the necessary steps not to run in any privacy policy issues. Do I need to contact the Twitch Data Science-Team and ask for their approval? Maybe you know more about this, help is much appreciated! :slight_smile:

And now for everyone: In case you like chess and would like to try out this new experience, where the whole audience plays together and alters the content of the stream, you are more than welcome to participate. Date and time will follow…

Establishing privacy policy for your Extension should sufficiently cover you.

Thanks a ton!:smile:

Since I had a hard time developing my extensions, I thought it might help others to provide the code, to ease into it. Thanks for every suggestion, it helped me a lot to reach to my destination. Here is my repository on GitHub, feel free to check it out:

:two_hearts: