Skip to content

Latest commit

 

History

History
117 lines (86 loc) · 3.04 KB

README.md

File metadata and controls

117 lines (86 loc) · 3.04 KB

Basic Twitch OAuth Flow

Intended to reduce the expected prerequisite experience required for implementing Twitch OAuth to use the Twitch API(s)

Motivation

The statements below are still a bit beyond your experiences and you need/want to use a Twitch API… is my motivation.

Twitch API(s) now require that some endpoint request must have an authorization in the header. To acquire an access token for a Twitch API you must be familiar with an authentication flow. The flows supported by Twitch are Implicit code, authorization code, and client credentials.

See Twitch Authentication Docs

Features

  • Quick setup and usage.

Installation

Create an App

Required reading Getting Started with the Twitch API

$ npm install @callowcreation/basic-twitch-oauth

Loading and configuration

A Node server is required, express is used here.

const express = require('express');
const crypto = require('crypto');
const qs = require('querystring');

const app = express();

const buffer = crypto.randomBytes(16);
const state = buffer.toString('hex');

const twitchOAuth = new TwitchOAuth({
    client_id: process.env.CLIENT_ID,
    client_secret: process.env.CLIENT_SECRET,
    redirect_uri: process.env.REDIRECT_URI,
    scopes: [
        'user:edit:broadcast',
		'moderation:read'
    ]
}, state);

// redirect_uri ends up here
app.get('/auth-callback', async (req, res) => {
    const qs = require('querystring');
    const req_data = qs.parse(req.url.split('?')[1]);
    const code = req_data['code'];
    const state = req_data['state'];

	try {
		twitchOAuth.confirmState(state);
		await twitchOAuth.fetchToken(code);
		res.redirect('/home');
	} catch (err) {
		console.error(err);
		res.redirect('/failed');
	}
	
});

Common Usage

app.get('/extensions', async (req, res) => {
	const url: string = `https://api.twitch.tv/helix/users/extensions?user_id=${broadcaster_id}`;
	const json = await twitchOAuth.getEndpoint(url);
	res.status(200).json(json);
});

Handling exceptions

try {
	const url: string = `https://api.twitch.tv/helix/moderation/enforcements/status?broadcaster_id=${broadcaster_id}`;
	const data = [
		{ msg_id: '0', msg_text: 'I killing this', user_id: '101223367' },
		{ msg_id: '1', msg_text: 'that was a death blow', user_id: '75987197' }
	];
	const json = await twitchOAuth.postEndpoint(url, { data });
	res.status(200).json(json);
} catch (error) {
	console.error(error); 
	res.send(error_message); 
}

Contact

License

MIT