diff --git a/example/iframe.html b/example/iframe.html
index 80f6a7d..bfe0357 100644
--- a/example/iframe.html
+++ b/example/iframe.html
@@ -3,7 +3,7 @@
Playground
-
+
diff --git a/example/iframe2.html b/example/iframe2.html
index 317e1af..76482e4 100644
--- a/example/iframe2.html
+++ b/example/iframe2.html
@@ -3,7 +3,7 @@
Playground
-
+
diff --git a/example/index.html b/example/index.html
index b2c264a..79d3a8d 100644
--- a/example/index.html
+++ b/example/index.html
@@ -3,7 +3,7 @@
Playground
-
+
diff --git a/karma.conf.js b/karma.conf.js
index 73e63bc..df52206 100644
--- a/karma.conf.js
+++ b/karma.conf.js
@@ -11,7 +11,7 @@ module.exports = function( config ) {
// list of files / patterns to load in the browser
files: [
"node_modules/jquery/dist/jquery.js",
- "node_modules/lodash/index.js",
+ "node_modules/lodash/lodash.js",
"node_modules/expect.js/expect.js",
"node_modules/mocha/mocha.js",
"node_modules/postal/lib/postal.js",
diff --git a/lib/postal.federation.js b/lib/postal.federation.js
index 75e0b28..a147236 100644
--- a/lib/postal.federation.js
+++ b/lib/postal.federation.js
@@ -1,7 +1,7 @@
/*!
* * postal.federation - A base plugin for federating instances of postal.js across various boundaries.
* * Author: Jim Cowart (http://ifandelse.com)
- * * Version: v0.5.3
+ * * Version: v0.5.5
* * Url: http://github.com/postaljs/postal.federation
* * License(s): (MIT OR GPL-2.0)
*/
@@ -61,70 +61,64 @@ return /******/ (function(modules) { // webpackBootstrap
/* 0 */
/***/ function(module, exports, __webpack_require__) {
+ Object.defineProperty(exports, "__esModule", {
+ value: true
+ });
// istanbul ignore next
- var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
- var _ = _interopRequire(__webpack_require__(1));
+ var _lodash = __webpack_require__(1);
- var postal = _interopRequire(__webpack_require__(2));
+ var _lodash2 = _interopRequireDefault(_lodash);
+
+ var _postal = __webpack_require__(2);
+
+ var _postal2 = _interopRequireDefault(_postal);
__webpack_require__(3);
var _packingSlips = __webpack_require__(4);
- var packingSlips = _packingSlips.packingSlips;
- var getPackingSlip = _packingSlips.getPackingSlip;
-
var _state = __webpack_require__(5);
- var state = _state.state;
- var disconnect = _state.disconnect;
- var NO_OP = _state.NO_OP;
- var configure = _state.configure;
-
var _handlers = __webpack_require__(6);
- var handlers = _handlers.handlers;
- var onFederatedMsg = _handlers.onFederatedMsg;
-
var _filters = __webpack_require__(7);
- var filters = _interopRequire(_filters);
+ var _filters2 = _interopRequireDefault(_filters);
- var matchesFilter = _filters.matchesFilter;
- var addFilter = _filters.addFilter;
- var removeFilter = _filters.removeFilter;
+ var _FederationClient = __webpack_require__(8);
- var FederationClient = _interopRequire(__webpack_require__(8));
+ var _FederationClient2 = _interopRequireDefault(_FederationClient);
- var fedx = postal.fedx = {
- FederationClient: FederationClient,
- packingSlips: packingSlips,
- handlers: handlers,
- clients: state._clients,
- transports: state._transports,
- filters: filters,
- addFilter: addFilter,
- removeFilter: removeFilter,
+ var fedx = _postal2["default"].fedx = {
+ FederationClient: _FederationClient2["default"],
+ packingSlips: _packingSlips.packingSlips,
+ handlers: _handlers.handlers,
+ clients: _state.state._clients,
+ transports: _state.state._transports,
+ filters: _filters2["default"],
+ addFilter: _filters.addFilter,
+ removeFilter: _filters.removeFilter,
canSendRemote: function canSendRemote(channel, topic) {
- return matchesFilter(channel, topic, "out");
+ return (0, _filters.matchesFilter)(channel, topic, "out");
},
- configure: configure,
- getPackingSlip: getPackingSlip,
- onFederatedMsg: onFederatedMsg,
+ configure: _state.configure,
+ getPackingSlip: _packingSlips.getPackingSlip,
+ onFederatedMsg: _handlers.onFederatedMsg,
sendMessage: function sendMessage(envelope) {
- if (!state._ready) {
- state._outboundQueue.push(arguments);
+ if (!_state.state._ready) {
+ _state.state._outboundQueue.push(arguments);
return;
}
- _.each(this.transports, function (transport) {
+ _lodash2["default"].forEach(this.transports, function (transport) {
transport.sendMessage(envelope);
});
},
- disconnect: disconnect,
+ disconnect: _state.disconnect,
_getTransports: function _getTransports() {
- return _.reduce(this.transports, function (memo, transport, name) {
+ return _lodash2["default"].reduce(this.transports, function (memo, transport, name) {
memo[name] = true;
return memo;
}, {});
@@ -137,8 +131,8 @@ return /******/ (function(modules) { // webpackBootstrap
signalReady( { transportNameA: targetsForA, transportNameB: targetsForB, transportC: true }, callback);
*/
signalReady: function signalReady(transport, target, callback) {
- if (!state._ready) {
- state._signalQueue.push(arguments);
+ if (!_state.state._ready) {
+ _state.state._signalQueue.push(arguments);
return;
}
var transports = this._getTransports();
@@ -149,7 +143,7 @@ return /******/ (function(modules) { // webpackBootstrap
} else if (typeof transport === "string") {
transports = {};
transports[transport] = this.transports[transport];
- callback = NO_OP;
+ callback = _state.NO_OP;
}
break;
case 2:
@@ -159,21 +153,21 @@ return /******/ (function(modules) { // webpackBootstrap
} else {
transports = transport;
}
- callback = target || NO_OP;
+ callback = target || _state.NO_OP;
break;
case 3:
transports = {};
transports[transport] = [target];
break;
}
- _.each(transports, function (targets, name) {
+ _lodash2["default"].forEach(transports, _lodash2["default"].bind(function (targets, name) {
targets = typeof targets === "boolean" ? [] : targets;
this.transports[name].signalReady(targets, callback);
- }, this);
+ }, this));
}
};
- module.exports = fedx;
+ exports["default"] = fedx;
function processSignalQ(args) {
fedx.signalReady.apply(this, args);
@@ -187,32 +181,33 @@ return /******/ (function(modules) { // webpackBootstrap
fedx.onFederatedMsg.call(this, msg);
}
- postal.addWireTap(function (data, envelope) {
+ _postal2["default"].addWireTap(function (data, envelope) {
if (fedx.canSendRemote(envelope.channel, envelope.topic)) {
fedx.sendMessage(envelope);
}
});
- postal.subscribe({
- channel: postal.configuration.SYSTEM_CHANNEL,
+ _postal2["default"].subscribe({
+ channel: _postal2["default"].configuration.SYSTEM_CHANNEL,
topic: "instanceId.changed",
callback: function callback() {
- state._ready = true;
- while (state._signalQueue.length) {
- processSignalQ(state._signalQueue.shift());
+ _state.state._ready = true;
+ while (_state.state._signalQueue.length) {
+ processSignalQ(_state.state._signalQueue.shift());
}
- while (state._outboundQueue.length) {
- processOutboundQ(state._outboundQueue.shift());
+ while (_state.state._outboundQueue.length) {
+ processOutboundQ(_state.state._outboundQueue.shift());
}
- while (state._inboundQueue.length) {
- processInboundQ(state._inboundQueue.shift());
+ while (_state.state._inboundQueue.length) {
+ processInboundQ(_state.state._inboundQueue.shift());
}
}
});
- if (postal.instanceId() !== undefined) {
- state._ready = true;
+ if (_postal2["default"].instanceId() !== undefined) {
+ _state.state._ready = true;
}
+ module.exports = exports["default"];
/***/ },
/* 1 */
@@ -232,35 +227,37 @@ return /******/ (function(modules) { // webpackBootstrap
// istanbul ignore next
- var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+ var _postal = __webpack_require__(2);
- var postal = _interopRequire(__webpack_require__(2));
+ var _postal2 = _interopRequireDefault(_postal);
- if (!postal.createUUID) {
- postal.createUUID = function () {
+ if (!_postal2["default"].createUUID) {
+ _postal2["default"].createUUID = function () {
var s = [];
var hexDigits = "0123456789abcdef";
for (var i = 0; i < 36; i++) {
- s[i] = hexDigits.substr(Math.floor(Math.random() * 16), 1);
+ s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
}
s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010
/* jshint ignore:start */
- s[19] = hexDigits.substr(s[19] & 3 | 8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
+ s[19] = hexDigits.substr(s[19] & 0x3 | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
/* jshint ignore:end */
s[8] = s[13] = s[18] = s[23] = "-";
return s.join("");
};
}
- if (!postal.instanceId) {
- postal.instanceId = (function () {
+ if (!_postal2["default"].instanceId) {
+ _postal2["default"].instanceId = (function () {
var _id = undefined,
_oldId = undefined;
return function (id) {
if (id) {
_oldId = _id;
_id = id;
- postal.publish({
- channel: postal.configuration.SYSTEM_CHANNEL,
+ _postal2["default"].publish({
+ channel: _postal2["default"].configuration.SYSTEM_CHANNEL,
topic: "instanceId.changed",
data: {
oldId: _oldId,
@@ -277,16 +274,17 @@ return /******/ (function(modules) { // webpackBootstrap
/* 4 */
/***/ function(module, exports, __webpack_require__) {
- // istanbul ignore next
-
- var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
-
- exports.getPackingSlip = getPackingSlip;
Object.defineProperty(exports, "__esModule", {
value: true
});
+ exports.getPackingSlip = getPackingSlip;
+ // istanbul ignore next
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+ var _postal = __webpack_require__(2);
- var postal = _interopRequire(__webpack_require__(2));
+ var _postal2 = _interopRequireDefault(_postal);
function getPackingSlip(type /*, env */) {
if (Object.prototype.hasOwnProperty.call(packingSlips, type)) {
@@ -298,15 +296,15 @@ return /******/ (function(modules) { // webpackBootstrap
ping: function ping() {
return {
type: "federation.ping",
- instanceId: postal.instanceId(),
+ instanceId: _postal2["default"].instanceId(),
timeStamp: new Date(),
- ticket: postal.createUUID()
+ ticket: _postal2["default"].createUUID()
};
},
pong: function pong(ping) {
return {
type: "federation.pong",
- instanceId: postal.instanceId(),
+ instanceId: _postal2["default"].instanceId(),
timeStamp: new Date(),
pingData: {
instanceId: ping.instanceId,
@@ -318,7 +316,7 @@ return /******/ (function(modules) { // webpackBootstrap
message: function message(env) {
return {
type: "federation.message",
- instanceId: postal.instanceId(),
+ instanceId: _postal2["default"].instanceId(),
timeStamp: new Date(),
envelope: env
};
@@ -326,14 +324,14 @@ return /******/ (function(modules) { // webpackBootstrap
disconnect: function disconnect() {
return {
type: "federation.disconnect",
- instanceId: postal.instanceId(),
+ instanceId: _postal2["default"].instanceId(),
timeStamp: new Date()
};
},
bundle: function bundle(packingSlips) {
return {
type: "federation.bundle",
- instanceId: postal.instanceId(),
+ instanceId: _postal2["default"].instanceId(),
timeStamp: new Date(),
packingSlips: packingSlips
};
@@ -345,17 +343,18 @@ return /******/ (function(modules) { // webpackBootstrap
/* 5 */
/***/ function(module, exports, __webpack_require__) {
- // istanbul ignore next
-
- var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
-
- exports.configure = configure;
- exports.disconnect = disconnect;
Object.defineProperty(exports, "__esModule", {
value: true
});
+ exports.configure = configure;
+ exports.disconnect = disconnect;
+ // istanbul ignore next
- var _ = _interopRequire(__webpack_require__(1));
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+ var _lodash = __webpack_require__(1);
+
+ var _lodash2 = _interopRequireDefault(_lodash);
var _defaults = {
enabled: true,
@@ -383,7 +382,7 @@ return /******/ (function(modules) { // webpackBootstrap
throw new Error("postal.fedx filterMode must be 'blacklist' or 'whitelist'.");
}
if (cfg) {
- state._config = _.defaults(cfg, _defaults);
+ state._config = _lodash2["default"].defaults(cfg, _defaults);
}
return state._config;
}
@@ -395,7 +394,7 @@ return /******/ (function(modules) { // webpackBootstrap
trans = {};
trans[options.transport] = state._transports[options.transport];
}
- _.each(trans, function (t) {
+ _lodash2["default"].forEach(trans, function (t) {
t.disconnect({
target: options.target,
instanceId: options.instanceId,
@@ -408,27 +407,27 @@ return /******/ (function(modules) { // webpackBootstrap
/* 6 */
/***/ function(module, exports, __webpack_require__) {
- // istanbul ignore next
-
- var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
-
- exports.onFederatedMsg = onFederatedMsg;
Object.defineProperty(exports, "__esModule", {
value: true
});
+ exports.onFederatedMsg = onFederatedMsg;
+ // istanbul ignore next
- var getPackingSlip = __webpack_require__(4).getPackingSlip;
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+ var _packingSlips = __webpack_require__(4);
var _state = __webpack_require__(5);
- var state = _state.state;
- var disconnect = _state.disconnect;
+ var _filters = __webpack_require__(7);
- var matchesFilter = __webpack_require__(7).matchesFilter;
+ var _postal = __webpack_require__(2);
- var postal = _interopRequire(__webpack_require__(2));
+ var _postal2 = _interopRequireDefault(_postal);
- var _ = _interopRequire(__webpack_require__(1));
+ var _lodash = __webpack_require__(1);
+
+ var _lodash2 = _interopRequireDefault(_lodash);
var handlers = {
"federation.ping": function federationPing(data /*, callback */) {
@@ -436,7 +435,7 @@ return /******/ (function(modules) { // webpackBootstrap
if (data.source.handshakeComplete) {
data.source.sendPong(data.packingSlip);
} else {
- data.source.sendBundle([getPackingSlip("pong", data.packingSlip), getPackingSlip("ping")]);
+ data.source.sendBundle([(0, _packingSlips.getPackingSlip)("pong", data.packingSlip), (0, _packingSlips.getPackingSlip)("ping")]);
}
},
"federation.pong": function federationPong(data) {
@@ -450,22 +449,22 @@ return /******/ (function(modules) { // webpackBootstrap
});
data.source.pings[data.packingSlip.pingData.ticket] = undefined;
}
- if (!_.contains(state._clients, data.packingSlip.instanceId)) {
- state._clients.push(data.packingSlip.instanceId);
+ if (!_lodash2["default"].includes(_state.state._clients, data.packingSlip.instanceId)) {
+ _state.state._clients.push(data.packingSlip.instanceId);
}
- postal.publish({
+ _postal2["default"].publish({
channel: "postal.federation",
topic: "client.federated",
data: {
remoteId: data.source.instanceId,
- localId: postal.instanceId(),
+ localId: _postal2["default"].instanceId(),
transport: data.transport
}
});
},
"federation.disconnect": function federationDisconnect(data) {
- state._clients = _.without(state._clients, data.source.instanceId);
- disconnect({
+ _state.state._clients = _lodash2["default"].without(_state.state._clients, data.source.instanceId);
+ (0, _state.disconnect)({
transport: data.source.transportName,
instanceId: data.source.instanceId,
doNotNotify: true
@@ -473,14 +472,14 @@ return /******/ (function(modules) { // webpackBootstrap
},
"federation.message": function federationMessage(data) {
var env = data.packingSlip.envelope;
- if (matchesFilter(env.channel, env.topic, "in")) {
+ if ((0, _filters.matchesFilter)(env.channel, env.topic, "in")) {
env.lastSender = data.packingSlip.instanceId;
- postal.publish(env);
+ _postal2["default"].publish(env);
}
},
"federation.bundle": function federationBundle(data) {
- _.each(data.packingSlip.packingSlips, function (slip) {
- onFederatedMsg(_.extend({}, data, {
+ _lodash2["default"].forEach(data.packingSlip.packingSlips, function (slip) {
+ onFederatedMsg(_lodash2["default"].extend({}, data, {
packingSlip: slip
}));
});
@@ -490,8 +489,8 @@ return /******/ (function(modules) { // webpackBootstrap
exports.handlers = handlers;
function onFederatedMsg(data) {
- if (!state._ready) {
- state._inboundQueue.push(data);
+ if (!_state.state._ready) {
+ _state.state._inboundQueue.push(data);
return;
}
if (Object.prototype.hasOwnProperty.call(handlers, data.packingSlip.type)) {
@@ -505,22 +504,25 @@ return /******/ (function(modules) { // webpackBootstrap
/* 7 */
/***/ function(module, exports, __webpack_require__) {
- // istanbul ignore next
-
- var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
-
- exports.addFilter = addFilter;
- exports.removeFilter = removeFilter;
- exports.matchesFilter = matchesFilter;
Object.defineProperty(exports, "__esModule", {
value: true
});
+ exports.addFilter = addFilter;
+ exports.removeFilter = removeFilter;
+ exports.matchesFilter = matchesFilter;
+ // istanbul ignore next
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
- var _ = _interopRequire(__webpack_require__(1));
+ var _lodash = __webpack_require__(1);
- var state = __webpack_require__(5).state;
+ var _lodash2 = _interopRequireDefault(_lodash);
- var postal = _interopRequire(__webpack_require__(2));
+ var _state = __webpack_require__(5);
+
+ var _postal = __webpack_require__(2);
+
+ var _postal2 = _interopRequireDefault(_postal);
var filters = {
"in": {}, // jscs:ignore disallowQuotedKeysInObjects
@@ -530,13 +532,13 @@ return /******/ (function(modules) { // webpackBootstrap
exports["default"] = filters;
function addFilter(_filters) {
- _filters = _.isArray(_filters) ? _filters : [_filters];
- _.each(_filters, function (filter) {
- filter.direction = filter.direction || state._config.filterDirection;
- _.each(filter.direction === "both" ? ["in", "out"] : [filter.direction], function (dir) {
+ _filters = _lodash2["default"].isArray(_filters) ? _filters : [_filters];
+ _lodash2["default"].forEach(_filters, function (filter) {
+ filter.direction = filter.direction || _state.state._config.filterDirection;
+ _lodash2["default"].forEach(filter.direction === "both" ? ["in", "out"] : [filter.direction], function (dir) {
if (!filters[dir][filter.channel]) {
filters[dir][filter.channel] = [filter.topic];
- } else if (!_.include(filters[dir][filter.channel], filter.topic)) {
+ } else if (!_lodash2["default"].includes(filters[dir][filter.channel], filter.topic)) {
filters[dir][filter.channel].push(filter.topic);
}
});
@@ -544,12 +546,12 @@ return /******/ (function(modules) { // webpackBootstrap
}
function removeFilter(_filters) {
- _filters = _.isArray(_filters) ? _filters : [_filters];
- _.each(_filters, function (filter) {
- filter.direction = filter.direction || state._config.filterDirection;
- _.each(filter.direction === "both" ? ["in", "out"] : [filter.direction], function (dir) {
- if (filters[dir][filter.channel] && _.include(filters[dir][filter.channel], filter.topic)) {
- filters[dir][filter.channel] = _.without(filters[dir][filter.channel], filter.topic);
+ _filters = _lodash2["default"].isArray(_filters) ? _filters : [_filters];
+ _lodash2["default"].forEach(_filters, function (filter) {
+ filter.direction = filter.direction || _state.state._config.filterDirection;
+ _lodash2["default"].forEach(filter.direction === "both" ? ["in", "out"] : [filter.direction], function (dir) {
+ if (filters[dir][filter.channel] && _lodash2["default"].includes(filters[dir][filter.channel], filter.topic)) {
+ filters[dir][filter.channel] = _lodash2["default"].without(filters[dir][filter.channel], filter.topic);
}
});
});
@@ -557,41 +559,45 @@ return /******/ (function(modules) { // webpackBootstrap
function matchesFilter(channel, topic, direction) {
var channelPresent = Object.prototype.hasOwnProperty.call(filters[direction], channel);
- var topicMatch = channelPresent && _.any(filters[direction][channel], function (binding) {
- return postal.configuration.resolver.compare(binding, topic);
+ var topicMatch = channelPresent && _lodash2["default"].some(filters[direction][channel], function (binding) {
+ return _postal2["default"].configuration.resolver.compare(binding, topic);
});
- var blacklisting = state._config.filterMode === "blacklist";
- return state._config.enabled && (blacklisting && (!channelPresent || channelPresent && !topicMatch) || !blacklisting && channelPresent && topicMatch);
+ var blacklisting = _state.state._config.filterMode === "blacklist";
+ return _state.state._config.enabled && (blacklisting && (!channelPresent || channelPresent && !topicMatch) || !blacklisting && channelPresent && topicMatch);
}
/***/ },
/* 8 */
/***/ function(module, exports, __webpack_require__) {
+ Object.defineProperty(exports, "__esModule", {
+ value: true
+ });
// istanbul ignore next
- var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+ var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
// istanbul ignore next
- var _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
// istanbul ignore next
- var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- var getPackingSlip = __webpack_require__(4).getPackingSlip;
+ var _packingSlips = __webpack_require__(4);
- var onFederatedMsg = __webpack_require__(6).onFederatedMsg;
+ var _handlers = __webpack_require__(6);
var _state = __webpack_require__(5);
- var state = _state.state;
- var NO_OP = _state.NO_OP;
+ var _postal = __webpack_require__(2);
+
+ var _postal2 = _interopRequireDefault(_postal);
- var postal = _interopRequire(__webpack_require__(2));
+ var _lodash = __webpack_require__(1);
- var _ = _interopRequire(__webpack_require__(1));
+ var _lodash2 = _interopRequireDefault(_lodash);
var FederationClient = (function () {
function FederationClient(target, options, instanceId) {
@@ -604,95 +610,92 @@ return /******/ (function(modules) { // webpackBootstrap
this.handshakeComplete = false;
}
- _createClass(FederationClient, {
- sendPing: {
- value: function sendPing(callback) {
- var packingSlip = getPackingSlip("ping");
- this.pings[packingSlip.ticket] = {
- ticket: packingSlip.ticket,
- callback: callback || NO_OP
- };
- this.send(packingSlip);
- }
- },
- sendPong: {
- value: function sendPong(origPackingSlip) {
- this.send(getPackingSlip("pong", origPackingSlip));
- }
- },
- sendBundle: {
- value: function sendBundle(slips) {
- this.send(getPackingSlip("bundle", slips));
- }
- },
- sendMessage: {
- value: function sendMessage(envelope) {
- if (!this.handshakeComplete) {
- return;
- }
- envelope.originId = envelope.originId || postal.instanceId();
- var env = _.clone(envelope);
- if (this.instanceId && this.instanceId !== env.lastSender && (!env.knownIds || !env.knownIds.length || env.knownIds && !_.include(env.knownIds, this.instanceId))) {
- env.knownIds = (env.knownIds || []).concat(_.without(state._clients, this.instanceId));
- this.send(getPackingSlip("message", env));
- }
- }
- },
- disconnect: {
- value: function disconnect() {
- this.send(getPackingSlip("disconnect"));
- }
- },
- onMessage: {
- value: function onMessage(packingSlip) {
- if (this.shouldProcess()) {
- onFederatedMsg({
- transport: this.transportName,
- packingSlip: packingSlip,
- source: this
- });
- }
- }
- },
- shouldProcess: {
- value: function shouldProcess() {
- return true;
+ _createClass(FederationClient, [{
+ key: "sendPing",
+ value: function sendPing(callback) {
+ var packingSlip = (0, _packingSlips.getPackingSlip)("ping");
+ this.pings[packingSlip.ticket] = {
+ ticket: packingSlip.ticket,
+ callback: callback || _state.NO_OP
+ };
+ this.send(packingSlip);
+ }
+ }, {
+ key: "sendPong",
+ value: function sendPong(origPackingSlip) {
+ this.send((0, _packingSlips.getPackingSlip)("pong", origPackingSlip));
+ }
+ }, {
+ key: "sendBundle",
+ value: function sendBundle(slips) {
+ this.send((0, _packingSlips.getPackingSlip)("bundle", slips));
+ }
+ }, {
+ key: "sendMessage",
+ value: function sendMessage(envelope) {
+ if (!this.handshakeComplete) {
+ return;
}
- },
- send: {
- value: function send() {
- throw new Error("An object deriving from FederationClient must provide an implementation for 'send'.");
+ envelope.originId = envelope.originId || _postal2["default"].instanceId();
+ var env = _lodash2["default"].clone(envelope);
+ if (this.instanceId && this.instanceId !== env.lastSender && (!env.knownIds || !env.knownIds.length || env.knownIds && !_lodash2["default"].includes(env.knownIds, this.instanceId))) {
+ env.knownIds = (env.knownIds || []).concat(_lodash2["default"].without(_state.state._clients, this.instanceId));
+ this.send((0, _packingSlips.getPackingSlip)("message", env));
}
- },
- setInstanceId: {
- value: function setInstanceId(id) {
- this.instanceId = id;
+ }
+ }, {
+ key: "disconnect",
+ value: function disconnect() {
+ this.send((0, _packingSlips.getPackingSlip)("disconnect"));
+ }
+ }, {
+ key: "onMessage",
+ value: function onMessage(packingSlip) {
+ if (this.shouldProcess()) {
+ (0, _handlers.onFederatedMsg)({
+ transport: this.transportName,
+ packingSlip: packingSlip,
+ source: this
+ });
}
}
}, {
- extend: {
- value: function extend(props, ctrProps) {
- function FedXClient() {
- FederationClient.apply(this, arguments);
- }
+ key: "shouldProcess",
+ value: function shouldProcess() {
+ return true;
+ }
+ }, {
+ key: "send",
+ value: function send() /* msg */{
+ throw new Error("An object deriving from FederationClient must provide an implementation for 'send'.");
+ }
+ }, {
+ key: "setInstanceId",
+ value: function setInstanceId(id) {
+ this.instanceId = id;
+ }
+ }], [{
+ key: "extend",
+ value: function extend(props, ctrProps) {
+ function FedXClient() {
+ FederationClient.apply(this, arguments);
+ }
- FedXClient.prototype = Object.create(FederationClient.prototype);
- _.extend(FedXClient.prototype, props);
- _.extend(FedXClient, ctrProps);
+ FedXClient.prototype = Object.create(FederationClient.prototype);
+ _lodash2["default"].extend(FedXClient.prototype, props);
+ _lodash2["default"].extend(FedXClient, ctrProps);
- return FedXClient;
- }
+ return FedXClient;
}
- });
+ }]);
return FederationClient;
})();
- module.exports = FederationClient;
- /* msg */
+ exports["default"] = FederationClient;
+ module.exports = exports["default"];
/***/ }
/******/ ])
});
-;
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCA0NzhkMzVkMWRkYWUyNzc5NmZlZiIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcInJvb3RcIjpcIl9cIixcImNvbW1vbmpzXCI6XCJsb2Rhc2hcIixcImNvbW1vbmpzMlwiOlwibG9kYXNoXCIsXCJhbWRcIjpcImxvZGFzaFwifSIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJwb3N0YWxcIiIsIndlYnBhY2s6Ly8vLi9zcmMvcG9zdGFsLXV0aWxzLmpzIiwid2VicGFjazovLy8uL3NyYy9wYWNraW5nU2xpcHMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3N0YXRlLmpzIiwid2VicGFjazovLy8uL3NyYy9oYW5kbGVycy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZmlsdGVycy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvRmVkZXJhdGlvbkNsaWVudC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87QUNWQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBZTtBQUNmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7Ozs7OztLQ3RDTyxDQUFDLHVDQUFNLENBQVE7O0tBQ2YsTUFBTSx1Q0FBTSxDQUFROztxQkFDcEIsQ0FBZ0I7O3lDQUNzQixDQUFnQjs7S0FBcEQsWUFBWSxpQkFBWixZQUFZO0tBQUUsY0FBYyxpQkFBZCxjQUFjOztrQ0FDZSxDQUFTOztLQUFwRCxLQUFLLFVBQUwsS0FBSztL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RCxZQUFTO1dBQUEsbUJBQUUsV0FBVyxFQUFHO0FBQ3hCLFNBQUssSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFHO0FBQzNCLG9CQUFjLENBQUU7QUFDZixnQkFBUyxFQUFFLElBQUksQ0FBQyxhQUFhO0FBQzdCLGtCQUFXLEVBQUUsV0FBVztBQUN4QixhQUFNLEVBQUUsSUFBSTtPQUNaLENBQUUsQ0FBQztNQUNKO0tBQ0Q7O0FBRUQsZ0JBQWE7V0FBQSx5QkFBRztBQUNmLFlBQU8sSUFBSSxDQUFDO0tBQ1o7O0FBRUQsT0FBSTtXQUFBLGdCQUFjO0FBQ2pCLFdBQU0sSUFBSSxLQUFLLENBQUUscUZBQXFGLENBQUUsQ0FBQztLQUN6Rzs7QUFFRCxnQkFBYTtXQUFBLHVCQUFFLEVBQUUsRUFBRztBQUNuQixTQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztLQUNyQjs7O0FBRU0sU0FBTTtXQUFBLGdCQUFFLEtBQUssRUFBRSxRQUFRLEVBQUc7QUFDaEMsY0FBUyxVQUFVLEdBQUc7QUFDckIsc0JBQWdCLENBQUMsS0FBSyxDQUFFLElBQUksRUFBRSxTQUFTLENBQUUsQ0FBQztNQUMxQzs7QUFFRCxlQUFVLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUUsZ0JBQWdCLENBQUMsU0FBUyxDQUFFLENBQUM7QUFDbkUsTUFBQyxDQUFDLE1BQU0sQ0FBRSxVQUFVLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBRSxDQUFDO0FBQ3hDLE1BQUMsQ0FBQyxNQUFNLENBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBRSxDQUFDOztBQUVqQyxZQUFPLFVBQVUsQ0FBQztLQUNsQjs7OztTQTdFbUIsZ0JBQWdCOzs7a0JBQWhCLGdCQUFnQiIsImZpbGUiOiJwb3N0YWwuZmVkZXJhdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcImxvZGFzaFwiKSwgcmVxdWlyZShcInBvc3RhbFwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJsb2Rhc2hcIiwgXCJwb3N0YWxcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wicG9zdGFsRmVkeFwiXSA9IGZhY3RvcnkocmVxdWlyZShcImxvZGFzaFwiKSwgcmVxdWlyZShcInBvc3RhbFwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wicG9zdGFsRmVkeFwiXSA9IGZhY3Rvcnkocm9vdFtcIl9cIl0sIHJvb3RbXCJwb3N0YWxcIl0pO1xufSkodGhpcywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8xX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMl9fKSB7XG5yZXR1cm4gXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uXG4gKiovIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGV4cG9ydHM6IHt9LFxuIFx0XHRcdGlkOiBtb2R1bGVJZCxcbiBcdFx0XHRsb2FkZWQ6IGZhbHNlXG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiB3ZWJwYWNrL2Jvb3RzdHJhcCA0NzhkMzVkMWRkYWUyNzc5NmZlZlxuICoqLyIsImltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCBwb3N0YWwgZnJvbSBcInBvc3RhbFwiO1xuaW1wb3J0IFwiLi9wb3N0YWwtdXRpbHNcIjtcbmltcG9ydCB7IHBhY2tpbmdTbGlwcywgZ2V0UGFja2luZ1NsaXAgfSBmcm9tIFwiLi9wYWNraW5nU2xpcHNcIjtcbmltcG9ydCB7IHN0YXRlLCBkaXNjb25uZWN0LCBOT19PUCwgY29uZmlndXJlIH0gZnJvbSBcIi4vc3RhdGVcIjtcbmltcG9ydCB7IGhhbmRsZXJzLCBvbkZlZGVyYXRlZE1zZyB9IGZyb20gXCIuL2hhbmRsZXJzXCI7XG5pbXBvcnQgZmlsdGVycywgeyBtYXRjaGVzRmlsdGVyLCBhZGRGaWx0ZXIsIHJlbW92ZUZpbHRlciB9IGZyb20gXCIuL2ZpbHRlcnNcIjtcbmltcG9ydCBGZWRlcmF0aW9uQ2xpZW50IGZyb20gXCIuL0ZlZGVyYXRpb25DbGllbnRcIjtcblxuY29uc3QgZmVkeCA9IHBvc3RhbC5mZWR4ID0ge1xuXHRGZWRlcmF0aW9uQ2xpZW50OiBGZWRlcmF0aW9uQ2xpZW50LFxuXHRwYWNraW5nU2xpcHM6IHBhY2tpbmdTbGlwcyxcblx0aGFuZGxlcnM6IGhhbmRsZXJzLFxuXHRjbGllbnRzOiBzdGF0ZS5fY2xpZW50cyxcblx0dHJhbnNwb3J0czogc3RhdGUuX3RyYW5zcG9ydHMsXG5cdGZpbHRlcnMsXG5cdGFkZEZpbHRlcixcblx0cmVtb3ZlRmlsdGVyLFxuXHRjYW5TZW5kUmVtb3RlOiBmdW5jdGlvbiggY2hhbm5lbCwgdG9waWMgKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXNGaWx0ZXIoIGNoYW5uZWwsIHRvcGljLCBcIm91dFwiICk7XG5cdH0sXG5cdGNvbmZpZ3VyZTogY29uZmlndXJlLFxuXHRnZXRQYWNraW5nU2xpcCxcblx0b25GZWRlcmF0ZWRNc2c6IG9uRmVkZXJhdGVkTXNnLFxuXHRzZW5kTWVzc2FnZTogZnVuY3Rpb24oIGVudmVsb3BlICkge1xuXHRcdGlmICggIXN0YXRlLl9yZWFkeSApIHtcblx0XHRcdHN0YXRlLl9vdXRib3VuZFF1ZXVlLnB1c2goIGFyZ3VtZW50cyApO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRfLmVhY2goIHRoaXMudHJhbnNwb3J0cywgZnVuY3Rpb24oIHRyYW5zcG9ydCApIHtcblx0XHRcdHRyYW5zcG9ydC5zZW5kTWVzc2FnZSggZW52ZWxvcGUgKTtcblx0XHR9ICk7XG5cdH0sXG5cdGRpc2Nvbm5lY3Q6IGRpc2Nvbm5lY3QsXG5cdF9nZXRUcmFuc3BvcnRzOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gXy5yZWR1Y2UoIHRoaXMudHJhbnNwb3J0cywgZnVuY3Rpb24oIG1lbW8sIHRyYW5zcG9ydCwgbmFtZSApIHtcblx0XHRcdG1lbW9bbmFtZV0gPSB0cnVlO1xuXHRcdFx0cmV0dXJuIG1lbW87XG5cdFx0fSwge30gKTtcblx0fSxcblx0Lypcblx0XHRzaWduYWxSZWFkeSggY2FsbGJhY2sgKTtcblx0XHRzaWduYWxSZWFkeSggXCJ0cmFuc3BvcnROYW1lXCIgKTtcblx0XHRzaWduYWxSZWFkeSggXCJ0cmFuc3BvcnROYW1lXCIsIGNhbGxiYWNrICk7XG5cdFx0c2lnbmFsUmVhZHkoIFwidHJhbnNwb3J0TmFtZVwiLCB0YXJnZXRJbnN0YW5jZSwgY2FsbGJhY2sgKTsgPC0tIHRoaXMgaXMgTkVXXG5cdFx0c2lnbmFsUmVhZHkoIHsgdHJhbnNwb3J0TmFtZUE6IHRhcmdldHNGb3JBLCB0cmFuc3BvcnROYW1lQjogdGFyZ2V0c0ZvckIsIHRyYW5zcG9ydEM6IHRydWUgfSwgY2FsbGJhY2spO1xuXHQqL1xuXHRzaWduYWxSZWFkeTogZnVuY3Rpb24oIHRyYW5zcG9ydCwgdGFyZ2V0LCBjYWxsYmFjayApIHtcblx0XHRpZiAoICFzdGF0ZS5fcmVhZHkgKSB7XG5cdFx0XHRzdGF0ZS5fc2lnbmFsUXVldWUucHVzaCggYXJndW1lbnRzICk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGxldCB0cmFuc3BvcnRzID0gdGhpcy5fZ2V0VHJhbnNwb3J0cygpO1xuXHRcdHN3aXRjaCAoIGFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0Y2FzZSAxOlxuXHRcdFx0aWYgKCB0eXBlb2YgdHJhbnNwb3J0ID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cdFx0XHRcdGNhbGxiYWNrID0gdHJhbnNwb3J0O1xuXHRcdFx0fSBlbHNlIGlmICggdHlwZW9mIHRyYW5zcG9ydCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdFx0dHJhbnNwb3J0cyA9IHt9O1xuXHRcdFx0XHR0cmFuc3BvcnRzW3RyYW5zcG9ydF0gPSB0aGlzLnRyYW5zcG9ydHNbdHJhbnNwb3J0XTtcblx0XHRcdFx0Y2FsbGJhY2sgPSBOT19PUDtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgMjpcblx0XHRcdGlmICggdHlwZW9mIHRyYW5zcG9ydCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdFx0dHJhbnNwb3J0cyA9IHt9O1xuXHRcdFx0XHR0cmFuc3BvcnRzW3RyYW5zcG9ydF0gPSB0aGlzLnRyYW5zcG9ydHNbdHJhbnNwb3J0XTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRyYW5zcG9ydHMgPSB0cmFuc3BvcnQ7XG5cdFx0XHR9XG5cdFx0XHRjYWxsYmFjayA9IHRhcmdldCB8fCBOT19PUDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgMzpcblx0XHRcdHRyYW5zcG9ydHMgPSB7fTtcblx0XHRcdHRyYW5zcG9ydHNbdHJhbnNwb3J0XSA9IFsgdGFyZ2V0IF07XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdFx0Xy5lYWNoKCB0cmFuc3BvcnRzLCBmdW5jdGlvbiggdGFyZ2V0cywgbmFtZSApIHtcblx0XHRcdHRhcmdldHMgPSB0eXBlb2YgdGFyZ2V0cyA9PT0gXCJib29sZWFuXCIgPyBbXSA6IHRhcmdldHM7XG5cdFx0XHR0aGlzLnRyYW5zcG9ydHNbbmFtZV0uc2lnbmFsUmVhZHkoIHRhcmdldHMsIGNhbGxiYWNrICk7XG5cdFx0fSwgdGhpcyApO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmZWR4O1xuXG5mdW5jdGlvbiBwcm9jZXNzU2lnbmFsUSggYXJncyApIHtcblx0ZmVkeC5zaWduYWxSZWFkeS5hcHBseSggdGhpcywgYXJncyApO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzT3V0Ym91bmRRKCBhcmdzICkge1xuXHRmZWR4LnNlbmQuYXBwbHkoIHRoaXMsIGFyZ3MgKTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0luYm91bmRRKCBtc2cgKSB7XG5cdGZlZHgub25GZWRlcmF0ZWRNc2cuY2FsbCggdGhpcywgbXNnICk7XG59XG5cbnBvc3RhbC5hZGRXaXJlVGFwKCBmdW5jdGlvbiggZGF0YSwgZW52ZWxvcGUgKSB7XG5cdGlmICggZmVkeC5jYW5TZW5kUmVtb3RlKCBlbnZlbG9wZS5jaGFubmVsLCBlbnZlbG9wZS50b3BpYyApICkge1xuXHRcdGZlZHguc2VuZE1lc3NhZ2UoIGVudmVsb3BlICk7XG5cdH1cbn0gKTtcblxucG9zdGFsLnN1YnNjcmliZSgge1xuXHRjaGFubmVsOiBwb3N0YWwuY29uZmlndXJhdGlvbi5TWVNURU1fQ0hBTk5FTCxcblx0dG9waWM6IFwiaW5zdGFuY2VJZC5jaGFuZ2VkXCIsXG5cdGNhbGxiYWNrOiBmdW5jdGlvbigpIHtcblx0XHRzdGF0ZS5fcmVhZHkgPSB0cnVlO1xuXHRcdHdoaWxlICggc3RhdGUuX3NpZ25hbFF1ZXVlLmxlbmd0aCApIHtcblx0XHRcdHByb2Nlc3NTaWduYWxRKCBzdGF0ZS5fc2lnbmFsUXVldWUuc2hpZnQoKSApO1xuXHRcdH1cblx0XHR3aGlsZSAoIHN0YXRlLl9vdXRib3VuZFF1ZXVlLmxlbmd0aCApIHtcblx0XHRcdHByb2Nlc3NPdXRib3VuZFEoIHN0YXRlLl9vdXRib3VuZFF1ZXVlLnNoaWZ0KCkgKTtcblx0XHR9XG5cdFx0d2hpbGUgKCBzdGF0ZS5faW5ib3VuZFF1ZXVlLmxlbmd0aCApIHtcblx0XHRcdHByb2Nlc3NJbmJvdW5kUSggc3RhdGUuX2luYm91bmRRdWV1ZS5zaGlmdCgpICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cbmlmICggcG9zdGFsLmluc3RhbmNlSWQoKSAhPT0gdW5kZWZpbmVkICkge1xuXHRzdGF0ZS5fcmVhZHkgPSB0cnVlO1xufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvaW5kZXguanNcbiAqKi8iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMV9fO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogZXh0ZXJuYWwge1wicm9vdFwiOlwiX1wiLFwiY29tbW9uanNcIjpcImxvZGFzaFwiLFwiY29tbW9uanMyXCI6XCJsb2Rhc2hcIixcImFtZFwiOlwibG9kYXNoXCJ9XG4gKiogbW9kdWxlIGlkID0gMVxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzJfXztcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIGV4dGVybmFsIFwicG9zdGFsXCJcbiAqKiBtb2R1bGUgaWQgPSAyXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCJpbXBvcnQgcG9zdGFsIGZyb20gXCJwb3N0YWxcIjtcblxuaWYgKCAhcG9zdGFsLmNyZWF0ZVVVSUQgKSB7XG5cdHBvc3RhbC5jcmVhdGVVVUlEID0gZnVuY3Rpb24oKSB7XG5cdFx0bGV0IHMgPSBbXTtcblx0XHRjb25zdCBoZXhEaWdpdHMgPSBcIjAxMjM0NTY3ODlhYmNkZWZcIjtcblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCAzNjsgaSsrICkge1xuXHRcdFx0c1tpXSA9IGhleERpZ2l0cy5zdWJzdHIoIE1hdGguZmxvb3IoIE1hdGgucmFuZG9tKCkgKiAweDEwICksIDEgKTtcblx0XHR9XG5cdFx0c1sxNF0gPSBcIjRcIjsgLy8gYml0cyAxMi0xNSBvZiB0aGUgdGltZV9oaV9hbmRfdmVyc2lvbiBmaWVsZCB0byAwMDEwXG5cdFx0LyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuXHRcdHNbMTldID0gaGV4RGlnaXRzLnN1YnN0ciggKCBzWzE5XSAmIDB4MyApIHwgMHg4LCAxICk7IC8vIGJpdHMgNi03IG9mIHRoZSBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkIHRvIDAxXG5cdFx0LyoganNoaW50IGlnbm9yZTplbmQgKi9cblx0XHRzWzhdID0gc1sxM10gPSBzWzE4XSA9IHNbMjNdID0gXCItXCI7XG5cdFx0cmV0dXJuIHMuam9pbiggXCJcIiApO1xuXHR9O1xufVxuaWYgKCAhcG9zdGFsLmluc3RhbmNlSWQgKSB7XG5cdHBvc3RhbC5pbnN0YW5jZUlkID0gKCBmdW5jdGlvbigpIHtcblx0XHRsZXQgX2lkLCBfb2xkSWQ7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCBpZCApIHtcblx0XHRcdGlmICggaWQgKSB7XG5cdFx0XHRcdF9vbGRJZCA9IF9pZDtcblx0XHRcdFx0X2lkID0gaWQ7XG5cdFx0XHRcdHBvc3RhbC5wdWJsaXNoKCB7XG5cdFx0XHRcdFx0Y2hhbm5lbDogcG9zdGFsLmNvbmZpZ3VyYXRpb24uU1lTVEVNX0NIQU5ORUwsXG5cdFx0XHRcdFx0dG9waWM6IFwiaW5zdGFuY2VJZC5jaGFuZ2VkXCIsXG5cdFx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdFx0b2xkSWQ6IF9vbGRJZCxcblx0XHRcdFx0XHRcdG5ld0lkOiBfaWRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBfaWQ7XG5cdFx0fTtcblx0fSgpICk7XG59XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9wb3N0YWwtdXRpbHMuanNcbiAqKi8iLCJpbXBvcnQgcG9zdGFsIGZyb20gXCJwb3N0YWxcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhY2tpbmdTbGlwKCB0eXBlIC8qLCBlbnYgKi8gKSB7XG5cdGlmICggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBwYWNraW5nU2xpcHMsIHR5cGUgKSApIHtcblx0XHRyZXR1cm4gcGFja2luZ1NsaXBzWyB0eXBlIF0uYXBwbHkoIHRoaXMsIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCBhcmd1bWVudHMsIDEgKSApO1xuXHR9XG59XG5cbmV4cG9ydCBjb25zdCBwYWNraW5nU2xpcHMgPSB7XG5cdHBpbmc6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHR0eXBlOiBcImZlZGVyYXRpb24ucGluZ1wiLFxuXHRcdFx0aW5zdGFuY2VJZDogcG9zdGFsLmluc3RhbmNlSWQoKSxcblx0XHRcdHRpbWVTdGFtcDogbmV3IERhdGUoKSxcblx0XHRcdHRpY2tldDogcG9zdGFsLmNyZWF0ZVVVSUQoKVxuXHRcdH07XG5cdH0sXG5cdHBvbmc6IGZ1bmN0aW9uKCBwaW5nICkge1xuXHRcdHJldHVybiB7XG5cdFx0XHR0eXBlOiBcImZlZGVyYXRpb24ucG9uZ1wiLFxuXHRcdFx0aW5zdGFuY2VJZDogcG9zdGFsLmluc3RhbmNlSWQoKSxcblx0XHRcdHRpbWVTdGFtcDogbmV3IERhdGUoKSxcblx0XHRcdHBpbmdEYXRhOiB7XG5cdFx0XHRcdGluc3RhbmNlSWQ6IHBpbmcuaW5zdGFuY2VJZCxcblx0XHRcdFx0dGltZVN0YW1wOiBwaW5nLnRpbWVTdGFtcCxcblx0XHRcdFx0dGlja2V0OiBwaW5nLnRpY2tldFxuXHRcdFx0fVxuXHRcdH07XG5cdH0sXG5cdG1lc3NhZ2U6IGZ1bmN0aW9uKCBlbnYgKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6IFwiZmVkZXJhdGlvbi5tZXNzYWdlXCIsXG5cdFx0XHRpbnN0YW5jZUlkOiBwb3N0YWwuaW5zdGFuY2VJZCgpLFxuXHRcdFx0dGltZVN0YW1wOiBuZXcgRGF0ZSgpLFxuXHRcdFx0ZW52ZWxvcGU6IGVudlxuXHRcdH07XG5cdH0sXG5cdGRpc2Nvbm5lY3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHR0eXBlOiBcImZlZGVyYXRpb24uZGlzY29ubmVjdFwiLFxuXHRcdFx0aW5zdGFuY2VJZDogcG9zdGFsLmluc3RhbmNlSWQoKSxcblx0XHRcdHRpbWVTdGFtcDogbmV3IERhdGUoKVxuXHRcdH07XG5cdH0sXG5cdGJ1bmRsZTogZnVuY3Rpb24oIHBhY2tpbmdTbGlwcyApIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dHlwZTogXCJmZWRlcmF0aW9uLmJ1bmRsZVwiLFxuXHRcdFx0aW5zdGFuY2VJZDogcG9zdGFsLmluc3RhbmNlSWQoKSxcblx0XHRcdHRpbWVTdGFtcDogbmV3IERhdGUoKSxcblx0XHRcdHBhY2tpbmdTbGlwczogcGFja2luZ1NsaXBzXG5cdFx0fTtcblx0fVxufTtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL3BhY2tpbmdTbGlwcy5qc1xuICoqLyIsImltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIjtcblxuY29uc3QgX2RlZmF1bHRzID0ge1xuXHRlbmFibGVkOiB0cnVlLFxuXHRmaWx0ZXJNb2RlOiBcIndoaXRlbGlzdFwiLFxuXHRmaWx0ZXJEaXJlY3Rpb246IFwiYm90aFwiXG59O1xuXG5leHBvcnQgY29uc3QgTk9fT1AgPSBmdW5jdGlvbigpIHt9O1xuXG5leHBvcnQgbGV0IHN0YXRlID0ge1xuXHRfY2xpZW50czogW10sXG5cdF90cmFuc3BvcnRzOiB7fSxcblx0X3JlYWR5OiBmYWxzZSxcblx0X2luYm91bmRRdWV1ZTogW10sXG5cdF9vdXRib3VuZFF1ZXVlOiBbXSxcblx0X3NpZ25hbFF1ZXVlOiBbXSxcblx0X2NvbmZpZzogX2RlZmF1bHRzXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY29uZmlndXJlKCBjZmcgKSB7XG5cdGlmICggY2ZnICYmIGNmZy5maWx0ZXJNb2RlICYmIGNmZy5maWx0ZXJNb2RlICE9PSBcImJsYWNrbGlzdFwiICYmIGNmZy5maWx0ZXJNb2RlICE9PSBcIndoaXRlbGlzdFwiICkge1xuXHRcdHRocm93IG5ldyBFcnJvciggXCJwb3N0YWwuZmVkeCBmaWx0ZXJNb2RlIG11c3QgYmUgJ2JsYWNrbGlzdCcgb3IgJ3doaXRlbGlzdCcuXCIgKTtcblx0fVxuXHRpZiAoIGNmZyApIHtcblx0XHRzdGF0ZS5fY29uZmlnID0gXy5kZWZhdWx0cyggY2ZnLCBfZGVmYXVsdHMgKTtcblx0fVxuXHRyZXR1cm4gc3RhdGUuX2NvbmZpZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc2Nvbm5lY3QoIG9wdGlvbnMgKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXHRsZXQgdHJhbnMgPSBzdGF0ZS5fdHJhbnNwb3J0cztcblx0aWYgKCBvcHRpb25zLnRyYW5zcG9ydCApIHtcblx0XHR0cmFucyA9IHt9O1xuXHRcdHRyYW5zW29wdGlvbnMudHJhbnNwb3J0XSA9IHN0YXRlLl90cmFuc3BvcnRzW29wdGlvbnMudHJhbnNwb3J0XTtcblx0fVxuXHRfLmVhY2goIHRyYW5zLCBmdW5jdGlvbiggdCApIHtcblx0XHR0LmRpc2Nvbm5lY3QoIHtcblx0XHRcdHRhcmdldDogb3B0aW9ucy50YXJnZXQsXG5cdFx0XHRpbnN0YW5jZUlkOiBvcHRpb25zLmluc3RhbmNlSWQsXG5cdFx0XHRkb05vdE5vdGlmeTogISFvcHRpb25zLmRvTm90Tm90aWZ5XG5cdFx0fSApO1xuXHR9ICk7XG59XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9zdGF0ZS5qc1xuICoqLyIsImltcG9ydCB7IGdldFBhY2tpbmdTbGlwIH0gZnJvbSBcIi4vcGFja2luZ1NsaXBzXCI7XG5pbXBvcnQgeyBzdGF0ZSwgZGlzY29ubmVjdCB9IGZyb20gXCIuL3N0YXRlXCI7XG5pbXBvcnQgeyBtYXRjaGVzRmlsdGVyIH0gZnJvbSBcIi4vZmlsdGVyc1wiO1xuaW1wb3J0IHBvc3RhbCBmcm9tIFwicG9zdGFsXCI7XG5pbXBvcnQgXyBmcm9tIFwibG9kYXNoXCI7XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVycyA9IHtcblx0XCJmZWRlcmF0aW9uLnBpbmdcIjogZnVuY3Rpb24oIGRhdGEgLyosIGNhbGxiYWNrICovICkge1xuXHRcdGRhdGEuc291cmNlLnNldEluc3RhbmNlSWQoIGRhdGEucGFja2luZ1NsaXAuaW5zdGFuY2VJZCApO1xuXHRcdGlmICggZGF0YS5zb3VyY2UuaGFuZHNoYWtlQ29tcGxldGUgKSB7XG5cdFx0XHRkYXRhLnNvdXJjZS5zZW5kUG9uZyggZGF0YS5wYWNraW5nU2xpcCApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhLnNvdXJjZS5zZW5kQnVuZGxlKCBbXG5cdFx0XHRnZXRQYWNraW5nU2xpcCggXCJwb25nXCIsIGRhdGEucGFja2luZ1NsaXAgKSxcblx0XHRcdGdldFBhY2tpbmdTbGlwKCBcInBpbmdcIiApXG5cdFx0XHRdICk7XG5cdFx0fVxuXHR9LFxuXHRcImZlZGVyYXRpb24ucG9uZ1wiOiBmdW5jdGlvbiggZGF0YSApIHtcblx0XHRkYXRhLnNvdXJjZS5oYW5kc2hha2VDb21wbGV0ZSA9IHRydWU7XG5cdFx0ZGF0YS5zb3VyY2Uuc2V0SW5zdGFuY2VJZCggZGF0YS5wYWNraW5nU2xpcC5pbnN0YW5jZUlkICk7XG5cdFx0aWYgKCBkYXRhLnNvdXJjZS5waW5nc1tkYXRhLnBhY2tpbmdTbGlwLnBpbmdEYXRhLnRpY2tldF0gKSB7XG5cdFx0XHRkYXRhLnNvdXJjZS5waW5nc1tkYXRhLnBhY2tpbmdTbGlwLnBpbmdEYXRhLnRpY2tldF0uY2FsbGJhY2soIHtcblx0XHRcdFx0dGlja2V0OiBkYXRhLnBhY2tpbmdTbGlwLnBpbmdEYXRhLnRpY2tldCxcblx0XHRcdFx0aW5zdGFuY2VJZDogZGF0YS5wYWNraW5nU2xpcC5pbnN0YW5jZUlkLFxuXHRcdFx0XHRzb3VyY2U6IGRhdGEuc291cmNlXG5cdFx0XHR9ICk7XG5cdFx0XHRkYXRhLnNvdXJjZS5waW5nc1tkYXRhLnBhY2tpbmdTbGlwLnBpbmdEYXRhLnRpY2tldF0gPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggIV8uY29udGFpbnMoIHN0YXRlLl9jbGllbnRzLCBkYXRhLnBhY2tpbmdTbGlwLmluc3RhbmNlSWQgKSApIHtcblx0XHRcdHN0YXRlLl9jbGllbnRzLnB1c2goIGRhdGEucGFja2luZ1NsaXAuaW5zdGFuY2VJZCApO1xuXHRcdH1cblx0XHRwb3N0YWwucHVibGlzaCgge1xuXHRcdFx0Y2hhbm5lbDogXCJwb3N0YWwuZmVkZXJhdGlvblwiLFxuXHRcdFx0dG9waWM6IFwiY2xpZW50LmZlZGVyYXRlZFwiLFxuXHRcdFx0ZGF0YToge1xuXHRcdFx0XHRyZW1vdGVJZDogZGF0YS5zb3VyY2UuaW5zdGFuY2VJZCxcblx0XHRcdFx0bG9jYWxJZDogcG9zdGFsLmluc3RhbmNlSWQoKSxcblx0XHRcdFx0dHJhbnNwb3J0OiBkYXRhLnRyYW5zcG9ydFxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblx0XCJmZWRlcmF0aW9uLmRpc2Nvbm5lY3RcIjogZnVuY3Rpb24oIGRhdGEgKSB7XG5cdFx0c3RhdGUuX2NsaWVudHMgPSBfLndpdGhvdXQoIHN0YXRlLl9jbGllbnRzLCBkYXRhLnNvdXJjZS5pbnN0YW5jZUlkICk7XG5cdFx0ZGlzY29ubmVjdCgge1xuXHRcdFx0dHJhbnNwb3J0OiBkYXRhLnNvdXJjZS50cmFuc3BvcnROYW1lLFxuXHRcdFx0aW5zdGFuY2VJZDogZGF0YS5zb3VyY2UuaW5zdGFuY2VJZCxcblx0XHRcdGRvTm90Tm90aWZ5OiB0cnVlXG5cdFx0fSApO1xuXHR9LFxuXHRcImZlZGVyYXRpb24ubWVzc2FnZVwiOiBmdW5jdGlvbiggZGF0YSApIHtcblx0XHRjb25zdCBlbnYgPSBkYXRhLnBhY2tpbmdTbGlwLmVudmVsb3BlO1xuXHRcdGlmICggbWF0Y2hlc0ZpbHRlciggZW52LmNoYW5uZWwsIGVudi50b3BpYywgXCJpblwiICkgKSB7XG5cdFx0XHRlbnYubGFzdFNlbmRlciA9IGRhdGEucGFja2luZ1NsaXAuaW5zdGFuY2VJZDtcblx0XHRcdHBvc3RhbC5wdWJsaXNoKCBlbnYgKTtcblx0XHR9XG5cdH0sXG5cdFwiZmVkZXJhdGlvbi5idW5kbGVcIjogZnVuY3Rpb24oIGRhdGEgKSB7XG5cdFx0Xy5lYWNoKCBkYXRhLnBhY2tpbmdTbGlwLnBhY2tpbmdTbGlwcywgZnVuY3Rpb24oIHNsaXAgKSB7XG5cdFx0XHRvbkZlZGVyYXRlZE1zZyggXy5leHRlbmQoIHt9LCBkYXRhLCB7XG5cdFx0XHRcdHBhY2tpbmdTbGlwOiBzbGlwXG5cdFx0XHR9ICkgKTtcblx0XHR9ICk7XG5cdH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBvbkZlZGVyYXRlZE1zZyggZGF0YSApIHtcblx0aWYgKCAhc3RhdGUuX3JlYWR5ICkge1xuXHRcdHN0YXRlLl9pbmJvdW5kUXVldWUucHVzaCggZGF0YSApO1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggaGFuZGxlcnMsIGRhdGEucGFja2luZ1NsaXAudHlwZSApICkge1xuXHRcdGhhbmRsZXJzW2RhdGEucGFja2luZ1NsaXAudHlwZV0oIGRhdGEgKTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoIFwicG9zdGFsLmZlZGVyYXRpb24gZG9lcyBub3QgaGF2ZSBhIG1lc3NhZ2UgaGFuZGxlciBmb3IgJ1wiICsgZGF0YS5wYWNraW5nU2xpcC50eXBlICsgXCInLlwiICk7XG5cdH1cbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2hhbmRsZXJzLmpzXG4gKiovIiwiaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0IHsgc3RhdGUgfSBmcm9tIFwiLi9zdGF0ZVwiO1xuaW1wb3J0IHBvc3RhbCBmcm9tIFwicG9zdGFsXCI7XG5cbmNvbnN0IGZpbHRlcnMgPSB7XG5cdFwiaW5cIjoge30sIC8vIGpzY3M6aWdub3JlIGRpc2FsbG93UXVvdGVkS2V5c0luT2JqZWN0c1xuXHRvdXQ6IHt9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmaWx0ZXJzO1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkRmlsdGVyKCBfZmlsdGVycyApIHtcblx0X2ZpbHRlcnMgPSBfLmlzQXJyYXkoIF9maWx0ZXJzICkgPyBfZmlsdGVycyA6IFsgX2ZpbHRlcnMgXTtcblx0Xy5lYWNoKCBfZmlsdGVycywgZnVuY3Rpb24oIGZpbHRlciApIHtcblx0XHRmaWx0ZXIuZGlyZWN0aW9uID0gZmlsdGVyLmRpcmVjdGlvbiB8fCBzdGF0ZS5fY29uZmlnLmZpbHRlckRpcmVjdGlvbjtcblx0XHRfLmVhY2goICggZmlsdGVyLmRpcmVjdGlvbiA9PT0gXCJib3RoXCIgKSA/IFsgXCJpblwiLCBcIm91dFwiIF0gOiBbIGZpbHRlci5kaXJlY3Rpb24gXSwgZnVuY3Rpb24oIGRpciApIHtcblx0XHRcdGlmICggIWZpbHRlcnNbIGRpciBdWyBmaWx0ZXIuY2hhbm5lbCBdICkge1xuXHRcdFx0XHRmaWx0ZXJzWyBkaXIgXVsgZmlsdGVyLmNoYW5uZWwgXSA9IFsgZmlsdGVyLnRvcGljIF07XG5cdFx0XHR9IGVsc2UgaWYgKCAhKCBfLmluY2x1ZGUoIGZpbHRlcnNbIGRpciBdWyBmaWx0ZXIuY2hhbm5lbCBdLCBmaWx0ZXIudG9waWMgKSApICkge1xuXHRcdFx0XHRmaWx0ZXJzWyBkaXIgXVsgZmlsdGVyLmNoYW5uZWwgXS5wdXNoKCBmaWx0ZXIudG9waWMgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUZpbHRlciggX2ZpbHRlcnMgKSB7XG5cdF9maWx0ZXJzID0gXy5pc0FycmF5KCBfZmlsdGVycyApID8gX2ZpbHRlcnMgOiBbIF9maWx0ZXJzIF07XG5cdF8uZWFjaCggX2ZpbHRlcnMsIGZ1bmN0aW9uKCBmaWx0ZXIgKSB7XG5cdFx0ZmlsdGVyLmRpcmVjdGlvbiA9IGZpbHRlci5kaXJlY3Rpb24gfHwgc3RhdGUuX2NvbmZpZy5maWx0ZXJEaXJlY3Rpb247XG5cdFx0Xy5lYWNoKCAoIGZpbHRlci5kaXJlY3Rpb24gPT09IFwiYm90aFwiICkgPyBbIFwiaW5cIiwgXCJvdXRcIiBdIDogWyBmaWx0ZXIuZGlyZWN0aW9uIF0sIGZ1bmN0aW9uKCBkaXIgKSB7XG5cdFx0XHRpZiAoIGZpbHRlcnNbIGRpciBdWyBmaWx0ZXIuY2hhbm5lbCBdICYmIF8uaW5jbHVkZSggZmlsdGVyc1sgZGlyIF1bIGZpbHRlci5jaGFubmVsIF0sIGZpbHRlci50b3BpYyApICkge1xuXHRcdFx0XHRmaWx0ZXJzWyBkaXIgXVsgZmlsdGVyLmNoYW5uZWwgXSA9IF8ud2l0aG91dCggZmlsdGVyc1sgZGlyIF1bIGZpbHRlci5jaGFubmVsIF0sIGZpbHRlci50b3BpYyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hlc0ZpbHRlciggY2hhbm5lbCwgdG9waWMsIGRpcmVjdGlvbiApIHtcblx0Y29uc3QgY2hhbm5lbFByZXNlbnQgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIGZpbHRlcnNbZGlyZWN0aW9uXSwgY2hhbm5lbCApO1xuXHRjb25zdCB0b3BpY01hdGNoID0gKCBjaGFubmVsUHJlc2VudCAmJiBfLmFueSggZmlsdGVyc1sgZGlyZWN0aW9uIF1bIGNoYW5uZWwgXSwgZnVuY3Rpb24oIGJpbmRpbmcgKSB7XG5cdFx0cmV0dXJuIHBvc3RhbC5jb25maWd1cmF0aW9uLnJlc29sdmVyLmNvbXBhcmUoIGJpbmRpbmcsIHRvcGljICk7XG5cdH0gKSApO1xuXHRjb25zdCBibGFja2xpc3RpbmcgPSBzdGF0ZS5fY29uZmlnLmZpbHRlck1vZGUgPT09IFwiYmxhY2tsaXN0XCI7XG5cdHJldHVybiBzdGF0ZS5fY29uZmlnLmVuYWJsZWQgJiYgKCAoIGJsYWNrbGlzdGluZyAmJiAoICFjaGFubmVsUHJlc2VudCB8fCAoIGNoYW5uZWxQcmVzZW50ICYmICF0b3BpY01hdGNoICkgKSApIHx8ICggIWJsYWNrbGlzdGluZyAmJiBjaGFubmVsUHJlc2VudCAmJiB0b3BpY01hdGNoICkgKTtcbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2ZpbHRlcnMuanNcbiAqKi8iLCJpbXBvcnQgeyBnZXRQYWNraW5nU2xpcCB9IGZyb20gXCIuL3BhY2tpbmdTbGlwc1wiO1xuaW1wb3J0IHsgb25GZWRlcmF0ZWRNc2cgfSBmcm9tIFwiLi9oYW5kbGVyc1wiO1xuaW1wb3J0IHsgc3RhdGUsIE5PX09QIH0gZnJvbSBcIi4vc3RhdGVcIjtcbmltcG9ydCBwb3N0YWwgZnJvbSBcInBvc3RhbFwiO1xuaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGZWRlcmF0aW9uQ2xpZW50IHtcblx0Y29uc3RydWN0b3IoIHRhcmdldCwgb3B0aW9ucywgaW5zdGFuY2VJZCApIHtcblx0XHR0aGlzLnRhcmdldCA9IHRhcmdldDtcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXHRcdHRoaXMucGluZ3MgPSB7fTtcblx0XHR0aGlzLmluc3RhbmNlSWQgPSBpbnN0YW5jZUlkO1xuXHRcdHRoaXMuaGFuZHNoYWtlQ29tcGxldGUgPSBmYWxzZTtcblx0fVxuXG5cdHNlbmRQaW5nKCBjYWxsYmFjayApIHtcblx0XHRjb25zdCBwYWNraW5nU2xpcCA9IGdldFBhY2tpbmdTbGlwKCBcInBpbmdcIiApO1xuXHRcdHRoaXMucGluZ3NbcGFja2luZ1NsaXAudGlja2V0XSA9IHtcblx0XHRcdHRpY2tldDogcGFja2luZ1NsaXAudGlja2V0LFxuXHRcdFx0Y2FsbGJhY2s6IGNhbGxiYWNrIHx8IE5PX09QXG5cdFx0fTtcblx0XHR0aGlzLnNlbmQoIHBhY2tpbmdTbGlwICk7XG5cdH1cblxuXHRzZW5kUG9uZyggb3JpZ1BhY2tpbmdTbGlwICkge1xuXHRcdHRoaXMuc2VuZCggZ2V0UGFja2luZ1NsaXAoIFwicG9uZ1wiLCBvcmlnUGFja2luZ1NsaXAgKSApO1xuXHR9XG5cblx0c2VuZEJ1bmRsZSggc2xpcHMgKSB7XG5cdFx0dGhpcy5zZW5kKCBnZXRQYWNraW5nU2xpcCggXCJidW5kbGVcIiwgc2xpcHMgKSApO1xuXHR9XG5cblx0c2VuZE1lc3NhZ2UoIGVudmVsb3BlICkge1xuXHRcdGlmICggIXRoaXMuaGFuZHNoYWtlQ29tcGxldGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGVudmVsb3BlLm9yaWdpbklkID0gZW52ZWxvcGUub3JpZ2luSWQgfHwgcG9zdGFsLmluc3RhbmNlSWQoKTtcblx0XHRjb25zdCBlbnYgPSBfLmNsb25lKCBlbnZlbG9wZSApO1xuXHRcdGlmICggdGhpcy5pbnN0YW5jZUlkICYmIHRoaXMuaW5zdGFuY2VJZCAhPT0gZW52Lmxhc3RTZW5kZXIgJiZcblx0XHQoICFlbnYua25vd25JZHMgfHwgIWVudi5rbm93bklkcy5sZW5ndGggfHxcblx0XHQoIGVudi5rbm93bklkcyAmJiAhXy5pbmNsdWRlKCBlbnYua25vd25JZHMsIHRoaXMuaW5zdGFuY2VJZCApICkgKVxuXHRcdCkge1xuXHRcdFx0ZW52Lmtub3duSWRzID0gKCBlbnYua25vd25JZHMgfHwgW10gKS5jb25jYXQoIF8ud2l0aG91dCggc3RhdGUuX2NsaWVudHMsIHRoaXMuaW5zdGFuY2VJZCApICk7XG5cdFx0XHR0aGlzLnNlbmQoIGdldFBhY2tpbmdTbGlwKCBcIm1lc3NhZ2VcIiwgZW52ICkgKTtcblx0XHR9XG5cdH1cblxuXHRkaXNjb25uZWN0KCkge1xuXHRcdHRoaXMuc2VuZCggZ2V0UGFja2luZ1NsaXAoIFwiZGlzY29ubmVjdFwiICkgKTtcblx0fVxuXG5cdG9uTWVzc2FnZSggcGFja2luZ1NsaXAgKSB7XG5cdFx0aWYgKCB0aGlzLnNob3VsZFByb2Nlc3MoKSApIHtcblx0XHRcdG9uRmVkZXJhdGVkTXNnKCB7XG5cdFx0XHRcdHRyYW5zcG9ydDogdGhpcy50cmFuc3BvcnROYW1lLFxuXHRcdFx0XHRwYWNraW5nU2xpcDogcGFja2luZ1NsaXAsXG5cdFx0XHRcdHNvdXJjZTogdGhpc1xuXHRcdFx0fSApO1xuXHRcdH1cblx0fVxuXG5cdHNob3VsZFByb2Nlc3MoKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRzZW5kKCAvKiBtc2cgKi8gKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCBcIkFuIG9iamVjdCBkZXJpdmluZyBmcm9tIEZlZGVyYXRpb25DbGllbnQgbXVzdCBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIGZvciAnc2VuZCcuXCIgKTtcblx0fVxuXG5cdHNldEluc3RhbmNlSWQoIGlkICkge1xuXHRcdHRoaXMuaW5zdGFuY2VJZCA9IGlkO1xuXHR9XG5cblx0c3RhdGljIGV4dGVuZCggcHJvcHMsIGN0clByb3BzICkge1xuXHRcdGZ1bmN0aW9uIEZlZFhDbGllbnQoKSB7XG5cdFx0XHRGZWRlcmF0aW9uQ2xpZW50LmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9XG5cblx0XHRGZWRYQ2xpZW50LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEZlZGVyYXRpb25DbGllbnQucHJvdG90eXBlICk7XG5cdFx0Xy5leHRlbmQoIEZlZFhDbGllbnQucHJvdG90eXBlLCBwcm9wcyApO1xuXHRcdF8uZXh0ZW5kKCBGZWRYQ2xpZW50LCBjdHJQcm9wcyApO1xuXG5cdFx0cmV0dXJuIEZlZFhDbGllbnQ7XG5cdH1cbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL0ZlZGVyYXRpb25DbGllbnQuanNcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9
\ No newline at end of file
+;
\ No newline at end of file
diff --git a/lib/postal.federation.min.js b/lib/postal.federation.min.js
index 591da07..2df4a5d 100644
--- a/lib/postal.federation.min.js
+++ b/lib/postal.federation.min.js
@@ -1,9 +1,9 @@
/*!
* * postal.federation - A base plugin for federating instances of postal.js across various boundaries.
* * Author: Jim Cowart (http://ifandelse.com)
- * * Version: v0.5.3
+ * * Version: v0.5.5
* * Url: http://github.com/postaljs/postal.federation
* * License(s): (MIT OR GPL-2.0)
*/
-(function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n(require("lodash"),require("postal")):"function"==typeof define&&define.amd?define(["lodash","postal"],n):"object"==typeof exports?exports.postalFedx=n(require("lodash"),require("postal")):e.postalFedx=n(e._,e.postal)})(this,function(e,n){return function(e){function n(i){if(t[i])return t[i].exports;var o=t[i]={exports:{},id:i,loaded:!1};return e[i].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function i(e){x.signalReady.apply(this,e)}function o(e){x.send.apply(this,e)}function a(e){x.onFederatedMsg.call(this,e)}var r=function(e){return e&&e.__esModule?e["default"]:e},c=r(t(1)),s=r(t(2));t(3);var u=t(4),d=u.packingSlips,l=u.getPackingSlip,p=t(5),f=p.state,g=p.disconnect,h=p.NO_OP,_=p.configure,I=t(6),k=I.handlers,v=I.onFederatedMsg,y=t(7),b=r(y),m=y.matchesFilter,S=y.addFilter,w=y.removeFilter,M=r(t(8)),x=s.fedx={FederationClient:M,packingSlips:d,handlers:k,clients:f._clients,transports:f._transports,filters:b,addFilter:S,removeFilter:w,canSendRemote:function(e,n){return m(e,n,"out")},configure:_,getPackingSlip:l,onFederatedMsg:v,sendMessage:function(e){return f._ready?void c.each(this.transports,function(n){n.sendMessage(e)}):void f._outboundQueue.push(arguments)},disconnect:g,_getTransports:function(){return c.reduce(this.transports,function(e,n,t){return e[t]=!0,e},{})},signalReady:function(e,n,t){if(!f._ready)return void f._signalQueue.push(arguments);var i=this._getTransports();switch(arguments.length){case 1:"function"==typeof e?t=e:"string"==typeof e&&(i={},i[e]=this.transports[e],t=h);break;case 2:"string"==typeof e?(i={},i[e]=this.transports[e]):i=e,t=n||h;break;case 3:i={},i[e]=[n]}c.each(i,function(e,n){e="boolean"==typeof e?[]:e,this.transports[n].signalReady(e,t)},this)}};e.exports=x,s.addWireTap(function(e,n){x.canSendRemote(n.channel,n.topic)&&x.sendMessage(n)}),s.subscribe({channel:s.configuration.SYSTEM_CHANNEL,topic:"instanceId.changed",callback:function(){for(f._ready=!0;f._signalQueue.length;)i(f._signalQueue.shift());for(;f._outboundQueue.length;)o(f._outboundQueue.shift());for(;f._inboundQueue.length;)a(f._inboundQueue.shift())}}),void 0!==s.instanceId()&&(f._ready=!0)},function(n,t){n.exports=e},function(e,t){e.exports=n},function(e,n,t){var i=function(e){return e&&e.__esModule?e["default"]:e},o=i(t(2));o.createUUID||(o.createUUID=function(){for(var e=[],n="0123456789abcdef",t=0;36>t;t++)e[t]=n.substr(Math.floor(16*Math.random()),1);return e[14]="4",e[19]=n.substr(3&e[19]|8,1),e[8]=e[13]=e[18]=e[23]="-",e.join("")}),o.instanceId||(o.instanceId=function(){var e=void 0,n=void 0;return function(t){return t&&(n=e,e=t,o.publish({channel:o.configuration.SYSTEM_CHANNEL,topic:"instanceId.changed",data:{oldId:n,newId:e}})),e}}())},function(e,n,t){function i(e){return Object.prototype.hasOwnProperty.call(r,e)?r[e].apply(this,Array.prototype.slice.call(arguments,1)):void 0}var o=function(e){return e&&e.__esModule?e["default"]:e};n.getPackingSlip=i,Object.defineProperty(n,"__esModule",{value:!0});var a=o(t(2)),r={ping:function(){return{type:"federation.ping",instanceId:a.instanceId(),timeStamp:new Date,ticket:a.createUUID()}},pong:function(e){return{type:"federation.pong",instanceId:a.instanceId(),timeStamp:new Date,pingData:{instanceId:e.instanceId,timeStamp:e.timeStamp,ticket:e.ticket}}},message:function(e){return{type:"federation.message",instanceId:a.instanceId(),timeStamp:new Date,envelope:e}},disconnect:function(){return{type:"federation.disconnect",instanceId:a.instanceId(),timeStamp:new Date}},bundle:function(e){return{type:"federation.bundle",instanceId:a.instanceId(),timeStamp:new Date,packingSlips:e}}};n.packingSlips=r},function(e,n,t){function i(e){if(e&&e.filterMode&&"blacklist"!==e.filterMode&&"whitelist"!==e.filterMode)throw new Error("postal.fedx filterMode must be 'blacklist' or 'whitelist'.");return e&&(u._config=r.defaults(e,c)),u._config}function o(e){e=e||{};var n=u._transports;e.transport&&(n={},n[e.transport]=u._transports[e.transport]),r.each(n,function(n){n.disconnect({target:e.target,instanceId:e.instanceId,doNotNotify:!!e.doNotNotify})})}var a=function(e){return e&&e.__esModule?e["default"]:e};n.configure=i,n.disconnect=o,Object.defineProperty(n,"__esModule",{value:!0});var r=a(t(1)),c={enabled:!0,filterMode:"whitelist",filterDirection:"both"},s=function(){};n.NO_OP=s;var u={_clients:[],_transports:{},_ready:!1,_inboundQueue:[],_outboundQueue:[],_signalQueue:[],_config:c};n.state=u},function(e,n,t){function i(e){if(!c._ready)return void c._inboundQueue.push(e);if(!Object.prototype.hasOwnProperty.call(p,e.packingSlip.type))throw new Error("postal.federation does not have a message handler for '"+e.packingSlip.type+"'.");p[e.packingSlip.type](e)}var o=function(e){return e&&e.__esModule?e["default"]:e};n.onFederatedMsg=i,Object.defineProperty(n,"__esModule",{value:!0});var a=t(4).getPackingSlip,r=t(5),c=r.state,s=r.disconnect,u=t(7).matchesFilter,d=o(t(2)),l=o(t(1)),p={"federation.ping":function(e){e.source.setInstanceId(e.packingSlip.instanceId),e.source.handshakeComplete?e.source.sendPong(e.packingSlip):e.source.sendBundle([a("pong",e.packingSlip),a("ping")])},"federation.pong":function(e){e.source.handshakeComplete=!0,e.source.setInstanceId(e.packingSlip.instanceId),e.source.pings[e.packingSlip.pingData.ticket]&&(e.source.pings[e.packingSlip.pingData.ticket].callback({ticket:e.packingSlip.pingData.ticket,instanceId:e.packingSlip.instanceId,source:e.source}),e.source.pings[e.packingSlip.pingData.ticket]=void 0),l.contains(c._clients,e.packingSlip.instanceId)||c._clients.push(e.packingSlip.instanceId),d.publish({channel:"postal.federation",topic:"client.federated",data:{remoteId:e.source.instanceId,localId:d.instanceId(),transport:e.transport}})},"federation.disconnect":function(e){c._clients=l.without(c._clients,e.source.instanceId),s({transport:e.source.transportName,instanceId:e.source.instanceId,doNotNotify:!0})},"federation.message":function(e){var n=e.packingSlip.envelope;u(n.channel,n.topic,"in")&&(n.lastSender=e.packingSlip.instanceId,d.publish(n))},"federation.bundle":function(e){l.each(e.packingSlip.packingSlips,function(n){i(l.extend({},e,{packingSlip:n}))})}};n.handlers=p},function(e,n,t){function i(e){e=c.isArray(e)?e:[e],c.each(e,function(e){e.direction=e.direction||s._config.filterDirection,c.each("both"===e.direction?["in","out"]:[e.direction],function(n){d[n][e.channel]?c.include(d[n][e.channel],e.topic)||d[n][e.channel].push(e.topic):d[n][e.channel]=[e.topic]})})}function o(e){e=c.isArray(e)?e:[e],c.each(e,function(e){e.direction=e.direction||s._config.filterDirection,c.each("both"===e.direction?["in","out"]:[e.direction],function(n){d[n][e.channel]&&c.include(d[n][e.channel],e.topic)&&(d[n][e.channel]=c.without(d[n][e.channel],e.topic))})})}function a(e,n,t){var i=Object.prototype.hasOwnProperty.call(d[t],e),o=i&&c.any(d[t][e],function(e){return u.configuration.resolver.compare(e,n)}),a="blacklist"===s._config.filterMode;return s._config.enabled&&(a&&(!i||i&&!o)||!a&&i&&o)}var r=function(e){return e&&e.__esModule?e["default"]:e};n.addFilter=i,n.removeFilter=o,n.matchesFilter=a,Object.defineProperty(n,"__esModule",{value:!0});var c=r(t(1)),s=t(5).state,u=r(t(2)),d={"in":{},out:{}};n["default"]=d},function(e,n,t){var i=function(e){return e&&e.__esModule?e["default"]:e},o=function(){function e(e,n){for(var t in n){var i=n[t];i.configurable=!0,i.value&&(i.writable=!0)}Object.defineProperties(e,n)}return function(n,t,i){return t&&e(n.prototype,t),i&&e(n,i),n}}(),a=function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")},r=t(4).getPackingSlip,c=t(6).onFederatedMsg,s=t(5),u=s.state,d=s.NO_OP,l=i(t(2)),p=i(t(1)),f=function(){function e(n,t,i){a(this,e),this.target=n,this.options=t||{},this.pings={},this.instanceId=i,this.handshakeComplete=!1}return o(e,{sendPing:{value:function(e){var n=r("ping");this.pings[n.ticket]={ticket:n.ticket,callback:e||d},this.send(n)}},sendPong:{value:function(e){this.send(r("pong",e))}},sendBundle:{value:function(e){this.send(r("bundle",e))}},sendMessage:{value:function(e){if(this.handshakeComplete){e.originId=e.originId||l.instanceId();var n=p.clone(e);!this.instanceId||this.instanceId===n.lastSender||n.knownIds&&n.knownIds.length&&(!n.knownIds||p.include(n.knownIds,this.instanceId))||(n.knownIds=(n.knownIds||[]).concat(p.without(u._clients,this.instanceId)),this.send(r("message",n)))}}},disconnect:{value:function(){this.send(r("disconnect"))}},onMessage:{value:function(e){this.shouldProcess()&&c({transport:this.transportName,packingSlip:e,source:this})}},shouldProcess:{value:function(){return!0}},send:{value:function(){throw new Error("An object deriving from FederationClient must provide an implementation for 'send'.")}},setInstanceId:{value:function(e){this.instanceId=e}}},{extend:{value:function(n,t){function i(){e.apply(this,arguments)}return i.prototype=Object.create(e.prototype),p.extend(i.prototype,n),p.extend(i,t),i}}}),e}();e.exports=f}])});
-//# sourceMappingURL=postal.federation.min.js.map
\ No newline at end of file
+(function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("lodash"),require("postal")):"function"==typeof define&&define.amd?define(["lodash","postal"],t):"object"==typeof exports?exports.postalFedx=t(require("lodash"),require("postal")):e.postalFedx=t(e._,e.postal)})(this,function(e,t){return function(e){function t(i){if(n[i])return n[i].exports;var a=n[i]={exports:{},id:i,loaded:!1};return e[i].call(a.exports,a,a.exports,t),a.loaded=!0,a.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function i(e){return e&&e.__esModule?e:{"default":e}}function a(e){y.signalReady.apply(this,e)}function o(e){y.send.apply(this,e)}function s(e){y.onFederatedMsg.call(this,e)}Object.defineProperty(t,"__esModule",{value:!0});var r=n(1),c=i(r),u=n(2),d=i(u);n(3);var l=n(4),f=n(5),p=n(6),g=n(7),h=i(g),k=n(8),_=i(k),y=d["default"].fedx={FederationClient:_["default"],packingSlips:l.packingSlips,handlers:p.handlers,clients:f.state._clients,transports:f.state._transports,filters:h["default"],addFilter:g.addFilter,removeFilter:g.removeFilter,canSendRemote:function(e,t){return(0,g.matchesFilter)(e,t,"out")},configure:f.configure,getPackingSlip:l.getPackingSlip,onFederatedMsg:p.onFederatedMsg,sendMessage:function(e){return f.state._ready?void c["default"].forEach(this.transports,function(t){t.sendMessage(e)}):void f.state._outboundQueue.push(arguments)},disconnect:f.disconnect,_getTransports:function(){return c["default"].reduce(this.transports,function(e,t,n){return e[n]=!0,e},{})},signalReady:function(e,t,n){if(!f.state._ready)return void f.state._signalQueue.push(arguments);var i=this._getTransports();switch(arguments.length){case 1:"function"==typeof e?n=e:"string"==typeof e&&(i={},i[e]=this.transports[e],n=f.NO_OP);break;case 2:"string"==typeof e?(i={},i[e]=this.transports[e]):i=e,n=t||f.NO_OP;break;case 3:i={},i[e]=[t]}c["default"].forEach(i,c["default"].bind(function(e,t){e="boolean"==typeof e?[]:e,this.transports[t].signalReady(e,n)},this))}};t["default"]=y,d["default"].addWireTap(function(e,t){y.canSendRemote(t.channel,t.topic)&&y.sendMessage(t)}),d["default"].subscribe({channel:d["default"].configuration.SYSTEM_CHANNEL,topic:"instanceId.changed",callback:function(){for(f.state._ready=!0;f.state._signalQueue.length;)a(f.state._signalQueue.shift());for(;f.state._outboundQueue.length;)o(f.state._outboundQueue.shift());for(;f.state._inboundQueue.length;)s(f.state._inboundQueue.shift())}}),void 0!==d["default"].instanceId()&&(f.state._ready=!0),e.exports=t["default"]},function(t,n){t.exports=e},function(e,n){e.exports=t},function(e,t,n){function i(e){return e&&e.__esModule?e:{"default":e}}var a=n(2),o=i(a);o["default"].createUUID||(o["default"].createUUID=function(){for(var e=[],t="0123456789abcdef",n=0;n<36;n++)e[n]=t.substr(Math.floor(16*Math.random()),1);return e[14]="4",e[19]=t.substr(3&e[19]|8,1),e[8]=e[13]=e[18]=e[23]="-",e.join("")}),o["default"].instanceId||(o["default"].instanceId=function(){var e=void 0,t=void 0;return function(n){return n&&(t=e,e=n,o["default"].publish({channel:o["default"].configuration.SYSTEM_CHANNEL,topic:"instanceId.changed",data:{oldId:t,newId:e}})),e}}())},function(e,t,n){function i(e){return e&&e.__esModule?e:{"default":e}}function a(e){if(Object.prototype.hasOwnProperty.call(r,e))return r[e].apply(this,Array.prototype.slice.call(arguments,1))}Object.defineProperty(t,"__esModule",{value:!0}),t.getPackingSlip=a;var o=n(2),s=i(o),r={ping:function(){return{type:"federation.ping",instanceId:s["default"].instanceId(),timeStamp:new Date,ticket:s["default"].createUUID()}},pong:function(e){return{type:"federation.pong",instanceId:s["default"].instanceId(),timeStamp:new Date,pingData:{instanceId:e.instanceId,timeStamp:e.timeStamp,ticket:e.ticket}}},message:function(e){return{type:"federation.message",instanceId:s["default"].instanceId(),timeStamp:new Date,envelope:e}},disconnect:function(){return{type:"federation.disconnect",instanceId:s["default"].instanceId(),timeStamp:new Date}},bundle:function(e){return{type:"federation.bundle",instanceId:s["default"].instanceId(),timeStamp:new Date,packingSlips:e}}};t.packingSlips=r},function(e,t,n){function i(e){return e&&e.__esModule?e:{"default":e}}function a(e){if(e&&e.filterMode&&"blacklist"!==e.filterMode&&"whitelist"!==e.filterMode)throw new Error("postal.fedx filterMode must be 'blacklist' or 'whitelist'.");return e&&(d._config=r["default"].defaults(e,c)),d._config}function o(e){e=e||{};var t=d._transports;e.transport&&(t={},t[e.transport]=d._transports[e.transport]),r["default"].forEach(t,function(t){t.disconnect({target:e.target,instanceId:e.instanceId,doNotNotify:!!e.doNotNotify})})}Object.defineProperty(t,"__esModule",{value:!0}),t.configure=a,t.disconnect=o;var s=n(1),r=i(s),c={enabled:!0,filterMode:"whitelist",filterDirection:"both"},u=function(){};t.NO_OP=u;var d={_clients:[],_transports:{},_ready:!1,_inboundQueue:[],_outboundQueue:[],_signalQueue:[],_config:c};t.state=d},function(e,t,n){function i(e){return e&&e.__esModule?e:{"default":e}}function a(e){if(!s.state._ready)return void s.state._inboundQueue.push(e);if(!Object.prototype.hasOwnProperty.call(f,e.packingSlip.type))throw new Error("postal.federation does not have a message handler for '"+e.packingSlip.type+"'.");f[e.packingSlip.type](e)}Object.defineProperty(t,"__esModule",{value:!0}),t.onFederatedMsg=a;var o=n(4),s=n(5),r=n(7),c=n(2),u=i(c),d=n(1),l=i(d),f={"federation.ping":function(e){e.source.setInstanceId(e.packingSlip.instanceId),e.source.handshakeComplete?e.source.sendPong(e.packingSlip):e.source.sendBundle([(0,o.getPackingSlip)("pong",e.packingSlip),(0,o.getPackingSlip)("ping")])},"federation.pong":function(e){e.source.handshakeComplete=!0,e.source.setInstanceId(e.packingSlip.instanceId),e.source.pings[e.packingSlip.pingData.ticket]&&(e.source.pings[e.packingSlip.pingData.ticket].callback({ticket:e.packingSlip.pingData.ticket,instanceId:e.packingSlip.instanceId,source:e.source}),e.source.pings[e.packingSlip.pingData.ticket]=void 0),l["default"].includes(s.state._clients,e.packingSlip.instanceId)||s.state._clients.push(e.packingSlip.instanceId),u["default"].publish({channel:"postal.federation",topic:"client.federated",data:{remoteId:e.source.instanceId,localId:u["default"].instanceId(),transport:e.transport}})},"federation.disconnect":function(e){s.state._clients=l["default"].without(s.state._clients,e.source.instanceId),(0,s.disconnect)({transport:e.source.transportName,instanceId:e.source.instanceId,doNotNotify:!0})},"federation.message":function(e){var t=e.packingSlip.envelope;(0,r.matchesFilter)(t.channel,t.topic,"in")&&(t.lastSender=e.packingSlip.instanceId,u["default"].publish(t))},"federation.bundle":function(e){l["default"].forEach(e.packingSlip.packingSlips,function(t){a(l["default"].extend({},e,{packingSlip:t}))})}};t.handlers=f},function(e,t,n){function i(e){return e&&e.__esModule?e:{"default":e}}function a(e){e=c["default"].isArray(e)?e:[e],c["default"].forEach(e,function(e){e.direction=e.direction||u.state._config.filterDirection,c["default"].forEach("both"===e.direction?["in","out"]:[e.direction],function(t){f[t][e.channel]?c["default"].includes(f[t][e.channel],e.topic)||f[t][e.channel].push(e.topic):f[t][e.channel]=[e.topic]})})}function o(e){e=c["default"].isArray(e)?e:[e],c["default"].forEach(e,function(e){e.direction=e.direction||u.state._config.filterDirection,c["default"].forEach("both"===e.direction?["in","out"]:[e.direction],function(t){f[t][e.channel]&&c["default"].includes(f[t][e.channel],e.topic)&&(f[t][e.channel]=c["default"].without(f[t][e.channel],e.topic))})})}function s(e,t,n){var i=Object.prototype.hasOwnProperty.call(f[n],e),a=i&&c["default"].some(f[n][e],function(e){return l["default"].configuration.resolver.compare(e,t)}),o="blacklist"===u.state._config.filterMode;return u.state._config.enabled&&(o&&(!i||i&&!a)||!o&&i&&a)}Object.defineProperty(t,"__esModule",{value:!0}),t.addFilter=a,t.removeFilter=o,t.matchesFilter=s;var r=n(1),c=i(r),u=n(5),d=n(2),l=i(d),f={"in":{},out:{}};t["default"]=f},function(e,t,n){function i(e){return e&&e.__esModule?e:{"default":e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n=1.x"
},
"dependencies": {
- "lodash": "3.x"
+ "lodash": "^4.12.0"
},
"devDependencies": {
"babel": "5.x",
diff --git a/src/FederationClient.js b/src/FederationClient.js
index 9d6847b..f9472eb 100644
--- a/src/FederationClient.js
+++ b/src/FederationClient.js
@@ -38,7 +38,7 @@ export default class FederationClient {
const env = _.clone( envelope );
if ( this.instanceId && this.instanceId !== env.lastSender &&
( !env.knownIds || !env.knownIds.length ||
- ( env.knownIds && !_.include( env.knownIds, this.instanceId ) ) )
+ ( env.knownIds && !_.includes( env.knownIds, this.instanceId ) ) )
) {
env.knownIds = ( env.knownIds || [] ).concat( _.without( state._clients, this.instanceId ) );
this.send( getPackingSlip( "message", env ) );
diff --git a/src/filters.js b/src/filters.js
index f504921..3048a9a 100644
--- a/src/filters.js
+++ b/src/filters.js
@@ -11,12 +11,12 @@ export default filters;
export function addFilter( _filters ) {
_filters = _.isArray( _filters ) ? _filters : [ _filters ];
- _.each( _filters, function( filter ) {
+ _.forEach( _filters, function( filter ) {
filter.direction = filter.direction || state._config.filterDirection;
- _.each( ( filter.direction === "both" ) ? [ "in", "out" ] : [ filter.direction ], function( dir ) {
+ _.forEach( ( filter.direction === "both" ) ? [ "in", "out" ] : [ filter.direction ], function( dir ) {
if ( !filters[ dir ][ filter.channel ] ) {
filters[ dir ][ filter.channel ] = [ filter.topic ];
- } else if ( !( _.include( filters[ dir ][ filter.channel ], filter.topic ) ) ) {
+ } else if ( !( _.includes( filters[ dir ][ filter.channel ], filter.topic ) ) ) {
filters[ dir ][ filter.channel ].push( filter.topic );
}
} );
@@ -25,10 +25,10 @@ export function addFilter( _filters ) {
export function removeFilter( _filters ) {
_filters = _.isArray( _filters ) ? _filters : [ _filters ];
- _.each( _filters, function( filter ) {
+ _.forEach( _filters, function( filter ) {
filter.direction = filter.direction || state._config.filterDirection;
- _.each( ( filter.direction === "both" ) ? [ "in", "out" ] : [ filter.direction ], function( dir ) {
- if ( filters[ dir ][ filter.channel ] && _.include( filters[ dir ][ filter.channel ], filter.topic ) ) {
+ _.forEach( ( filter.direction === "both" ) ? [ "in", "out" ] : [ filter.direction ], function( dir ) {
+ if ( filters[ dir ][ filter.channel ] && _.includes( filters[ dir ][ filter.channel ], filter.topic ) ) {
filters[ dir ][ filter.channel ] = _.without( filters[ dir ][ filter.channel ], filter.topic );
}
} );
@@ -37,7 +37,7 @@ export function removeFilter( _filters ) {
export function matchesFilter( channel, topic, direction ) {
const channelPresent = Object.prototype.hasOwnProperty.call( filters[direction], channel );
- const topicMatch = ( channelPresent && _.any( filters[ direction ][ channel ], function( binding ) {
+ const topicMatch = ( channelPresent && _.some( filters[ direction ][ channel ], function( binding ) {
return postal.configuration.resolver.compare( binding, topic );
} ) );
const blacklisting = state._config.filterMode === "blacklist";
diff --git a/src/handlers.js b/src/handlers.js
index e06ed8c..9d59d71 100644
--- a/src/handlers.js
+++ b/src/handlers.js
@@ -27,7 +27,7 @@ export const handlers = {
} );
data.source.pings[data.packingSlip.pingData.ticket] = undefined;
}
- if ( !_.contains( state._clients, data.packingSlip.instanceId ) ) {
+ if ( !_.includes( state._clients, data.packingSlip.instanceId ) ) {
state._clients.push( data.packingSlip.instanceId );
}
postal.publish( {
@@ -56,7 +56,7 @@ export const handlers = {
}
},
"federation.bundle": function( data ) {
- _.each( data.packingSlip.packingSlips, function( slip ) {
+ _.forEach( data.packingSlip.packingSlips, function( slip ) {
onFederatedMsg( _.extend( {}, data, {
packingSlip: slip
} ) );
diff --git a/src/index.js b/src/index.js
index 77a7c84..5dde918 100644
--- a/src/index.js
+++ b/src/index.js
@@ -27,7 +27,7 @@ const fedx = postal.fedx = {
state._outboundQueue.push( arguments );
return;
}
- _.each( this.transports, function( transport ) {
+ _.forEach( this.transports, function( transport ) {
transport.sendMessage( envelope );
} );
},
@@ -75,10 +75,10 @@ const fedx = postal.fedx = {
transports[transport] = [ target ];
break;
}
- _.each( transports, function( targets, name ) {
+ _.forEach( transports, _.bind( function( targets, name ) {
targets = typeof targets === "boolean" ? [] : targets;
this.transports[name].signalReady( targets, callback );
- }, this );
+ }, this ) );
}
};
diff --git a/src/state.js b/src/state.js
index ffd1738..4202198 100644
--- a/src/state.js
+++ b/src/state.js
@@ -35,7 +35,7 @@ export function disconnect( options ) {
trans = {};
trans[options.transport] = state._transports[options.transport];
}
- _.each( trans, function( t ) {
+ _.forEach( trans, function( t ) {
t.disconnect( {
target: options.target,
instanceId: options.instanceId,