UNPKG

mixer-client-node

Version:

A node client for connecting to mixer and the mixer services

80 lines (79 loc) 2.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.validateToken = exports.refreshAuth = void 0; const OAUTH_BASE_URL = 'https://mixer.com/api/v1/oauth'; function refreshAuth(client) { return new Promise(async (resolve, reject) => { if (!client.refreshToken) { return reject({ error: 'Invalid Request', message: 'No refresh token available', statusCode: 400 }); } const body = { client_id: client.clientid, grant_type: 'refresh_token', refresh_token: client.refreshToken }; if (client.secretid) body.client_secret = client.secretid; const options = { body, method: 'POST', uri: OAUTH_BASE_URL + '/token' }; try { const response = (await client.request(options)); client.tokens = { access: response.access_token, expires: (Date.now() + 1000 * response.expires_in) / 1000, refresh: response.refresh_token }; resolve(response); } catch (error) { reject(error); } }); } exports.refreshAuth = refreshAuth; function validateToken(client, token) { return new Promise(async (resolve, reject) => { const options = { body: { token }, method: 'POST', uri: OAUTH_BASE_URL + '/token/introspect' }; try { const response = (await client.request(options)); if (response.active) { if (response.token_type === 'access_token' && token === client.accessToken) { client.tokens = { access: client.accessToken, expires: response.exp, refresh: client.refreshToken }; client.user = { channelid: client.user.channelid, userid: response.sub }; client.clientid = response.client_id; } resolve(response); } else { reject({ error: 'Token is not active', statusCode: 401 }); } } catch (error) { reject(error); } }); } exports.validateToken = validateToken;