Skip to content

Tools for Twitch Developers to assist them working on a Twitch Extension

License

Notifications You must be signed in to change notification settings

BarryCarlyon/twitch_extension_tools

Repository files navigation

CodeQL

What is this

This Program is an alternative version of the Twitch Developer Rig.

Primarilly this works as a glorified Rest Client but handles the required JWT generation or App Access Token generation and maintance as needed.

Generally it should serve as a "test tool" and not used to manage a live extension, but you could, saves you writing your own Bits Product, or Extension Config Managment tool! If you do so it's at your own risk!

First Launch Screenshot

Check out more Screenshots

Installation and Updates

This is an Electron App, so it maybe installed from the GitHub releases tab.

The Windows Build is Code Signed with the Publisher Barry Carlyon The Mac Builds are Code Signed with Apple Cerficates that identify Barry Carlyon

You can download the latest version, for Windows and Mac from here on GitHub under releases. These builds will self update

Or

Download on Mac App Store

This Mac App Store build will update from the App Store itself and may lag a little behind releases here.

Or

Install using winget

winget install BarryCarlyon.BarryCarlyonExtensionTools

Uninstallation

You can use Windows "Add and Remove Programs" to uninstall the program.

And on mac just throw it in the trash! :-P

You may need to manually remove data stored in the data/config storage location below.

Data/Config Storage

Your Extensions Client IDs and secrets are stored locally unencrypted in the file config.json in the following location:

Windows:

%appdata%/BarryCarlyonTwitchExtensionTools/

Mac DMG/Manual install:

~/Library/Application Support/BarryCarlyonTwitchExtensionTools/

Mac App Store

~/Library/Containers/com.barrycarlyon.twitch-extension-tools/Data/Library/Application\ Support/BarryCarlyonTwitchExtensionTools/

In the file config.json

Which follows the format:

{
    "extensions": {
        ...
        "a_client_id": {
            "name": "Your Entered Name",
            "client_id": "",
            "extension_secret": "base 64 encoded secret",
            "user_id": "Twitch owner ID"
        },
        ...
        "a_client_id_with_secret": {
            "name": "Your Entered Name",
            "client_id": "",
            "extension_secret": "base 64 encoded secret",
            "client_secret": "a client API secret",
            "user_id": "Twitch owner ID",
            "access_token": "A recently generated App Access Token"
        }
        ...
    },
    "active": {
        "client_id": "Selected active Extension ClientID set to use",
        "version": "Selected Version to talk to"
    },
    "window": {
        "size": [ width, height ],
        "position": [ x, y ]
    }
}

⭐ Tip: If you open the Application and the window has gone missing, close the app, open config.json for editing and completely reset "window" to {} and then reopen the app, it'll reset to default display, top left. The App does try to magically 0,0 the window if this happens but it might need a hand!

Supported Features

We will use the Get Extensions API to see which features are enabled for your selected version of your extension and block/allow access in the UI as needed. Don't forget to turn on/off features (such as the Config Service of Chat Service) you'll need to use the Developer Console to do so.

If a Key Sets Extension API Client Secret is Provided, alllowing the generation of client credentials

Common Gotchas/FAQ

Q. No matter what I do, it just claims authentication failed when trying to validate/refresh my Extension

A. Since the Extension API's mostly utilise a JWT, this program creates a JWT on the fly with only a 4 second expiration. So if your system clock is significantly out of date, this can generate an already expired JWT. So check your system clock is accurate.

Not Supported Features

Extension View simulation, this might get explored but it's not gonna be as effective as actually testing on the Twitch Website itself (when in localtest).

Whilst the Twitch Developer Rig is now marked as no longer supported, view testing in the Rig remains working, but you may need another tool to update any Rig manifests you have stored, you can check out the Twitch Developer Rig Manifester to provide manifest import and revision. This manifester tool might at somepoint get added to this tool.

Notes

  • Uses Electron to provide as a Desktop App
  • Uses Bootstrap for primary layout
  • Uses GitHub for update delivery and code management (and mac app store for MAS builds)
  • JWT tokens are generated inside the App via auth0/node-jsonwebtoken, as apposed to "ClientSide" like this example
  • A number of sindresorhus Electron Modules.

Insomnia?

Basically this app is a "save my Extension configs" Insomnia-esque Rest Client. That wraps the main Extension functions in a handy Application. With some extra features!

Insomnia is a Rest client. I have written a Plugin for Insomnia to aid with JWT generating inside Insomnia itself. You can find that here on Github

Warranty

If you break your extension from using this tool it's your own fault and the author(s) accept no responsbility for problems caused to your extension from using this tool. Granted the worse thing you might do is deprecate a bits product you actually needed.....

License

This project is Licensed under Do What The F*ck You Want To Public License, so Just Do What the F*ck you want to!

Development Notes

This is an Electron Project

To run locally, after cloning, just

$ npm install
$ npn run start

Further Help with Twitch API

TwitchDev Discord

OMGLIEKWUT OHMYGOODNESS U SO MUCH HELP

Thank you for the help I want to give you beer/coffee money -> Check the Funding/Sponsor details