-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathresilient.min.js
More file actions
4 lines (4 loc) · 31.7 KB
/
resilient.min.js
File metadata and controls
4 lines (4 loc) · 31.7 KB
1
2
3
4
/*! resilient - v0.4.0 - MIT License - https://github.com/resilient-http/resilient.js */
(function(e){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=e()}else if(typeof define==="function"&&define.amd){define([],e)}else{var t;if(typeof window!=="undefined"){t=window}else if(typeof global!=="undefined"){t=global}else if(typeof self!=="undefined"){t=self}else{t=this}t.resilient=e()}})(function(){var e,t,r;return function e(t,r,n){function i(s,u){if(!r[s]){if(!t[s]){var f=typeof require=="function"&&require;if(!u&&f)return f(s,!0);if(o)return o(s,!0);var a=new Error("Cannot find module '"+s+"'");throw a.code="MODULE_NOT_FOUND",a}var c=r[s]={exports:{}};t[s][0].call(c.exports,function(e){var r=t[s][1][e];return i(r?r:e)},c,c.exports,e,t,r,n)}return r[s].exports}var o=typeof require=="function"&&require;for(var s=0;s<n.length;s++)i(n[s]);return i}({1:[function(e,t,r){var n=e("./utils");t.exports=i;function i(){this.store=Object.create(null)}i.prototype.flush=function(e){if(e){this.store[e]=null}else{this.store=n.emptyObject()}};i.prototype.get=function(e){return e?this.store[e]:n.clone(this.store)};i.prototype.set=function(e,t){if(e){this.store[e]={data:t,time:n.now()}}};i.prototype.time=function(e){var t=this.store[e];return t?t.time:null};i.prototype.exists=function(e){var t=this.store[e];return n.isObj(t)&&(n.isArr(t.data)&&t.data.length>0||n.isObj(t.data))||false}},{"./utils":20}],2:[function(e,t,r){var n=e("./utils");var i=e("./resolver");var o=e("./http");t.exports=s;function s(e){this._resilient=e}s.prototype.get=function(e,t,r){return this.send(e,t,r,"GET")};s.prototype.post=function(e,t,r){return this.send(e,t,r,"POST")};s.prototype.put=function(e,t,r){return this.send(e,t,r,"PUT")};s.prototype.del=s.prototype.delete=function(e,t,r){return this.send(e,t,r,"DELETE")};s.prototype.patch=function(e,t,r){return this.send(e,t,r,"PATCH")};s.prototype.head=function(e,t,r){return this.send(e,t,r,"HEAD")};s.prototype.send=function(e,t,r,i){var o=f.call(this,e,t,r,i);var s=o[0];var a=o[1];var c=new Promise(function(e,t){this._resilient.emit("request:start",s,this._resilient);u.apply(this,[s,function(r,n){if(r){t(r)}else{e(n)}a(r,n)}])}.bind(this));if(a!==n.noop){c.then(a).catch(a)}return c};function u(e,t){if(l(e)){return p(this._resilient,e,t)}else{return i(this._resilient,e,t)}}function f(e,t,r,i){if(typeof t==="function"){r=t;t=arguments[0]}t=c(this._resilient,n.isObj(t)?t:n.emptyObject());if(typeof e==="string")t.path=e;if(typeof i==="string")t.method=i;if(typeof r!=="function")r=n.noop;return[t,a(this._resilient,r)]}function a(e,t){return v(function r(n,i){e.emit("request:finish",n,i,e);t(n,i)})}function c(e,t){var r=e.options("service").get();if(t.timeout){t.$timeout=t.timeout}return n.merge(r,t)}function l(e){return e&&(n.isURI(e.path)||n.isURI(e.url))||false}function p(e,t,r){if(t.path){t.url=t.path;t.path=null}return(e._httpClient||o)(t,r)}function v(e){var t=false;return function(){if(t===false){t=true;e.apply(null,arguments)}}}},{"./http":7,"./resolver":13,"./utils":20}],3:[function(e,t,r){var n=t.exports=Object.create(null);n.service={method:"GET",timeout:10*1e3,timeouts:null,servers:null,retry:0,waitBeforeRetry:50,discoverBeforeRetry:true,promiscuousErrors:false,omitRetryWhen:null,omitFallbackWhen:null,omitRetryOnMethods:null,omitFallbackOnMethods:null,omitRetryOnErrorCodes:null,omitFallbackOnErrorCodes:null};n.balancer={enable:true,random:false,roundRobin:false,roundRobinSize:3,balanceStrategy:null,disableWeight:false,weight:{success:15,error:50,latency:35}};n.discovery={servers:null,method:"GET",retry:3,parallel:true,waitBeforeRetry:1e3,timeout:2*1e3,cacheEnabled:true,cacheExpiration:60*15*1e3,promiscuousErrors:true,refreshInterval:60*2*1e3,enableRefreshServers:true,enableSelfRefresh:false,forceRefreshOnStart:true,refreshServersInterval:60*5*1e3,refreshServers:null,refreshOptions:null,refreshPath:null,omitRetryWhen:null,omitFallbackWhen:null,omitRetryOnMethods:null,omitFallbackOnMethods:null,omitRetryOnErrorCodes:null,omitFallbackOnErrorCodes:null};n.resilientOptions=["servers","retry","timeouts","$timeout","parallel","cacheEnabled","cacheExpiration","refreshInterval","refreshServers","refreshOptions","refreshPath","waitBeforeRetry","promiscuousErrors","omitRetryWhen","omitFallbackWhen","omitRetryOnMethods","omitFallbackOnMethods","omitRetryOnErrorCodes","omitFallbackOnErrorCodes","enableRefreshServers","refreshServersInterval","discoverBeforeRetry","enableSelfRefresh","forceRefreshOnStart"]},{}],4:[function(e,t,r){var n=e("./utils");var i=e("./servers");var o=e("./requester");var s=e("./error");var u=3;t.exports=f;function f(e,t,r){var f=o(e);var v=e._middleware;function h(){return n.merge(e.options("discovery").get(),t)}function d(){return r||e.servers("discovery")}function y(){var e=d();return e&&e.exists()||false}function m(t,r){var n=[];var o=d().sort("read",e.balancer());var s=c(o.length);var l=p(r,n);var v=a(o,s,l);o.slice(0,u).forEach(function(e,r){var s=[e];if(r===2&&o.length>u){s=s.concat(o.slice(u))}f(new i(s),t,v,n)(null)})}function g(e,t){if(e.parallel){m(e,t)}else{f(d(),e,p(t))(null)}}function b(e){var t=h();t.params=l(t);v.run("discovery","out")(t,function(r){if(r){e(new s(1007,r))}else{g(t,e)}})}return function e(t){if(y()===false){t(new s(1002))}else{b(t)}}}function a(e,t,r){return function e(n,i){var o=t();if(n==null||o===0){t(true);r(n,i)}}}function c(e){e=e>2?u:e;return function t(r){return e=r?-1:e-1}}function l(e){return n.extend(e.params||e.qs||{},{_time:n.now()})}function p(e,t){return function(r,n){v(t);e(r||null,n)}}function v(e){if(e){if(!y(e)){e.forEach(h)}e.splice(0)}}function h(e){if(e){if(e.xhr){if(e.xhr.readyState!==4){d(e.xhr)}}else{d(e)}}}function d(e){if(typeof e.abort==="function"){try{e.abort()}catch(e){}}}function y(e){return e.filter(function(e){return n.isObj(e)}).length===0}},{"./error":5,"./requester":11,"./servers":18,"./utils":20}],5:[function(e,t,r){t.exports=i;var n={1e3:"All requests failed. No servers available",1001:"Cannot update discovery servers. Empty or invalid response body",1002:"Missing discovery servers. Cannot resolve the server",1003:"Cannot resolve servers. Missing data",1004:"Discovery server response is invalid or empty",1005:"Missing servers during retry process",1006:"Internal unexpected error",1007:"Middleware error"};function i(e,t){if(t instanceof Error){Error.call(this);this.error=t;if(t.code)this.code=t.code;if(t.stack)this.stack=t.stack}else if(t){this.request=t}this.status=e;this.message=n[this.status];if(e===1007&&t){this.message+=": "+(t.message||t)}}i.prototype=Object.create(Error.prototype);i.MESSAGES=n},{}],6:[function(e,t,r){t.exports=n;function n(){this.strategies=[]}n.prototype.add=function(e){if(typeof e==="function"){this.strategies.push(e)}};n.prototype.eval=function(e,t){return this.strategies.some(function(r){return r(e,t)})}},{}],7:[function(e,t,r){var n=e("./utils");var i=typeof window==="object"&&window;var o=/application\/json/i;var s=h();t.exports=u;function u(){return s.apply(null,arguments)}u.VERSION=s.VERSION;u.mapResponse=f;function f(e){return function(t,r,n){if(r&&r.statusCode){r.status=r.statusCode}if(n){try{(t||r).data=a(t||r)?JSON.parse(n):n}catch(e){t=e}}e(t,r)}}function a(e){return typeof e.body==="string"&&o.test(e.headers["content-type"])}function c(e){if(typeof e==="string"){e={url:e}}else{e=e||{}}if(e.params)e.qs=e.params;if(e.data)v(e);if(!i)l(e);return e}function l(e){e.headers=e.headers||{};if(!e.headers["User-Agent"]){e.headers["User-Agent"]=p()}}function p(){return"resilient-http "+u.LIBRARY_VERSION+" (node)"}function v(e){var t=e.data||e.body;if(t&&n.isObj(t)||n.isArr(t)){e.json=true;e.data=null}e.body=t}function h(){if(i){return e("lil-http")}else{return d(e("request"))}}function d(e){return function t(r,n){return e(c(r),f(n))}}},{"./utils":20,"lil-http":23,request:21}],8:[function(e,t,r){var n=e("./http");var i=e("./client");var o=e("./options");var s=e("./defaults");var u=e("./resilient");t.exports=u;u.VERSION="0.4.0";u.CLIENT_VERSION=n.VERSION;u.defaults=s;u.Options=o;u.Client=i;u.request=n;n.LIBRARY_VERSION=u.VERSION;if(typeof window!=="undefined"&&typeof e==="function"){window.resilient=u}},{"./client":2,"./defaults":3,"./http":7,"./options":10,"./resilient":12}],9:[function(e,t,r){var n=e("./utils");var i=e("midware");var o=["in","out"];t.exports=s;function s(){this.pool=u()}s.prototype.use=function(e,t){var r=this.pool;var i=n.toArr(t);i.filter(n.isFn).map(a(e)).forEach(c(r))};s.prototype.run=function(e,t){return this.pool[e][t].run};function u(){return{discovery:f(),service:f()}}function f(){return{in:i(),out:i()}}function a(e){return function(t){var r=t.type||"service";var n=e.options(r);return{type:r,handler:t(n,e)}}}function c(e){return function(t){var r="in";var i=t.handler;if(n.isFn(i)){if(i.hook==="out"){r="out"}e[t.type][r](i)}if(n.isObj(i)){o.filter(function(e){return n.isFn(i[e])}).forEach(function(r){e[t.type][r](i[r])})}}}},{"./utils":20,midware:24}],10:[function(e,t,r){var n=e("./utils");var i=e("./defaults");var o=e("./servers");t.exports=s;function s(e,t){this.store=t?n.clone(i[t]):Object.create(null);this.set(e)}s.prototype.get=function(e){return e?this.store[e]:n.clone(this.store)};s.prototype.http=function(){return n.omit(this.store,i.resilientOptions)};s.prototype.clone=function(){return s.define(u(this.store))};s.prototype.servers=function(e){return e?this.setServers(e):this.store.servers};s.prototype.setServers=function(e){if(this.store.servers){this.store.servers.set(e)}else{this.store.servers=new o(e)}};s.prototype.set=function(e,t){if(n.isObj(e)){n.each(e,n.bind(this,this.set))}else if(t!==undefined){if(e==="servers"){this.setServers(t)}else{if(e==="refreshServers"){t=new o(t)}this.store[e]=t}}};s.define=function(e,t){var r=new s;var n=e||{};Object.keys(t||i).filter(function(e){return e!=="resilientOptions"}).forEach(function(e){r.set(e,new s(n[e],e))});return r};function u(e){var t={};n.each(e,function(e,r){if(r instanceof s){t[e]=r.get()}});return t}},{"./defaults":3,"./servers":18,"./utils":20}],11:[function(e,t,r){var n=e("./utils");var i=e("./http");var o=e("./error");var s=e("./defaults").resilientOptions;t.exports=u;function u(e){return function t(r,i,o,s){var u=M(i.method);var c=f(e,r,u);i=n.clone(i);return function t(n){var f=null;var l=c.shift();if(l){i=m(l,i);f=v(l,u,i,y(o),t,e);d(e,i,f,s)}else{a(e,r,i,n,o)}}}}function f(e,t,r){if(e.balancer().get("enable")){return t.sort(r,e.balancer())}else{return t.get()}}function a(e,t,r,n,i){var s=n();var u=b(s);if(w(r,u)){i.apply(null,s)}else if(r.retry){c(e,t,r,i)}else{i(new o(1e3,u))}}function c(e,t,r,n){var i=p(e,t,r,n);var o=l(i,r);if(r.discoverBeforeRetry){O(e,o)}else{o()}}function l(e,t){return function(){n.delay(e,t.waitBeforeRetry)}}function p(e,t,r,n){return function(){if(t.exists()){r.retry-=1;e.emit("request:retry",r,t);u(e)(t,r,n)()}else{n(new o(1005))}}}function v(e,t,r,i,o,s){var u=n.now();return function f(a,c){var l=n.now()-u;s.emit("request:incoming",a,c,r,s);if(S(r,a||c)){e.reportError(t,l);i(a,c)}else if(T(s,r,a,c)){e.reportError(t,l);s.emit("request:fallback",r,a||c);o(h(a,c))}else{e.report(t,l);i(a,c)}}}function h(e,t){return function(r){return[e,t]}}function d(e,t,r,i){e.emit("request:outgoing",t,e);try{var o=P(e)(n.omit(t,s),r);if(i)i.push(o)}catch(e){r(e)}}function y(e){var t=i.mapResponse(e);return function(e,r){var n=e||r;var i=n?n.body||n.data:null;t(e,r,i)}}function m(e,t){t.url=n.join(e.url,t.basePath,t.path);t.timeout=g(t);return t}function g(e){var t=e.$timeout||e.timeout;var r=e.timeouts;var i=e.method;if(!e.$timeout&&n.isObj(r)){t=r[i]||r[i.toLowerCase()]||t}return t}function b(e){return e.filter(function(e){return e!=null}).pop()}function O(e,t){if(e.hasDiscoveryServers()){e._sync.unlock("updating");u.DiscoveryResolver.update(e,null,t)}else{t()}}function w(e,t){return k(e.omitRetryOnErrorCodes,t?t.status:null)||_(e.omitRetryOnMethods,e.method)||R(e.omitRetryWhen,e.method,t)}function S(e,t){return C(e,t)||E(e)||R(e.omitFallbackWhen,e.method,t)}function E(e){var t=e.omitFallbackOnMethods;return _(t,e.method)}function R(e,t,r){return n.isArr(e)&&r&&r.status&&e.some(x(t,r))}function x(e,t){return function(r){return n.isObj(r)&&j(r,e)&&q(r,t.status)}}function j(e,t){return e.method&&e.method===t||n.isArr(e.methods)&&A(e.methods,t)}function q(e,t){return t&&(e.code&&e.code===t||n.isArr(e.codes)&&k(e.codes,t))}function C(e,t){var r=e.omitFallbackOnErrorCodes;return t&&k(r,t.status)}function _(e,t){return n.isArr(e)&&e.length&&A(e,t)}function k(e,t){return t&&n.isArr(e)&&e.length&&~e.indexOf(t)&&t>=300}function A(e,t){t=(t||"GET").toUpperCase();return e.filter(function(e){return typeof e==="string"}).map(function(e){return e.toUpperCase().trim()}).some(function(e){return e===t})}function T(e,t,r,n){return I(r,n)||e._failStrategies.eval(r,n)||t.promiscuousErrors&&F(r||n)}function I(e,t){return e&&(e.code!==undefined||e.status===undefined&&t===undefined)||U(e||t)||false}function U(e){return N(429,e)}function F(e){return N(400,e)}function N(e,t){return t&&!t.code&&(t.status>=e||t.status===0)||false}function M(e){return e.toUpperCase()==="GET"?"read":"write"}function P(e){return typeof e._httpClient==="function"?e._httpClient:i}},{"./defaults":3,"./error":5,"./http":7,"./utils":20}],12:[function(e,t,r){var n=e("lil-event");var i=e("./utils");var o=e("./sync");var s=e("./cache");var u=e("./client");var f=e("./options");var a=e("./middleware");var c=e("./evaluator");var l=e("./resolvers/discovery");t.exports=p;function p(e){if(!(this instanceof p))return new p(e);this.cache=new s;this._sync=new o;this._client=new u(this);this._middleware=new a;this._failStrategies=new c;this._options=f.define(e)}p.prototype=Object.create(n.prototype);p.prototype.servers=function(e){var t=this.options(e||"service");return t?t.servers():null};p.prototype.setServers=function(e,t){this.options(t||"service").servers(e);return this};p.prototype.serversURL=function(e){var t=this.servers(e);return t?t.urls():null};p.prototype.discoveryServers=function(e){if(i.isArr(e)){this.options("discovery").servers(e)}else{return this.servers("discovery")}};p.prototype.hasDiscoveryServers=function(){var e=this.discoveryServers();return i.isObj(e)&&e.exists()||false};p.prototype.resetScore=p.prototype.resetStats=function(e){var t=this.options(e||"service").servers();if(t){t.resetStats()}return this};p.prototype.latestServers=p.prototype.getUpdatedServers=function(e,t){t=typeof e==="function"?e:t;if(this.discoveryServers()){this.discoverServers(e,t)}else if(this.servers("service")){t(null,this.servers("service").urls())}else{t(new Error("Missing servers"))}return this};p.prototype.discoverServers=function(e,t){return v(this,"fetch",e,t)};p.prototype.updateServers=function(e,t){return v(this,"update",e,t)};function v(e,t,r,n){if(typeof r==="function"){n=r;r=null}l[t](e,r,n||i.noop);return e}p.prototype.options=function(e,t){if(e&&i.isObj(t)){var r=this._options.get(e);if(r instanceof f){r.set(t)}return}if(i.isObj(e)){this._options=f.define(e);return}return this._options.get(e)};p.prototype.discoveryOptions=function(e){if(e){this.options("discovery",e)}else{return this.options("discovery").get()}};p.prototype.serviceOptions=function(e){if(e){this.options("service",e)}else{return this.options("service").get()}};p.prototype.httpOptions=function(e){var t=this.options(e||"service");if(t)return t.http()};p.prototype.useHttpClient=function(e){if(typeof e==="function"){this._httpClient=e}return this};p.prototype.restoreHttpClient=function(){this._httpClient=null;return this};p.prototype.serversUpdated=function(){var e=this.servers().lastUpdate();var t=this.options("discovery").get("refreshInterval")||0;return e<t};p.prototype.balancer=function(e){if(e){this.options("balancer",e)}else{return this.options("balancer")}};p.prototype.send=p.prototype.request=function(e,t,r){return this._client.send(e,t,r)};p.prototype.mock=function(e){this.useHttpClient(function(t,r){i.delay(function(){e(t,r)})});return this};p.prototype.unmock=function(){this.restoreHttpClient();return this};p.prototype.use=function(){this._middleware.use(this,arguments);return this};p.prototype.http=p.prototype.client=function(){return this._client};p.prototype.failStrategy=p.prototype.addFailStrategy=function(e){this._failStrategies.add(e);return this};["get","post","put","del","delete","head","patch"].forEach(function e(t){p.prototype[t]=function(e,r,n){return this._client[t](e,r,n)}})},{"./cache":1,"./client":2,"./evaluator":6,"./middleware":9,"./options":10,"./resolvers/discovery":14,"./sync":19,"./utils":20,"lil-event":22}],13:[function(e,t,r){var n=e("./utils");var i=e("./servers");var o=e("./requester");var s=e("./error");var u=e("./discovery");var f=e("./resolvers/discovery");t.exports=a;function a(e,t,r){r=x(r);var n=e._sync;var a=e._middleware;try{v(E)}catch(e){r(new s(1006,e))}function v(e){if(b()){h(e)}else if(w()){e()}else if(O()){g(e)}else{e(new s(1002))}}function h(t){var r=y();var i=l(r);var o=p(r);if(n.locked("discovering")){n.enqueue("discovering",d(r,t))}else{n.lock("discovering");u(e,o,i)(d(r,t))}}function d(e,t){return function(r,i){n.unlock("discovering");n.dequeue("discovering").forEach(function(e){e(r,i)});a.run("discovery","in")(r,i,function(n){if(r||n){t(new s(r?1001:1007,r||n))}else if(i&&i.data){m(i.data,e);g(t)}else{t(new s(1004,r))}})}}function y(){return e.options("discovery")}function m(t,r){e.emit("discovery:refresh",t,e);r.servers(t)}function g(t){f.update(e,null,t)}function b(){var e=false;var t=y();var r=t.get("servers");if(c(t)){if(r&&r.exists()){if(t.get("forceRefreshOnStart")){e=r.updated===0}if(!e){e=r.lastUpdate()>t.get("refreshServersInterval")}}else{e=true}}return e}function O(){return e.hasDiscoveryServers()}function w(){var t=e.servers();return t&&t.exists()&&S(t)||false}function S(e){var t=y().get("refreshInterval");if(O()){return e.lastUpdate()<t}return true}function E(e,t){e?r(e):R(t)}function R(n){var u=e.servers();var f=o(e);if(n&&n._cache){u=new i(n.data)}else if(!w()){return r(new s(1003))}a.run("service","out")(u,t,function(e){if(e){r(new s(1007,e))}else{f(u,t,r)(null)}})}function x(e){return function(t,r){a.run("service","in")(t,r,function(n){if(t||n){e(t||new s(1007,n))}else{e(null,r)}})}}}function c(e){var t=e.get("refreshServers");return e.get("enableRefreshServers")&&(e.get("enableSelfRefresh")||t&&t.exists())}function l(e){var t=e.get("enableSelfRefresh")?"servers":"refreshServers";return e.get(t)}function p(e){var t=n.omit(e.get(),["servers","refreshOptions"]);var r=n.merge(t,e.get("refreshOptions"),{discoverBeforeRetry:false});var i=v(e.get());if(i)r.basePath=i;return r}function v(e){return e&&(e.refreshPath||n.isObj(e.refreshOptions)&&e.refreshOptions.basePath)||false}},{"./discovery":4,"./error":5,"./requester":11,"./resolvers/discovery":14,"./servers":18,"./utils":20}],14:[function(e,t,r){var n=e("../error");var i=e("../requester");var o=e("../discovery");var s=e("./service");t.exports=u;i.DiscoveryResolver=u;function u(e,t,r){var n=e._sync;function i(e){return function(t,r){n.unlock("updating");n.dequeue("updating").forEach(function(e){e(t,r)});e(t,r)}}function s(s){n.lock("updating");o(e,t,r)(i(s))}return function e(t){if(n.locked("updating")){n.enqueue("updating",t)}else{s(t)}}}u.update=function(e,t,r){u(e,t)(s(e)(r))};u.fetch=function(e,t,r){u(e,t)(f(r))};function f(e){return function(t,r){if(t){e(t)}else if(r&&r.data){e(null,r.data)}else{e(new n(1001,r))}}}},{"../discovery":4,"../error":5,"../requester":11,"./service":15}],15:[function(e,t,r){var n=e("../utils");var i=e("../error");t.exports=o;function o(e){var t=e._middleware;var r=e.options("discovery");function o(){return r.get("cacheEnabled")}function u(){return e.cache.get("servers")}function a(t,r){e.emit("servers:"+t,r,e)}function c(t,r){var n=t.data;a("refresh",n);e.setServers(n);h(n);r(null,t)}function l(e,t){if(o()){p(e,t)}else{f(e,t)}}function p(e,t){var r=u();if(v(r)){t(null,{status:200,_cache:true,data:r.data})}else{f(e,t)}}function v(e){var t=r.get("cacheExpiration");return e&&n.isArr(e.data)&&n.now()-e.time>t||false}function h(t){if(o()){a("cache",t);e.cache.set("servers",t)}}function d(e,t,r){if(e){l(e,r)}else if(s(t)){c(t,r)}else{r(new i(1004,t))}}return function e(r){return function e(n,i){t.run("discovery","in")(n,i,function(e){d(n||e,i,r)})}}}function s(e){var t=false;if(e){if(n.isArr(e.data)&&e.data.length){t=true}else if(typeof e.data==="string"){t=u(e)}}return t}function u(e){try{e.data=JSON.parse(e.data);return true}catch(e){return false}}function f(e,t){var r=new i(e.status,e||{status:1e3});return t(r)}},{"../error":5,"../utils":20}],16:[function(e,t,r){t.exports=n;function n(e,t){var r=+t<2?2:t;var n=i(r,e).shift();return[].concat.apply([],n)}function i(e,t){var r;var n;var i;var o=[];if(!t){t=[];for(r=1;r<=e;r+=1)t.push(r)}else{t=t.slice()}if(e%2===1){t.push(-1);e+=1}for(n=0;n<e-1;n+=1){o[n]=[];for(i=0;i<e/2;i+=1){if(t[i]!==-1&&t[e-1-i]!==-1){o[n].push([t[i],t[e-1-i]])}}t.splice(1,0,t.pop())}return o}},{}],17:[function(e,t,r){var n=e("./defaults").balancer;t.exports=i;function i(e){this.url=e;this.resetStats()}i.prototype.report=function(e,t,r){var n=this.stats(e);if(n){n[r||"request"]+=1;n.latency=f(t||0,n)}};i.prototype.reportError=function(e,t){this.report(e,t,"error")};i.prototype.balance=function(e,t){var r=this.stats(e);var i=n.weight;var o=r.request+r.error;return o?u(r,i,o):0};i.prototype.stats=function(e,t){var r=this.statsStore[e||"read"];if(r&&t)r=r[t];return r};i.prototype.resetStats=function(){this.statsStore=o()};function o(){return{read:s(),write:s()}}function s(){return{latency:0,error:0,request:0}}function u(e,t,r){return a((e.request*100/r*t.success+e.error*100/r*t.error+e.latency*t.latency)/100)}function f(e,t){return a((e+t.latency)/(t.request+t.error))}function a(e){return+(e*100/100).toFixed(2)}},{"./defaults":3}],18:[function(e,t,r){var n=e("./utils");var i=e("./server");var o=e("./roundrobin");t.exports=s;function s(e){this.servers=[];this.updated=0;this.set(e)}s.prototype.get=function(){return this.servers.slice(0)};s.prototype.set=function(e){if(n.isArr(e)){this.updated=n.now();this.servers=f.call(this,e)}};s.prototype.lastUpdate=function(){return n.now()-this.updated};s.prototype.empty=function(){return this.servers.length===0};s.prototype.exists=function(){return this.size()>0};s.prototype.size=function(){return this.servers.length};s.prototype.urls=function(){return this.servers.map(function(e){return e.url})};s.prototype.resetStats=function(){this.servers.forEach(function(e){e.resetStats()})};s.prototype.sort=function(e,t){var r=this.servers.slice(0);if(r.length){if(!t.get("disableWeight")){r.sort(function(r,n){return r.balance(e,t)-n.balance(e,t)})}if(typeof t.get("balanceStrategy")==="function"){r=t.get("balanceStrategy")(r)}else if(t.get("random")){r=c(r)}else if(t.get("roundRobin")){r=l(r,t)}}return r};s.prototype.find=function(e){var t=null;for(var r=0,n=this.servers.length;r<n;r+=1){if(this.servers[r].url===e){t=this.servers[r];break}}return t};function u(e){if(n.isObj(e))e=e.url||e.uri;return n.isURI(e)}function f(e){return e.filter(u).map(n.bind(this,a))}function a(e){var t;if(e instanceof i){t=e}else{t=this.find(n.isObj(e)?e.url:e);if(!t)t=new i(e)}return t}function c(e){var t=e.slice(0);for(var r=t.length-1;r>0;r-=1){var n=Math.random()*(r+1)|0;var i=t[r];t[r]=t[n];t[n]=i}return t}function l(e,t){var r=0;if(t&&t.get("roundRobin")){var n=+t.get("roundRobinSize");r=n>e.length?e.length:n;if(r>1){return o(e,r)}}return e}},{"./roundrobin":16,"./server":17,"./utils":20}],19:[function(e,t,r){var n=e("./utils").isArr;t.exports=i;function i(){this.locks={};this.queues={}}i.prototype.locked=function(e){return o(this.locks,e)};i.prototype.lock=function(e){this.locks[e]=true;return true};i.prototype.unlock=function(e){this.locks[e]=false;return false};i.prototype.enqueue=function(e,t){if(o(this.locks,e)){this.push(e,t)}};i.prototype.dequeue=function(e){return(this.queues[e]||[]).splice(0)};i.prototype.push=function(e,t){var r=this.queues[e];if(n(r)===false){r=this.queues[e]=[]}r.push(t)};function o(e,t){var r=e[t];if(r===undefined){r=e[t]=false}return r}},{"./utils":20}],20:[function(e,t,r){var n=r;var i=Object.prototype.toString;var o=Array.prototype.slice;var s=Object.prototype.hasOwnProperty;var u=Function.prototype.bind;var f=Array.isArray;var a=/^http[s]?\:\/\/(.+)/i;r.noop=function(){};r.now=function(){return(new Date).getTime()};r.emptyObject=function(){return Object.create(null)};r.isObj=function(e){return e&&i.call(e)==="[object Object]"||false};r.isArr=function(e){return e&&f?f(e):i.call(e)==="[object Array]"};r.isFn=function(e){return typeof e==="function"};r.bind=function(e,t){return u?t.bind(e):function(){return t.apply(e,arguments)}};r.each=function(e,t){var r=null;var i=0;if(n.isArr(e)){for(r=0,i=e.length;r<i;r+=1)t(e[r],r)}else if(n.isObj(e)){for(r in e)if(s.call(e,r))t(r,e[r])}};r.clone=function(e){return n.extend({},e)};r.omit=function(e,t){var r=null;var i={};if(n.isObj(e)){for(r in e)if(s.call(e,r)){if(t.indexOf(r)===-1)i[r]=e[r]}}return i};r.delay=function(e,t){return setTimeout(e,t||1)};r.isURI=function(e){return typeof e==="string"&&a.test(e)};r.join=function(e){return(e||"")+n.toArr(arguments,1).filter(c).join("")};function c(e){return typeof e==="string"&&e.length>0}r.toArr=function(e,t){return o.call(e,+t||0)};r.extend=p(l);r.merge=p(h);function l(e,t,r){e[t]=r}function p(e){return function(t){var r=n.toArr(arguments,1);n.each(r,v(t,e));return t}}function v(e,t){return function(r){if(n.isObj(r)){n.each(r,function(r,n){t(e,r,n)})}}}function h(e,t,r){if(n.isObj(r)&&n.isObj(e[t])){n.merge(e[t],r)}else{l(e,t,r)}}},{}],21:[function(e,t,r){},{}],22:[function(t,r,n){(function(t,i){if(typeof e==="function"&&e.amd){e(["exports"],i)}else if(typeof n==="object"){i(n);if(typeof r==="object"&&r!==null){r.exports=n.Event}}else{i(t.lil=t.lil||{})}})(this,function(e){"use strict";var t="0.1.3";var r=Array.prototype.slice;var n=Object.prototype.hasOwnProperty;function i(){}i.prototype.constructor=i;i.prototype.addListener=i.prototype.on=function(e,t,r){if(typeof e!=="string")throw new TypeError("First argument must be a string");if(typeof t!=="function")throw new TypeError("Second argument must be a function");if(!o.call(this,e,t)){s.call(this,e).push({fn:t,once:r||false})}return this};i.prototype.removeListener=i.prototype.off=function(e,t){var r;var n=s.call(this,e);var i=o.call(this,e,t);if(i){r=n.indexOf(i);if(r>=0)n.splice(r,1)}return this};i.prototype.addOnceListener=i.prototype.once=function(e,t,r){this.addListener(e,t,true);return this};i.prototype.emit=i.prototype.fire=function(e){var t,n,i,o=r.call(arguments).slice(1);var u=s.call(this,e);if(e){for(t=0,n=u.length;t<n;t+=1){i=u[t];if(i.once)u.splice(t,1);i.fn.apply(null,o)}}return this};i.prototype.removeAllListeners=i.prototype.offAll=function(e){if(e&&n.call(this._events,e)){this._events[e].splice(0)}return this};function o(e,t){var r,n,i,o=s.call(this,e);for(r=0,n=o.length;r<n;r+=1){i=o[r];if(i.fn===t)return i}}function s(e,t){var r=u.call(this);return n.call(r,e)?r[e]:r[e]=[]}function u(){return this._events||(this._events={})}i.VERSION=t;e.Event=i})},{}],23:[function(t,r,n){(function(t,i){if(typeof e==="function"&&e.amd){e(["exports"],i)}else if(typeof n==="object"){i(n);if(typeof r==="object"&&r!==null){r.exports=n=n.http}}else{i(t.lil=t.lil||{})}})(this,function(e){"use strict";var t="0.1.17";var r=Object.prototype.toString;var n=Array.prototype.slice;var i=Object.prototype.hasOwnProperty;var o=typeof Function.prototype.bind==="function";var s=location.origin;var u=/^(http[s]?:\/\/[a-z0-9\-\.\:]+)[\/]?/i;var f=/application\/json/;var a=typeof XDomainRequest!=="undefined";var c=function(){};var l={method:"GET",timeout:30*1e3,auth:null,data:null,headers:null,withCredentials:false,responseType:"text"};function p(e){return e&&r.call(e)==="[object Object]"||false}function v(e){var t,r,o,s,u=n.call(arguments).slice(1);for(t=0,r=u.length;t<r;t+=1){s=u[t];for(o in s)if(i.call(s,o))e[o]=s[o]}return e}function h(e){var t=false;return function(){if(t===false){t=true;e.apply(null,arguments)}}}function d(e,t){if(!p(t))return;t["Content-Type"]=t["Content-Type"]||t["content-type"]||M.defaultContent;var r=Object.keys(t).reduce(function(e,r){var n=r.toLowerCase();if(n!==r){if(i.call(t,n)){delete t[n];delete e[n]}}e[r]=t[r];return e},{});Object.keys(r).forEach(function(t){e.setRequestHeader(t,r[t])})}function y(e){var t={},r=e.getAllResponseHeaders().trim().split("\n");r.forEach(function(e){var r=e.trim().split(":");var n=r.shift().trim();var i=r.join(":").trim();t[n]=i});return t}function m(e){return f.test(e.getResponseHeader("Content-Type"))}function g(e){return Object.getOwnPropertyNames(e).filter(function(t){return e[t]!==undefined}).map(function(t){var r=e[t]===null?"":e[t];return encodeURIComponent(t)+(r?"="+encodeURIComponent(r):"")}).join("&").replace(/%20/g,"+")}function b(e){var t=null;if(e.responseType==="text"){t=e.responseText;if(m(e)&&t)t=JSON.parse(t)}else{t=e.response}return t}function O(e){return e===1223?204:e}function w(e){var t={xhr:e,status:O(e.status),statusText:e.statusText,data:null,headers:{}};if(e.readyState===4){t.data=b(e);t.headers=y(e)}return t}function S(e,t){var r=w(e);r.error=t;if(t.stack)r.stack=t.stack;return r}function E(e){e.onreadystatechange=e.onerror=e.ontimeout=null}function R(e){var t=O(e.status);return t>=200&&t<300||t===304}function x(e,t){return h(function(r){t(S(e,r),null)})}function j(e,t,r){return function(e){if(t.readyState===4){E(t);if(R(t)){r(null,w(t))}else{x(t,r)(e)}}}}function q(e){var t=e.match(u);return t&&t[1]===s}function C(e){var t=e.url;if(p(e.params)){t+=(t.indexOf("?")===-1?"?":"&")+g(e.params)}return t}function _(e){if(a&&q(e)){return new XDomainRequest}else{return new XMLHttpRequest}}function k(e){var t=(e.method||"GET").toUpperCase();var r=e.auth;var n=C(e);if(!n||typeof n!=="string"){throw new TypeError("Missing required request URL")}var i=_(n);if(r){i.open(t,n,true,r.user,r.password)}else{i.open(t,n)}i.withCredentials=e.withCredentials;i.responseType=e.responseType;i.timeout=e.timeout;d(i,e.headers);return i}function A(e,t){return function(e){if(e.lengthComputable){t(e,e.loaded/e.total)}else{t(e)}}}function T(e){return e&&p(e.headers)&&(e.headers["content-type"]||e.headers["Content-Type"])||false}function I(e,t){var r=t.data;if(p(t.data)||Array.isArray(t.data)){if(T(t)===false){e.setRequestHeader("Content-Type","application/json")}r=JSON.stringify(t.data)}return r}function U(e,t){return function(){clearTimeout(t);e.apply(null,arguments)}}function F(e,t,r){var n=k(e);var i=I(n,e);var s=x(n,t);if(o){n.ontimeout=s}else{var u=setTimeout(function e(){if(n.readyState!==4){n.abort()}},e.timeout);t=U(t,u);s=x(n,t)}n.onreadystatechange=j(e,n,t);n.onerror=s;if(typeof r==="function"){n.onprogress=A(n,r)}try{n.send(i||null)}catch(e){s(e)}return{xhr:n,config:e}}function N(e){return function(t,r,i,o){var s,u,f=null;var a=v({},l,{method:e});var h=n.call(arguments);for(s=0,u=h.length;s<u;s+=1){f=h[s];if(typeof f==="function"){if(h.length===s+1&&typeof h[s-1]==="function"){o=f}else{i=f}}else if(p(f)){v(a,f)}else if(typeof f==="string"&&!a.url){a.url=f}}return F(a,i||c,o)}}function M(e,t,r,n){return N("GET").apply(null,arguments)}M.VERSION=t;M.defaults=l;M.defaultContent="text/plain";M.get=N("GET");M.post=N("POST");M.put=N("PUT");M.patch=N("PATCH");M.head=N("HEAD");M.delete=M.del=N("DELETE");return e.http=M})},{}],24:[function(t,r,n){(function(t,i){if(typeof e==="function"&&e.amd){e(["exports"],i)}else if(typeof n==="object"){i(n);if(typeof r==="object"&&r!==null){r.exports=n=n.midware}}else{i(t)}})(this,function(e){"use strict";function t(e){var t=n.stack=[];e=e||null;function n(){r(arguments).filter(function(e){return typeof e==="function"}).forEach(function(e){t.push(e)});return e}n.run=function n(){var i,o=r(arguments);if(typeof o[o.length-1]==="function"){i=o.pop()}if(!t.length){if(i)i.call(e);return}var s=t.slice();o.push(f);function u(){var t=s.shift();t.apply(e,o)}function f(t,r){if(t||r||!s.length){s=null
;if(i)i.call(e,t,r)}else{u()}}u()};n.remove=function(e){for(var r=0,n=t.length;r<n;r+=1){var i=t[r];if(i===e||i.name===e){t.splice(r,1);break}}};n.flush=function(){t.splice(0)};return n}function r(e){var t=new Array(e.length);for(var r=0,n=t.length;r<n;r+=1){t[r]=e[r]}return t}t.VERSION="0.1.7";e.midware=t})},{}]},{},[8])(8)});
//# sourceMappingURL=http://cdn.rawgit.com/resilient-http/resilient.js/0.4.0/resilient.min.js.map