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; } }