!function(){angular.module("angular-jwt",["angular-jwt.options","angular-jwt.interceptor","angular-jwt.jwt","angular-jwt.authManager"]),angular.module("angular-jwt.authManager",[]).provider("authManager",function(){this.$get=["$rootScope","$injector","$location","jwtHelper","jwtInterceptor","jwtOptions",function(t,e,r,n,a,i){function o(t){var r=null;return r=Array.isArray(t)?e.invoke(t,this,{options:null}):t()}function u(t){if(Array.isArray(t)||angular.isFunction(t))return e.invoke(t,w,{});throw new Error("unauthenticatedRedirector must be a function")}function s(){var t=o(w.tokenGetter);return t?!n.isTokenExpired(t):void 0}function h(){t.isAuthenticated=!0}function c(){t.isAuthenticated=!1}function l(){var e=o(w.tokenGetter);e&&(n.isTokenExpired(e)?t.$broadcast("tokenHasExpired",e):h())}function d(){if(e.has("$transitions")){var r=e.get("$transitions");r.onStart({},l)}else t.$on("$locationChangeStart",l)}function f(){t.$on("unauthenticated",function(){u(w.unauthenticatedRedirector),c()})}function g(t,e){if(!e)return!1;var r=e.$$route?e.$$route:e.data;r&&r.requiresLogin===!0&&!s()&&(t.preventDefault(),u(w.unauthenticatedRedirector))}function p(t){var e=t.to(),r=t.router.stateService;return e&&e.data&&e.data.requiresLogin===!0&&!s()?r.target(w.loginPath):void 0}var w=i.getConfig();if(t.isAuthenticated=!1,e.has("$transitions")){var v=e.get("$transitions");v.onStart({},p)}else{var m=e.has("$state")?"$stateChangeStart":"$routeChangeStart";t.$on(m,g)}return{authenticate:h,unauthenticate:c,getToken:function(){return o(w.tokenGetter)},redirect:function(){return u(w.unauthenticatedRedirector)},checkAuthOnRefresh:d,redirectWhenUnauthenticated:f,isAuthenticated:s}}]}),angular.module("angular-jwt.interceptor",[]).provider("jwtInterceptor",function(){this.urlParam,this.authHeader,this.authPrefix,this.whiteListedDomains,this.tokenGetter;var t=this;this.$get=["$q","$injector","$rootScope","urlUtils","jwtOptions",function(e,r,n,a,i){function o(t){if(!a.isSameOrigin(t)&&!u.whiteListedDomains.length)throw new Error("As of v0.1.0, requests to domains other than the application's origin must be white listed. Use jwtOptionsProvider.config({ whiteListedDomains: [] }); to whitelist.");for(var e=a.urlResolve(t).hostname.toLowerCase(),r=0;r(new Date).valueOf()+1e3*e)}}]),angular.module("angular-jwt.options",[]).provider("jwtOptions",function(){var t={};this.config=function(e){t=e},this.$get=function(){function e(){this.config=angular.extend({},r,t)}var r={urlParam:null,authHeader:"Authorization",authPrefix:"Bearer ",whiteListedDomains:[],tokenGetter:function(){return null},loginPath:"/",unauthenticatedRedirectPath:"/",unauthenticatedRedirector:["$location",function(t){t.path(this.unauthenticatedRedirectPath)}]};return e.prototype.getConfig=function(){return this.config},new e}}),angular.module("angular-jwt.interceptor").service("urlUtils",function(){function t(t){var e=t;return r.setAttribute("href",e),e=r.href,r.setAttribute("href",e),{href:r.href,protocol:r.protocol?r.protocol.replace(/:$/,""):"",host:r.host,search:r.search?r.search.replace(/^\?/,""):"",hash:r.hash?r.hash.replace(/^#/,""):"",hostname:r.hostname,port:r.port,pathname:"/"===r.pathname.charAt(0)?r.pathname:"/"+r.pathname}}function e(e){var r=angular.isString(e)?t(e):e;return r.protocol===n.protocol&&r.host===n.host}var r=document.createElement("a"),n=t(window.location.href);return{urlResolve:t,isSameOrigin:e}})}();