UNPKG

lml-main

Version:

This is now a mono repository published into many standalone packages.

61 lines 2.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var Pusher = require("pusher-js"); var rxjs_1 = require("rxjs"); var utils_1 = require("../utils"); var actions_1 = require("../actions"); exports.connectToPusher = function (action$, store) { return action$.ofType(actions_1.PUSHER_CONNECT) .mergeMap(function (action) { return rxjs_1.Observable.create(function (observer) { var options = tslib_1.__assign({ cluster: action.cluster }, action.options); exports.pusherClient = new Pusher(action.key, options); exports.pusherClient.connection.bind('connected', function (result) { observer.next(actions_1.pusherConnectionSuccess(exports.pusherClient, result)); }); exports.pusherClient.connection.bind('error', function (error) { observer.next(actions_1.pusherConnectionError(error)); }); }); }); }; /** * An epic to subscribe to a channel * * @param action$ * @param store */ exports.subscribeToChannel = function (action$, store) { return action$.ofType(actions_1.SUBSCRIBE_CHANNEL) .mergeMap(function (action) { return rxjs_1.Observable.create(function (observer) { var events = action.events; var channel = exports.pusherClient.subscribe(utils_1.formatChannelName(action.channel)); if (Array.isArray(events)) { events.forEach(function (e) { channel.bind(e, function (message) { observer.next(action.callback(message)); }); }); } else { channel.bind(events, function (message) { observer.next(action.callback(message)); }); } // always bind to metadata regardless of channel // the backend team should be providing this as a health check on all channels channel.bind('METADATA', function (message) { var items = message.items; var errors = Object.keys(items) .filter(function (event) { return items[event].error > 0; }); if (errors) { errors.forEach(function (event) { observer.next(actions_1.pusherHealthcheckError(action.channel, event, message)); }); } observer.next(actions_1.setMetadata(action.channel, message)); }); }); }); }; //# sourceMappingURL=connect.js.map