UNPKG

timing-provider

Version:

An implementation of the timing provider specification.

19 lines 982 B
import { Subject, finalize, map, merge, mergeMap, throwError } from 'rxjs'; import { on } from 'subscribable-things'; export const createSignalingFactory = (createWebSocket) => (url) => { const errorSubject = new Subject(); const webSocket = createWebSocket(url); const signalingEvent$ = merge(on(webSocket, 'message'), merge(merge(...['close', 'error'].map((type) => on(webSocket, type))).pipe(map(({ type }) => new Error(`WebSocket fired unexpected event of type "${type}".`))), errorSubject // tslint:disable-next-line:rxjs-throw-error ).pipe(mergeMap((err) => throwError(() => err)))).pipe(finalize(() => webSocket.close()), map((event) => JSON.parse(event.data))); const sendSignalingEvent = (event) => { try { webSocket.send(JSON.stringify(event)); } catch (err) { errorSubject.next(err); } }; return [signalingEvent$, sendSignalingEvent]; }; //# sourceMappingURL=signaling-factory.js.map