kod-temp
Version:
Workano Communications SDK
88 lines (87 loc) • 2.61 kB
JavaScript
import WazoWebSocketClient, * as WebSocketClient from "../websocket-client";
import Emitter from "../utils/Emitter";
import IssueReporter from "../service/IssueReporter";
import { obfuscateToken } from "../utils/string";
const { SOCKET_EVENTS, ...OTHER_EVENTS } = WebSocketClient;
const ALL_EVENTS = [
...Object.values(SOCKET_EVENTS),
...Object.values(OTHER_EVENTS),
];
const logger = IssueReporter.loggerFor("simple-ws-client");
export class Websocket extends Emitter {
ws;
eventLists;
CONFERENCE_USER_PARTICIPANT_JOINED;
CONFERENCE_USER_PARTICIPANT_LEFT;
MEETING_USER_PARTICIPANT_JOINED;
MEETING_USER_PARTICIPANT_LEFT;
CALL_CREATED;
constructor() {
super();
// Sugar syntax for `Wazo.WebSocket.EVENT_NAME`
Object.keys(OTHER_EVENTS).forEach((key) => {
// @ts-ignore: keys
this[key] = OTHER_EVENTS[key];
});
Object.keys(SOCKET_EVENTS).forEach((key) => {
// @ts-ignore: keys
this[key] = SOCKET_EVENTS[key];
});
this.eventLists = WazoWebSocketClient.eventLists;
this.ws = null;
}
open(host, session) {
logger.info("open simple WebSocket", {
host,
token: obfuscateToken(session.token),
});
this.ws = new WazoWebSocketClient({
host,
token: session.token,
events: ["*"],
version: 2,
session,
}, {
rejectUnauthorized: false,
binaryType: "arraybuffer",
});
this.ws.connect();
// Re-emit all events
ALL_EVENTS.forEach((event) => {
if (!this.ws) {
return;
}
this.ws.on(event, (payload) => {
this.eventEmitter.emit(event, payload);
});
});
}
updateToken(token) {
logger.info("update token via simple Websocket", {
token,
ws: !!this.ws,
});
if (!this.ws) {
return;
}
this.ws.updateToken(token);
}
isOpen() {
return this.ws?.isConnected() || false;
}
close(force = false) {
logger.info("Closing event transport websocket", {
force,
ws: !!this.ws,
});
if (this.ws) {
this.ws.close(force);
}
this.unbind();
}
}
if (!global.workanoWebsocketInstance) {
global.workanoWebsocketInstance = new Websocket();
}
// @ts-ignore: Circular definition of import alias 'default'.
export default global.workanoWebsocketInstance;