timing-provider
Version:
An implementation of the timing provider specification.
19 lines • 982 B
JavaScript
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