import { Injectable } from '@angular/core'; import { OpenVidu as OpenViduAPI, Session as SessionAPI, OpenViduRole as OpenViduRoleAPI, SessionProperties as SessionPropertiesAPI } from 'openvidu-node-client'; @Injectable() export class OpenviduRestService { sessionIdSession: Map = new Map(); sessionIdTokenOpenViduRole: Map> = new Map(); constructor() { } getSessionId(openviduURL: string, openviduSecret: string, sessionProperties: SessionPropertiesAPI): Promise { return new Promise((resolve, reject) => { const OV = new OpenViduAPI(openviduURL, openviduSecret); OV.createSession(sessionProperties) .then(session => { this.sessionIdSession.set(session.getSessionId(), session); this.sessionIdTokenOpenViduRole.set(session.getSessionId(), new Map()); resolve(session.getSessionId()); }) .catch(error => { reject(error); }); }); } getToken(sessionId: string, role: string, serverData: string): Promise { const session: SessionAPI = this.sessionIdSession.get(sessionId); const OVRole: OpenViduRoleAPI = OpenViduRoleAPI[role]; return new Promise((resolve, reject) => { session.generateToken({ role: OVRole, data: serverData }) .then(token => { this.sessionIdTokenOpenViduRole.get(sessionId).set(token, OVRole); resolve(token); }).catch(error => { reject(error); }); }); } getAvailableParams(): Map { const params = new Map(); this.sessionIdSession.forEach((sessionApi, sessionId) => { params.set(sessionId, Array.from(this.sessionIdTokenOpenViduRole.get(sessionId).keys())); }); return params; } }