mixer-client-node
Version:
A node client for connecting to mixer and the mixer services
145 lines (144 loc) • 4.3 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Client = void 0;
const OAuthClient_1 = require("./OAuthClient");
const RequestHandler_1 = require("../Util/RequestHandler");
const ChatService_1 = require("../Services/ChatService");
const ConstellationService_1 = require("../Services/ConstellationService");
class Client {
constructor(client) {
if (!client.clientid) {
throw new Error('You must at a minimum provide the clientid in order to use this client');
}
this.client = client;
this.user = client.user;
}
/*
* Client/User Related Functions
*/
get clientid() {
return this.client.clientid;
}
set clientid(id) {
this.client.clientid = id;
}
get secretid() {
return this.client.secretid;
}
get user() {
return this._user;
}
set user(user) {
this._user = user;
}
/*
* Authentication Related Functions
*/
get accessToken() {
if (this.client.tokens)
return this.client.tokens.access;
else
return undefined;
}
get refreshToken() {
if (this.client.tokens)
return this.client.tokens.refresh;
else
return undefined;
}
get tokens() {
return this.client.tokens;
}
set tokens(tokens) {
this.client.tokens = tokens;
}
get expires() {
if (this.client.tokens)
return this.client.tokens.expires;
else
return undefined;
}
get didExpire() {
if (this.expires)
return this.expires * 1000 <= Date.now();
else
return true;
}
refresh() {
return OAuthClient_1.refreshAuth(this);
}
introspect(token) {
return OAuthClient_1.validateToken(this, token);
}
/*
* Constellation Related Functions
*/
get constellationService() {
if (!this._constellationService)
this._constellationService = new ConstellationService_1.default(this.client.clientid);
return this._constellationService;
}
subscribeTo(event) {
this.constellationService.subscribe(event);
}
unsubscribeTo(event) {
this.constellationService.unsubscribe(event);
}
get subscribedEvents() {
return this.constellationService.subscribedEvents;
}
/*
* Chat Related Functions
*/
get chatService() {
if (!this._chatService)
this._chatService = new ChatService_1.default(this);
return this._chatService;
}
joinChat(channelidOrReconnect, useridOrReconnect, autoReconnect = false) {
let channelid;
let userid;
let reconnect;
if (typeof channelidOrReconnect === 'number') {
channelid = channelidOrReconnect;
if (typeof useridOrReconnect === 'number') {
userid = useridOrReconnect;
reconnect = autoReconnect;
}
else {
userid = this.user.userid;
reconnect = typeof useridOrReconnect === 'boolean' ? useridOrReconnect : false;
}
}
else if (this.user) {
channelid = this.user.channelid;
userid = this.user.userid;
reconnect = typeof channelidOrReconnect === 'boolean' ? channelidOrReconnect : false;
}
return this.chatService.join(userid, channelid, reconnect);
}
get connectedChannels() {
return this.chatService.connectedChats;
}
sendChat(message, channelid) {
this.chatService.sendMessage(message, channelid);
}
closeChat(channelid) {
this.chatService.close(channelid);
}
/*
* Misc Functions
*/
request(options) {
options.headers = options.headers || {};
Object.assign(options.headers, {
'Client-ID': this.client.clientid,
'User-Agent': "Unsmart's Mixer-Client-Node"
});
if (options.auth && this.client.tokens)
Object.assign(options.headers, { Authorization: 'Bearer ' + this.client.tokens.access });
options.json = true;
return RequestHandler_1.requestAPI(options);
}
}
exports.Client = Client;