Files
watchparty/app/src/CallManager.js
T

71 lines
2.1 KiB
JavaScript

import { VoxeetSDK } from '@voxeet/voxeet-web-sdk';
import { GetVoxeetTokenApi, GetRefreshedVoxeetTokenApi } from './Api';
class CallManager {
constructor(listener) {
this.listener = listener;
this.__refreshToken = null;
this.__accessToken = null;
}
toggleCall(onCall, conferenceRoomId) {
if (onCall === true) this.leaveCall();
else this.boot(conferenceRoomId);
}
async boot(conferenceRoomId) {
if (
this.__accessToken !== undefined &&
this.__refreshToken !== undefined &&
this.__accessToken !== null &&
this.__refreshToken !== null
) {
try {
await VoxeetSDK.session.open({
externalId: window.localStorage.getItem('watchPartyUserUid'),
name: window.localStorage.getItem('watchPartyUserName'),
});
} catch (error) {
console.error('Error Opening Voxeet Session', error);
}
} else {
this.initialize();
}
}
async leaveCall() {}
async openSession() {}
async initialize() {
GetVoxeetTokenApi()
.then((res) => res.json())
.then((tokenResult) => {
if (tokenResult.status <= 299) {
const { access_token, refresh_token } = tokenResult;
this.updateTokens(access_token, refresh_token);
VoxeetSDK.initializeToken(access_token, this.refreshToken);
} else {
console.error('Get Voxeet Token API Result Error', tokenResult);
}
})
.catch((err) => {
console.error('Get Voxeet Token API error', err);
});
}
async refreshToken() {
return new Promise((resolve, reject) => {
GetRefreshedVoxeetTokenApi({ token: this.__refreshToken })
.then((res) => res.json())
.then((tokenResult) => {
const { access_token, refresh_token } = tokenResult;
this.updateTokens(access_token, refresh_token);
resolve(access_token);
})
.catch((err) => {
console.error('Get Voxeet Token API error', err);
reject(err);
});
});
}
updateTokens(aT, rT) {
this.__accessToken = aT;
this.__refreshToken = rT;
}
}