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,