import * as ioclient from 'socket.io-client' export type SocketClient = SocketIOClient.Socket & { onJson(eventName: string): Promise } export namespace SocketioClient { export function connect(url: string, opts = {}): SocketClient { console.info(`ยป SocketIO Client is used "${url}"`) const socket = ioclient.connect(url, Object.assign({ transports: ['websocket'] }, opts)) socket.onJson = (eventName: string) => { return new Promise((resolve, reject) => { socket.on(eventName, (msg) => { try { resolve(msg ? JSON.parse(msg) : null) } catch (e) { reject(e) } }) }) } return socket } }