mixer-client-node
Version:
A node client for connecting to mixer and the mixer services
80 lines (79 loc) • 2.55 kB
JavaScript
;
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;