lml-main
Version:
This is now a mono repository published into many standalone packages.
61 lines • 2.58 kB
JavaScript
;
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